12.17Nginx负载均衡
首先说一下正向代理和反向代理
正向代理:用户-->代理服务器-->web服务器 正向代理需要配置代理服务器
反向代理:反向代理好像就是用户直接访问web服务器,而实际呢,是中间有台反向代理去调用web服务器内容,如果有多个web服务器,那么就可以做负载均衡了,反向代理用户不需要进行配置
参考链接:https://blog.youkuaiyun.com/zhanghanboke/article/details/77488894
查看网址的ip
#dig qq.com //没有dig命令, yum install -y bind-utils.x86_64
可以看到有两个IP,这时就可以用2个ip做负载均衡
# vim /usr/local/nginx/conf/vhost/load.conf //写入下面的代码
upstream qq_com
{
ip_hash;
server 111.161.64.48:80;
server 111.161.64.40:80;
}
server
{
listen 80;
server_name www.qq.com;
location /
{
proxy_pass http://qq_com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ip_hash的目的是为了让同一个用户始终保持在一个机器上
-t && -s reload
访问
# curl -x127.0.0.1:80 www.qq.com
nginx负载均衡不支持代理https,就是说43端口是不支持的
12.18 ssl原理
1.浏览器发送一个https的请求给服务器;2. 服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;
3. 服务器会把公钥传输给客户端;
4.客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
5. 客户端把加密后的随机字符串传输给服务器;
6. 服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);
7. 服务器把加密后的数据传输给客户端;
8.客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;
https是加密的,防止信息泄露
12.19生成ssl密钥对
# cd /usr/local/nginx/conf/
这里要用到openssl //查看一个命令是由哪个包安装的#rpm -qf `which openssl`,注意这里不是引号,是ESC下面那个键。
生成私钥,并设置密码
# openssl genrsa -des3 -out tmp.key 2048 //
转换key并取消密码
# openssl rsa -in tmp.key -out aminglinux.key
这时就可以删掉tmp.key了# rm -f tmp.key
生成证书请求文件,需要拿这个文件和私钥一起生成公钥文件
# openssl req -new -key aminglinux.key -out aminglinux.csr //这个证书是自己制作的,信息可以随便写
生成公钥文件
# openssl x509 -req -days 365 -in aminglinux.csr -signkey aminglinux.key -out aminglinux.crt
这里的aminglinux.crt是公钥,aminglinux.key是私钥
12.20Nginx配置SSL
# mkdir /data/wwwroot/aming.com
#vim /usr/local/nginx/conf/vhost/ssl.conf //写入以下内容
server
{
listen 443;
server_name aming.com;
index index.html index.php;
root /data/wwwroot/aming.com;
ssl on;
ssl_certificate aminglinux.crt;
ssl_certificate_key aminglinux.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
# /usr/local/nginx/sbin/nginx -t //检查语法有错误,是因为我们之前就没有配置nginx支持ssl
处理过程
#cd /usr/local/src/nginx-1.14.0/
# ./configure --help |grep -i ssl
# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
#make install
# /usr/local/nginx/sbin/nginx -t //没有错误了
下面继续配置ssl
重启nginx
# /etc/init.d/nginx restart
查看监听端口
# netstat -lntp
# cd /data/wwwroot/aming.com/
# echo "this is ssl" > index.html //创建测试文件
不能用curl直接访问,会报400
编辑hosts
# vim /etc/hosts
# curl https://aming.com
证书是不可信任的,因为这是我们自己颁发的