一、Nginx 的反向代理
优势
隔离内部服务器,提高安全性。
可以在代理服务器上增加缓存,减少后端服务器的压力,提高性能。
方便横向扩展。
AIO(异步非阻塞)动静分离,提高性能。
反向代理配置 1 2 3 4 5 6 7 8 9 10 11 location / { proxy_pass http:// www.baidu.com; } location /cuilan { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $http_x_forwarded_for; proxy_pass http:// 192.168 .0 .200 :8080 ; }
二、Nginx 的负载均衡 目前主流的负载均衡器:Nginx、LVS、HAProxy
upstream upstream 是 nginx 服务器的一个重要模块,upstream 模块实现在轮询客户端 IP 之间实现后端的负载均衡,ip_hash 算法 。
配置负载均衡 修改 nginx.conf
1.轮询 无法保证 session。
1 2 3 4 upstream xxx { server ip:port; server ip:port; }
2.ip_hash 访问固定的一台后端服务器,可以保证 session。
3.权重(weight) 分配轮询的比重,weight 值越高,访问的几率越大,权重值跟请求几率成正比。
4.响应时间 响应时间最短的优先分配。
5.url_hash 根据 url 计算来确定访问哪台主机,配置 hash。
三、进程模型及工作原理 Master/Worker 进程模型
Master 进程
接受外界的信号:kill -QUIT / kill -HUP
向各个 Worker 进程发送信号。
监控 Worker 的运行状态。
当 Worker 进程因异常退出,会自动重新启动新的 Worker 进程。
Worker 进程
处理客户端请求。
同步锁。
Nginx 模块
核心模块:http 模块、event 模块、mail 模块
基础模块
第三方模块
四、Nginx + keepalived 实现高可用 keepalived:基于 VRRP(虚拟路由器冗余器)来实现对 web 服务的高可用方案。
安装 keepalived
下载 keepalived ,并解压: tar -zxvf keepalived-1.3.4.tar.gz
配置:
1 2 ./configure --prefix=/usr/soft/keepalived/keepalived-1.3.4-bin/ --sysconf=/etc/
依赖 OpenSSL,安装 OpenSSL:
1 sudo yum install openssl-devel
make && make install
建立软连接(安装路径下):
1 sudo ln -s /usr/soft/keepalived/keepalived-1.3.5-bin/sbin/keepalived /sbin/
复制启动脚本,配置服务(源码包下):
1 sudo cp /usr/soft/keepalived/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/init.d/
将配置添加入服务(CentOS 下):
1 2 3 4 sudo chkconfig --add keepalived chkconfig keepalived on sudo service keepalived start
keepalived 配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 global_defs { (全局配置,配置告警邮件服务器) router_id LVS_DEVEL (唯一识别id ) } vrrp_instance VI_1 { (VRRP实例) state MASTER / BACKUP (设置主从) interface eth0 (设置网卡,通过ifconfig命令查看) virtual_router_id 51 (虚拟路由器id ) priority 100 (设置权重,大的为Master) virtual_ipaddress { (设置对外的虚拟ip) 192.168.0.100 } } vrrp_script chk_nginx_service { (vrrp_script指定检测脚本,对应名称自定义) script "/usr/soft/nginx/nginx-1.10.3-bin/sbin/nginx_service.sh" interval 3 weight -10 } virtual_server 192.168.0.100 80 { (LVS配置,映射VRRP虚拟ip) real_server 192.168.0.200 80 { (真实服务器地址) weight 1 (权重) TCP_GET { (TCP连接) connect_timeout 3 (连接超时时间) nb_get_retry 3 delay_before_retry 3 connect_port 80 (重新连接监听的端口) } } track_script { (配置检测nginx的脚本,指向vrrp_script) chk_nginx_service } }
nginx_service.sh nginx 安装目录下的检测 nginx 运行状态的脚本(nginx_service.sh)
1 2 3 4 5 6 7 8 #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin A=`ps -C nginx --no-header | wc -l`if [ $A -eq 0 ]then echo 'nginx service is died' service keepalived stopfi