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;
}
相关推荐
真正的醒悟15 小时前
2025【1460天】网络工程师经验之道
运维·服务器
JosieBook20 小时前
【远程运维】Linux 远程连接 Windows 好用的软件:MobaXterm 实战指南
linux·运维·windows
羚羊角uou1 天前
【Linux】命名管道
linux·运维·服务器
IT 小阿姨(数据库)1 天前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
逍遥浪子~1 天前
docker实践(一)
运维·docker·容器
AI云原生1 天前
如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器的教程
运维·docker·云原生·容器·serverless·firefox·kubeless
今生相伴9911 天前
ELFK:企业级日志管理的完整解决方案——从入门到精通
运维·elk·elasticsearch
小猪咪piggy1 天前
【JavaEE】(24) Linux 基础使用和程序部署
linux·运维·服务器
IT 小阿姨(数据库)1 天前
PgSQL中pg_stat_user_tables 和 pg_stat_user_objects参数详解
linux·运维·数据库·sql·postgresql·oracle
❀͜͡傀儡师1 天前
Docker部署搜索引擎SearXNG
运维·docker·容器·searxng