Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

释放双眼,带上耳机,听听看~!

6月12日任务

12.17 Nginx负载均衡

12.18 ssl原理

12.19 生成ssl密钥对

12.20 Nginx配置ssl

扩展 

针对请求的uri来代理 http://ask.apelearn.com/question/1049

根据访问的目录来区分后端的web http://ask.apelearn.com/question/920

nginx长连接 http://www.apelearn.com/bbs/thread-6545-1-1.html

nginx算法分析 http://blog.sina.com.cn/s/blog_72995dcc01016msi.html

 

12.17 Nginx负载均衡

通过学习了Nginx代理,那么当只有一台机器的时候可以说是代理,如果有多台机器的时候,那就不能够单靠代理了,需要设置负载均衡。

比如有5个用户访问web服务器,如果其中一个服务器挂了,那么用户1不会再去请求web服务器1,而是自动分配其他的web服务器提供服务,这样就叫负载均衡。

操作步骤:

在正式操作之前可以使用dig命令解析网站域名对应的IP地址,如果没有安装,需要先使用 yum install -y bind-utils 安装dig命令。

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

设置负载均衡操作步骤:

1、新建ld.conf配置文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1[root@jimmylinux-001 vhost]# vim ld.conf
2
3加入以下内容
4
5upstream qq
6{
7    ip_hash;
8    server 180.163.26.39:80;
9    server 58.60.9.21:80;
10    server 59.37.96.63:80;
11}
12server
13{
14    listen 80;
15    server_name www.qq.com;
16    location /
17    {
18        proxy_pass      http://qq;
19        proxy_set_header Host   $host;
20        proxy_set_header X-Real-IP      $remote_addr;
21        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
22    }
23}
24

2、直接使用curl访问测试

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

重新-s加载配置文件,然后在curl访问www.qq.com就可以访问到真正的QQ主页了


1
2
3
4
1[root@jimmylinux-001 vhost]# /usr/local/nginx/sbin/nginx -s reload
2
3[root@jimmylinux-001 vhost]# curl -x127.0.0.1:80 www.qq.com
4

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

以上操作就是Nginx的负载均衡,另外一个知识点:
Nginx代理或负载均衡不支持去代理HTTPS,也就是server后面端口不可以写成443。

 

12.18 ssl原理

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

 

12.19 生成ssl密钥对

1、进入指定目录并生成私钥文件


1
2
3
4
5
6
7
8
9
1[root@jimmylinux-001 ~]# cd /usr/local/nginx/conf
2[root@jimmylinux-001 conf]# openssl genrsa -des3 -out tmp.key 2048
3Generating RSA private key, 2048 bit long modulus
4..............................................+++
5...............................+++
6e is 65537 (0x10001)
7Enter pass phrase for tmp.key:              输入密码abcd1234
8Verifying - Enter pass phrase for tmp.key:  再次确认密码
9

2、转换key,取消密码。


1
2
3
4
1[root@jimmylinux-001 conf]# openssl rsa -in tmp.key -out jimmy.key
2Enter pass phrase for tmp.key:
3writing RSA key
4

3、删除tmp.key文件


1
2
1[root@jimmylinux-001 conf]# rm -f tmp.key
2

4、生成证书请求文件,目的是为了和私钥一起生成公钥文件。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1[root@jimmylinux-001 conf]# openssl req -new -key jimmy.key -out jimmy.csr
2You are about to be asked to enter information that will be incorporated
3into your certificate request.
4What you are about to enter is what is called a Distinguished Name or a DN.
5There are quite a few fields but you can leave some blank
6For some fields there will be a default value,
7If you enter '.', the field will be left blank.
8-----
9Country Name (2 letter code) [XX]:China
10string is too long, it needs to be less than  2 bytes long
11Country Name (2 letter code) [XX]:CN
12State or Province Name (full name) []:ShenZhen
13Locality Name (eg, city) [Default City]:ShenZhen
14Organization Name (eg, company) [Default Company Ltd]:jimmy
15Organizational Unit Name (eg, section) []:jimmy
16Common Name (eg, your name or your server's hostname) []:jimmylinux
17Email Address []:joan2008.lms@gmail.com
18
19Please enter the following 'extra' attributes
20to be sent with your certificate request
21A challenge password []:abcd1234
22An optional company name []:jimmy
23

5、用生成的证书请求文件jimmy.csr和之前的jimmy.key私钥文件一起生成公钥文件


1
2
1[root@jimmylinux-001 conf]# openssl x509 -req -days 365 -in jimmy.csr -signkey jimmy.key -out jimmy.crt
2

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

这里的jimmy.key是私钥文件,jimmy.crt是公钥文件。

 

12.20 Nginx配置ssl

已经有公钥和私钥,那么就可以配置Nginx的SSL了。

1、进入指定目录、然后新建一个配置文件。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1[root@jimmylinux-001 vhost]# vim ssl.conf    新建配置文件
2
3添加以下内容
4
5server
6{
7    listen 443;                               监听端口
8    server_name jimmy.com;
9    index index.html index.php;
10    root /data/wwwroot/jimmy.com;
11    ssl on;                                   开启SSL支持HTTPS
12    ssl_certificate jimmy.crt;                指定公钥
13    ssl_certificate_key jimmy.key;            指定私钥
14    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;      SSL协议
15}
16

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

2、-t检查配置文件的语法是否正确,如果出现以下报错,因为最早编辑Nginx的时候并没有指定支持SSL,这里需要重新编译nginx,加上–with-http_ssl_module

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

重新配置完以后,执行make和make install


1
2
3
4
1[root@jimmylinux-001 nginx-1.12.1]# make
2
3[root@jimmylinux-001 nginx-1.12.1]# make install
4

3、刚才编译完以后就会多一个支持HTTPS的SSL,重新-t检查配置文件语法也没有问题了。

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

重启Nginx并检查监听端口


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1[root@jimmylinux-001 nginx-1.12.1]# /etc/init.d/nginx restart  重启Nginx
2Restarting nginx (via systemctl):                          [  确定  ]
3[root@jimmylinux-001 nginx-1.12.1]# netstat -lntp  检查监听端口
4Active Internet connections (only servers)
5Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
6tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4020/nginx: master  
7tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      934/sshd            
8tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1305/master        
9tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      4020/nginx: master  多一个443的端口
10tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1310/php-fpm: maste
11tcp6       0      0 :::22                   :::*                    LISTEN      934/sshd            
12tcp6       0      0 ::1:25                  :::*                    LISTEN      1305/master        
13tcp6       0      0 :::3306                 :::*                    LISTEN      1286/mysqld  
14

4、进入指定目录,然后创建一个测试文件。


1
2
3
4
5
6
7
8
9
10
11
1[root@jimmylinux-001 nginx-1.12.1]# cd /data/wwwroot/jimmy.com/
2
3[root@jimmylinux-001 jimmy.com]# ls
4
5[root@jimmylinux-001 jimmy.com]# vim 1.txt  新建测试文件
6
7添加以下内容
8This is SSL test page.
9
10[root@jimmylinux-001 jimmy.com]# mv 1.txt index.html  重新更名成index.html文件
11

5、测试访问


1
2
3
1[root@jimmylinux-001 jimmy.com]# curl -x127.0.0.1:443 https://jimmy.com/  如果直接使用curl方式访问,就会报400的错误状态码。
2curl: (56) Received HTTP code 400 from proxy after CONNECT
3

需要修改hosts文件,然后再访问才可以。

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

可以编辑Windows的hosts文件,通过浏览器访问。

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

如果浏览器打开很慢无法访问,那么就要检查下防火墙了。


1
2
3
4
1[root@jimmylinux-001 jimmy.com]# iptables -nvL  检查如果有防火墙
2
3[root@jimmylinux-001 jimmy.com]# iptables -F    可以直接-F
4

刷新浏览器就可以访问了,如果不被浏览器认可的证书或者不合法的证书,https都会出现红色的显示。

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

 

想要有合法认可颁发的证书,可以到这个网站进行购买。 

Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL

 

 

 

 

 

 

 

 

给TA打赏
共{{data.count}}人
人已打赏
安全运维

WordPress网站专用docker容器环境带Waf

2020-7-18 20:04:44

安全运维

运维安全-Gitlab管理员权限安全思考

2021-9-19 9:16:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索