一、https协议
1.1 背景
在前面的演示中,我们使用的是http协议,而在正式环境,我们通常使用https协议,来保证数据在网络中的安全
这里涉及公、私钥的概念
服务的提供方,这里指nginx,提供一套对应的公钥和私钥
服务的使用方,这里指浏览器,在第一次访问nginx时,需要下载证书,证书中包含公钥。
这样当浏览器访问服务器时,会将请求数据使用公钥进行加密,nginx服务器使用对应的私钥进行解密
1.2 环境要求
先查看nginx版本信息,命令:nginx -V
有--with-http_ssl_module,表示安装了https模块。否则需要重新安装。
1.3 nginx配置
证书和私钥是需要购买的,但是我们自己也可以通过以下命令,生成证书和私钥,用来测试
# 1、创建服务器私钥,命令会让你输入一个密码,创建证书时需要
openssl genrsa -des3 -out server.key 1024
# 2、创建签名请求的证书(CSR),需要输入你设置的密码,并设置一些信息,不重要
openssl req -new -key server.key -out server.csr
# 3、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
openssl rsa -in server.key -out server_nopass.key
# 4、最后标记证书使用上述私钥和CSR:
openssl x509 -req -days 365 -in server.csr -signkey server_nopass.key -out server.crt
然后在nginx的配置文件server段加入
#证书
ssl_certificate /etc/nginx/conf.d/server.crt;
#私钥
ssl_certificate_key /etc/nginx/conf.d/server_nopass.key;
二、keepAlied
2.1 背景
之前我们介绍过nginx可以对浏览器的请求进行负载均衡,把请求发给不同的tomcat,以防止tomcat承受不了过多的请求
也就是说,如果只是其中的一台tomcat挂掉,不会影响业务继续
但同样存在这样情况,nginx服务器挂了,这下整个服务就不可用了
2.2 解决方式
keepalived通过lvs思想来解决,也就是提供一个虚拟网关vip
也就是由2台nginx服务器,虚拟出来一台虚拟网关vip,此vip由两台nginx服务器共同协商生成
当有一台nginx服务器宕机时,另一台nginx服务器一样能维持vip。这保证了,只要两台nginx服务器不同时宕机,vip就存在
2.3 keepalived安装
下载keepalived安装包
./configure --prefix=/data/program/keepalived --sysconf=/etc ##因为keepalive启动时候会默认读取/etc/keepalived/keepalived.conf
make && make install
注:keepalived在docker中无法正常使用
2.4 配置
打开/etc/keepalived/keepalived.conf,只需要配置如下一段。(其它是多余配置,删除)
重启keepalived
然后再配置另一台nginx服务器,配置文件有两个地方不同
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
priority 100 # 优先级,数值越大,处理请求的优先级越高。备用数字小些
这样,当主nginx挂掉后,keepalived就会启动备nginx
此时,虽然服务不会停止,但是主nginx还是挂掉的状态,我们可以通过脚本,自动重启挂掉的nginx
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #重启nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移
killall keepalived #杀掉,vip就漫游到另一台机器
fi
fi
在配置文件中加入以下两处配置
重启keepalived,此时当nginx服务器挂掉后,通过脚本监测后重启
总之:keepalived主备之间相互发送心跳检测,如果有一个死掉,另一个活的得不到回应了,此时启动vip到自己机器上。如果相互之间是通的,比较priority的优先级,值大的机器绑vip