Nginx 进阶详解

Nginx 配置进阶

负载均衡实现

业务说明

需要搭建tomcat服务器集群(应用集群),共同抗击高并发.这时需要使用反向代理服务器.同时配置负载均衡.

集群搭建

说明:准备3台tomcat服务器.端口号分别为8001/8002/8003.

负载均衡策略

轮询策略

说明:根据配置文件的顺序,依次访问服务器.

配置服务集群(默认是轮询策略)

java 复制代码
#配置服务列表,服务的ip地址为自己服务器的真实ip
upstream gateways{ 
server 192.168.1.130:8001;
server 192.168.1.130:8002;
server 192.168.1.130:8003;
}
#配置后台管理服务器
server {
listen 80;
server_name localhost;
location  / {
#实现http请求的转发
proxy_pass http://gateways;
}
}
权重策略

说明:可以为某些服务器添加权重,让该服务器处理能力更强的,可以处理更多的请求。

配置应用服务列表,本次配置采用默认是轮循策略,再给一个权重值;(让能者多劳)

java 复制代码
upstream gateways{
server 192.168.227.131:10001 weight=3;
server 192.168.227.131:10002 weight=2;
server 192.168.227.131:10003 weight=1;
}

备注,一但修改了配置文件(nginx.conf),要重新加载配置文件.(/usr/local/nginx/sbin/nginx -s reload)

IPHASH策略

问题说明:如果采用集群的部署,假如要做敏感操作,要求用户必须登录.但是由于nginx实现了负载均衡的操作,导致用户的Session数据不同共享.从而导致用户频繁登录.用户体验较差.

问题: nginx实现了tomcat负载均衡. 导致用户每次访问都是不同的服务器,但是用户的登录信息是存储在一台应用服务器上的,其它服务器没有这个登录信息,所以在访问到其它服务器时还需要重新登录。

解决方案: 能否让用户每次访问同一台服务器?答案是可以的,我们可以采用IPHASH策略,对请求进行负载均衡。

这样,同一个IP执行hash操作的结果肯定是相同。

IPHASH调用原理 如图所示:

IPHASH的配置如下:

java 复制代码
#配置服务应用列表
upstream geteways {
ip_hash;
server 192.168.227.131:10001 weight=6;
server 192.168.227.131:10002 weight=3;
server 192.168.227.131:10003 weight=1;
}
  • IPHASH存在的问题
  1. IPHASH如果一旦服务器出现异常,导致业务请求失效.
  2. 可能会出现负载不均的现象.负载有高有低(可在测试中试用).
    一般不会使用IPHASH,有时只是在测试中使用一下。
    3.3 NGINX常用属性
    3.3.1 Down属性
    说明:如果服务器宕机,可以在配置文件中标识为down.这样以后不会再访问故障机.
java 复制代码
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 down;
server 192.168.227.131:10002;
server 192.168.227.131:10003;
}
BACKUP设计

说明:备用机设置,正常情况下该服务器不会被访问.当主机全部宕机或者主机非常忙时,该服务器才会访问.

java 复制代码
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 down;
server 192.168.227.131:10002:8082;
server 192.168.227.131:10003 backup;
}
宕机服务器高可用实现

说明:当服务器宕机时,如果访问的失败次数达到最大失败次数,则标识为down.自动完成.在一定的周期之内,如果服务器恢复正常,则还会尝试访问故障机.

java 复制代码
max_fails=1 最大的失败次数 
fail_timeout=60s; 设定周期为60秒
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 max_fails=1 fail_timeout=60s;
server 192.168.227.131:10002 max_fails=1 fail_timeout=60s;
server 192.168.227.131:10003 max_fails=1 fail_timeout=60s;
}
相关推荐
Doris__HE13 分钟前
【元脑服务器NF5476G7-NF5476M7技术规格分享】
运维·服务器·网络·数据库·性能优化
打工仔折腾 AI1 小时前
FastAPI 从本机到生产服务器:Nginx+Gunicorn+Uvicorn 完整部署实录
人工智能·后端·python·nginx·fastapi·gunicorn
闲云野鹤在人间3 小时前
docker 入门 | 第7章 容器监控 和 第8章 容器日志 详解
运维·docker·容器·架构·云计算
亚川楼宇自控系统数据中心厂家3 小时前
IBMS 集成如何打通数据中心的子系统数据孤
运维
蓝速科技4 小时前
桌面双屏翻译机量产调试:三类场景兼容性破局方案丨蓝速科技
运维·数据库·人工智能·科技·技术分享
见闻小天地4 小时前
脱硫脱硝塔选变频器避坑指南:四方DL500变频器使用体验分享
大数据·运维·人工智能·业界资讯
吴声子夜歌4 小时前
Shell编程实例——内务及管理任务(一)
linux·运维·shell
wdfk_prog5 小时前
ROS教程10:从 gtest 到 rostest——Unit Test、Node 集成测试、rosbag 与 rqt 验证闭环
运维·缓存·docker·容器·ros
吴声子夜歌5 小时前
Shell编程实例——高级脚本编程(一)
linux·运维·网络·shell
Linux运维技术栈6 小时前
如何避免绕过CDN的攻击?基于 CDN 回源请求头鉴权的防御实操与安全性剖析
nginx·安全·cdn