12.17 Nginx负载均衡
12.18 ssl原理
12.19 生成ssl密钥对
12.20 Nginx配置ssl
12.17 Nginx负载均衡
代理一台服务器叫代理,代理多太服务器叫负载均衡。可以让多个服务器同时提供服务。当后端的一台服务器宕机可以让其他服务器来处理请求,在用户看来并没有差别。
步骤
1.配置文件
1 | [root@localhost ~]# vim /usr/local/nginx/conf/vhost/load.conf |
新建个load.conf的配置文件来做负载均衡1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18upstream qq
{
ip_hash;
server 59.37.96.63:80;
server 58.60.9.21:80;
}
server
{
listen 80;
server_name www.qq.com;
location /
{
proxy_pass http://qq;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream
后面加自定义模块名字 ip_hash
可以让用户的请求此终访问同一台服务器上 proxy_pass
由于是代理多个IP,因此这个用模块名字即可
2.检查语法并加载配置文件
1 | [root@localhost vhost]# /usr/local/nginx/sbin/nginx -t |
测试
1 | [root@localhost ~]# curl -x 127.0.0.1:80 www.qq.com |
成功的代理到qq的站点上
小知识
dig:查看某个站点的域名解析
yum install -y bind-utils
安装dig工具1
[root@localhost ~]# dig www.qq.com
1 | ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.qq.com |
12.18 ssl原理
SSL(Secure Sockets Layer 安全套接层))是为网络通信提供安全及数据完整性的一种安全协议。https就是使用了SSL来传输数据的,https对比http传输数据时候数据进行加密,更加安全。
- 工作流程
- 1.用户发送请求给服务端
- 2.服务器上有SSL证书(一对公私钥,公钥用于加密,私钥用于解密)
- 3.服务器把公钥给用户
- 4.用户收到公钥,浏览器先检验是否有效(证书的厂商事先和浏览器的厂商沟通认可)有效的并生成一串随机字符串,再使用公钥对字符串加密。
- 5.把加密都的字符串给回服务器
- 6.服务器用私钥对加密的字符串进行解密,再使用字符串对客服请求的数据进行加密
- 7.服务器把加密后的请求数据返回给用户
- 8.用户使用随机字符串对加密后的请求数据进行解密
12.19 生产ssl密钥对
由于没钱,这里我们就自己给自己颁发证书。
步骤
1.进入/usr/local/ngnix/conf/目录下并下载openssl工具(生成公钥,私钥 ,csr文件)
1 | [root@localhost ~]# cd /usr/local/nginx/conf/ |
2.生成私钥并输入私钥密码
1 | [root@localhost conf]# openssl genrsa -des3 -out si.key 2048 |
genrsa
生成私钥格式为rsa -des3
使用3des进行加密 2048
为长度
3.取消私钥密码(访问服务器时输入密码太麻烦)
1 | [root@localhost conf]# openssl rsa -in si.key -out private.key |
si.key和private.key是同一个私钥,只是private.key没有密码
4.删除原私钥
1 | [root@localhost conf]# rm -f si.key |
5.生成csr文件(该文件和私钥一起生成公钥)
1 | [root@localhost conf]# openssl req -new -key private.key -out kun.csr |
1 | Country Name: CN //您所在国家的ISO标准代号,中国为CN |
6.生成公钥
1 | [root@localhost conf]# openssl x509 -req -days 365 -in kun.csr -signkey private.key -out public.crt |
x509
证书的格式 -days 365
证书的日期一年 public.crt
就是生成的公钥
12.20 Nginx配置ssl
步骤
1.查看是否安装ssl模块
1 | [root@localhost conf]# /usr/local/nginx/sbin/nginx -V |
-V
可以查看Nginx的版本情况
2.进入Nginx的解压包里
1 | [root@localhost conf]# cd /usr/local/src/nginx-1.8.0 |
3.初始化ssl模块
--help
可以查看初始化所需要的模块参数1
2
3
4
5[root@localhost nginx-1.8.0]# ./configure --help |grep -i ssl
--with-http_ssl_module enable ngx_http_ssl_module
--with-mail_ssl_module enable ngx_mail_ssl_module
--with-openssl=DIR set path to OpenSSL library sources
--with-openssl-opt=OPTIONS set additional build options for OpenSSL
1 | [root@localhost nginx-1.8.0]# ./configure --prefix=/usr/local/nginx/ --with-http_ssl_module |
4.编译 安装
1 | [root@localhost nginx-1.8.0]# make |
1 | [root@localhost conf]# /usr/local/nginx/sbin/nginx -V |
现在Nginx已经安装ssl模块
6.重启Nginx服务
1 | [root@localhost conf]# service nginx restart |
1 | [root@localhost conf]# netstat -lnpt |
443端口正在被监听
5.新建ssl.conf文件
1 | [root@localhost conf]# vim /usr/local/nginx/conf/vhost/ssl.conf |
1 | server |
ssl on
开启ssl模块 ssl_certificate
公钥路径 ssl_certificate_key
私钥路径 ssl_protocols
ssl的协议
6.检查语法并加载配置文件
1 | [root@localhost vhost]# /usr/local/nginx/sbin/nginx -t |
测试
使用浏览器访问,由于证书是个人颁发的,不被浏览器认可
使用curl命令访问1
2[root@localhost conf]# curl -x 127.0.0.1:443 https://test3.com
curl: (56) Received HTTP code 400 from proxy after CONNECT
这个格式是错误的
先/etc/hosts
添加域名解析1
127.0.0.1 test3.com
1 | [root@localhost conf]# curl https://test3.com |
这个也是因为证书是个人的不被信任 ,实质是可以访问网站的。