框架建设收集

第十二章:Nginx配置HTTPS

2019-10-17  本文已影响0人  chenkang

第一节:HTTPS基础知识

  1. https含义:是以安全为目标的HTTP通道,简单讲是HTTP的安全版
  2. http端口:80 https端口:443
  3. 作用:用于加密用户与网站之间的数据传输
  4. HTTPS和HTTP的区别主要为以下四点:
域名证书类型 域名
单域名证书 www.mysun.com
多域名证书 www.mysun.com ,www.myqu.com
通配符域名 *.mysun.com

工作中选择域名过程:
1.先收集好所有的域名
2.过滤分析一共有几种类型的域名
*.www.mysun.com
*.mysun.com

[root@lb01 ~]# sed -nr 's#^([a-Z0-9]+).(.*$)#\2#gp' name.txt |sort|uniq -c|sort
2 www.mysun.com
3 mysun.com

第二节: 简单nginx配置https

1.检查Nginx是否有SSL模块

nginx -V 进行查看是否有:
        --with-http_ssl_module

2.创建证书目录并生成证书

mkdir /etc/nginx/ssl_key 
cd /etc/nginx/ssl_key
openssl genrsa -idea -out server.key 2048

openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

3.创建nginx配置文件

[root@web01 /etc/nginx/conf.d]# cat ssl.conf 
server {
    listen 443 ssl;
    server_name ssl.oldboy.com;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;
    location / {
        root /code;
        index index.html;
    }
}

4.重启nginx

nginx -t 
systemctl restart nginx 

5.写入测试文件

echo "web01 SSL" > /code/index.html

第三节: 强制http跳转到https

1.配置nginx配置文件

[root@web01 /etc/nginx/conf.d]# cat ssl.conf 
server {
    listen 80;
    server_name ssl.oldboy.com;
    rewrite ^(.*) https://$server_name$1 redirect;
}

server {
    listen 443 ssl;
    server_name ssl.oldboy.com;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;
    location / {
        root /code;
        index index.html;
    }
}

第四节:Nginx集群配置https

1.复制已经创建好的证书到其他的web服务器

cd /etc/nginx/ 
scp -r ssl_key 10.0.0.8:/etc/nginx/
scp -r conf.d/ssl.conf 10.0.0.8:/etc/nginx/conf.d/
echo "$(hostname) SSL" > /code/index.html

2.复制已经创建好的证书到lb服务器

cd /etc/nginx/ 
scp -r ssl_key 10.0.0.5:/etc/nginx/

3.第一种情况:lb服务器http强制跳转https并代理到后端的https

lb服务器配置:

[root@lb01 /etc/nginx/conf.d]# cat ssl.conf 
upstream ssl_pools {
   server 172.16.1.7:443;
   server 172.16.1.8:443;
}

server {
   listen 80;
   server_name  ssl.oldboy.com ;
   rewrite ^(.*) https://$server_name$1 redirect;
}

server {
    listen 443 ssl;
    server_name ssl.oldboy.com;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;
    location / {
      proxy_pass  https://ssl_pools;
      include proxy_params;
    }
}

web服务器配置:
[root@web02 /etc/nginx/conf.d]# cat ssl.conf

   server {
        listen 443 ssl;
        server_name ssl.oldboy.com;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
        location / {
            root /code;
            index index.html;
        }
    }

4.第二种情况:lb服务器负责https加解密,后端web服务器还是80端口

1.lb服务器配置

[root@lb01 ~]# cat /etc/nginx/conf.d/ssl.conf 
upstream ssl_pools {
   server 172.16.1.7;
   server 172.16.1.8;
}

server {
   listen 80;
   server_name  ssl.oldboy.com ;
   rewrite ^(.*) https://$server_name$1 redirect;
}

server {
    listen 443 ssl;
    server_name ssl.oldboy.com;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;
    location / {
      proxy_pass  http://ssl_pools;
      include proxy_params;
    }
}

2.web服务器配置

[root@web01 /etc/nginx/conf.d]# cat ssl.conf 
server {
    listen 80;
    server_name ssl.oldboy.com;
    location / {
        root /code;
        index index.html;
    }
}

第五节:wordpress配置https

lb服务器配置

1.配置nginx配置文件

[root@lb01 ~]# cat /etc/nginx/conf.d/ssl.conf 
upstream ssl_pools {
   server 172.16.1.7;
   server 172.16.1.8;
}

server {
   listen 80;
   server_name  blog.mysun.com;
   rewrite ^(.*) https://$server_name$1 redirect;
}

server {
    listen 443 ssl;
    server_name blog.mysun.com;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;
    location / {
      proxy_pass  http://ssl_pools;
      include proxy_params;
    }
}

2.配置fastcgi的https相关参数

echo "fastcgi_param  HTTPS on;" >> /etc/nginx/fastcgi_params

web服务器配置:(2台web服务器都需要配置)

3.web服务器nginx配置

[root@web01 ~]# cat /etc/nginx/conf.d/blog.conf 
server {
    listen 80;
    server_name blog.mysun.com;
    root /code/wordpress;
    index index.php index.html;

    location ~ \.php$ {
        root /code/wordpress;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

4.重启nginx

nginx -t 
systemctl restart nginx 

第六节:常见报错总结:

1.hosts文件条目重复(杂乱)

2.hosts文件地址写错

3.lb服务器的地址池端口没有给成443

4.web02服务器没有配置server_name导致访问到web02的默认首页

第七节:HTTPS的非对称加密原理

我们首先需要申请证书,需要进行登记,登记我是谁,我是什么组织,我想做什么,到了登记机构在通过CSR发给CA,CA中心通过后,CA中心会生成一对公钥和私钥,那么公钥会在CA证书链中保存,公钥和私钥证书订阅人拿到后,会将其部署在WEB服务器上
1.当浏览器访问我们的https站点时,它会去请求我们的证书
2.Nginx这样的web服务器会将我们的公钥证书发给浏览器
3.浏览器会去验证我们的证书是否是合法和有效的。
4.CA机构会将过期的证书放置在CRL服务器,那么CRL服务的验证效率是非常差的,所以CA又推出了OCSP响应程序,OCSP响应程序可以查询指定的一个证书是否过期,所以浏览器可以直接查询OCSP响应程序,但OCSP响应程序性能还不是很高。
5.Nginx会有一个OCSP的开关,当我们开启后,Nginx会主动上OCSP上查询,这样大量的客户端直接从Nginx获取,证书是否有效

上一篇 下一篇

猜你喜欢

热点阅读