Nginx反向代理、负载均衡
反向代理
什么是反向代理
客户端向代理服务器发送请求,代理服务器根据这个请求去选择实际能提供相关服务的http服务器,然后把资源通过代理服务器交给客户端。此时,客户端只能知道代理服务器的地址,无法知道实际提供服务的http服务器地址。
与之对应的,是前向代理。前向代理中,客户端通过一个代理客户端来发送请求,此时服务器只知道代理客户端的地址,不知道真实客户端的地址,如VPN。
要注意的是,文中的代理服务器与代理客户端的说法是为了方便理解,实际上两者都是服务器,只是代理的对象不同,有点像学生代表、或明星的经纪人?
Nginx如何做反向代理
只需要在nginx的conf配置文件中,增加server代码块,修改对应的server_name、location、upstream。
也可以用这种方法做虚拟主机,这样可以两个域名指向同一台nginx服务器,用户访问不同的域名显示不同的网页内容,因为多个域名可以对应一个ip地址,最好是根据域名区分,ip或端口也行。
先看基于域名的虚拟主机配置
1 | 虚拟主机1 |
反向代理配置
除了upstream外,还要注意location的变化,proxy_pass。
1 | http服务器 |
负载均衡
Load Balance,同种服务有多个http服务器时,nginx根据http服务器被分配的权重,把请求轮换分配给某个http服务器。
只需要在upstream对服务器进行权重分配,weight默认为1。
1 | upstream tomcat_server_pool{ |
高可用
准备两台Nginx服务器,一主一备。都装keepalived做健康检查,两个keepalived会保持通讯,主服务器拿到虚拟ip(vip)运行中,当主Nginx服务器上的keepalived失去响应时,备用服务器上的keepalived会启动备用的Nginx,拿到主Nginx的虚拟ip(vip),代替主服务器工作。
keepalived的安装
安装环境
1 | su - root |
安装keepalived
将keepalived-1.2.15.tar.gz上传到服务器/usr/local/下。
1 | cd /usr/local |
至此安装完成。
1 | 拷贝执行文件 |
加入开机启动
1 | chkconfig --add keepalived #添加时必须保证/etc/init.d/keepalived存在 |
添加完可查询系统服务是否存在:chkconfig --list
启动keepalived
1 | 启动:service keepalived start |
配置日志文件
1 | 将keepalived日志输出到local0: |
打开防火墙的通讯地址
1 | iptables -A INPUT -d 224.0.0.18 -j ACCEPT |
主Nginx
修改主nginx下/etc/keepalived/keepalived.conf文件
1 | ! Configuration File for keepalived |
备Nginx
修改备nginx下/etc/keepalived/keepalived.conf文件
配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致
1 | ! Configuration File for keepalived |
tips:
因为备份服务器的启动,是依据主服务器上的keepalived的响应状况判断的,所以当主服务器的keepalived意外停止,或者当nginx进程停止时,keepalived没有按计划停止,就无法启动备份服务器。
nginx进程检测脚本
为了解决nginx进程和keepalived不同时存在的问题,需要在主服务器上编写Nginx进程检测脚本check_nginx.sh,判断nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉。
1 |
|
- 脚本运行测试
将check_nginx.sh拷贝至/etc/keepalived下,
将nginx停止,将keepalived启动,执行脚本:sh /etc/keepalived/check_nginx.sh,若keepalived进程被顺利杀死,即成功。
- 修改主nginx的keepalived.conf,添加脚本定义检测:
1 | 全局配置 |