当你的项目用户越来越多,单台Tomcat扛不住了,一到高峰期就卡顿、崩溃,老板天天催你优化——别慌!Nginx负载均衡就是你的“救命神器”🤩
很多开发者只会用默认的负载均衡策略,遇到Session丢失就懵了,今天就用“人话+实战配置”,把Nginx负载均衡讲透,6种策略+3种Session解决方案,看完直接落地,再也不用被老板骂!
一、负载均衡到底是啥?通俗比喻秒懂
还是用“保安+项目经理”的比喻:如果说Nginx是小区保安,那负载均衡就是项目经理,当小区访客太多(请求太多),一个保安(Tomcat)忙不过来,项目经理就把访客(请求)分给多个保安(多台Tomcat),避免有人忙死、有人闲死。
核心目的:分摊流量,提高项目可用性,就算一台Tomcat崩了,其他Tomcat还能正常工作,用户完全感知不到!
二、实战配置:多Tomcat负载均衡,复制就能用
假设你有2台Tomcat,端口分别是8080和8090,配置Nginx负载均衡超简单,两步搞定:

配置完,执行./nginx -s reload,访问localhost,Nginx就会自动把请求分给8080和8090的Tomcat,是不是超简单?
三、6种负载均衡策略:按需选择,别只会用默认的!
上面的配置用的是默认策略,但实际开发中,不同场景需要不同策略,6种策略一次性讲清,按需套用👇
|
轮询(默认) |
请求依次分配给每台Tomcat,雨露均沾 |
所有Tomcat配置相同,无特殊需求(比如测试环境) |
|
weight(权重) |
给Tomcat设权重,权重高的分配更多请求(比如server 127.0.0.1:8080 weight=2;) |
Tomcat配置不同(比如一台8核,一台4核),让高性能Tomcat多干活 |
|
ip_hash |
根据客户端IP分配,同一IP始终访问同一台Tomcat |
暂时解决Session丢失,适合内网管理后台(有局限,后面说) |
|
url_hash |
根据请求URL分配,同一URL始终访问同一台Tomcat |
静态资源缓存(比如同一图片,不用多台Tomcat重复处理) |
|
least_conn(最少连接) |
把请求分给当前连接数最少的Tomcat |
请求处理时间不一样(比如有的请求要查数据库,耗时久) |
|
fair(响应时间) |
根据Tomcat响应时间分配,响应快的优先分配 |
对用户体验要求高(比如电商网站,避免用户等待) |
重点提醒:url_hash和fair需要安装额外模块,新手先掌握前4种,足够应对大部分场景~
四、灵魂拷问:多Tomcat部署,如何防止Session丢失?
这是新手最容易踩的坑!用默认轮询策略,用户登录后,第一次请求到8080 Tomcat,Session存在8080上,第二次请求被分到8090 Tomcat,没有Session,就会被强制退出登录,用户体验直接拉胯😭
3种解决方案,从简单到推荐,一次性讲清,按需选择:
方案1:ip_hash(最简单,适合临时过渡)
在upstream里添加ip_hash; 指令,同一IP始终访问同一台Tomcat,Session就不会丢了:

缺点:如果某台Tomcat崩了,用户IP会被重新分配,Session还是会丢;而且在NAT环境下(比如企业内网),多个用户共享一个IP,会导致会话冲突,不适合生产环境长期用。
方案2:Session复制(最不推荐,坑多)
让多台Tomcat互相复制Session,不管请求分到哪台,都能拿到Session。但!多台Tomcat复制Session非常耗费资源,Tomcat越多,复制越慢,甚至会拖垮整个项目,生产环境千万别用!
方案3:Redis集中存储(推荐,生产环境首选)
这是最稳妥、最常用的方案,把Session存到Redis里,所有Tomcat都从Redis里读写Session,不管请求分到哪台Tomcat,都能拿到同一个Session,彻底解决丢失问题。
核心逻辑:Redis和Session都是键值对(key-value),都能设置过期时间,完美适配。而且Redis性能极高,就算多台Tomcat同时读写,也不会卡顿。
小贴士:Java项目可以用Spring Session + Redis,PHP项目可以直接配置session.save_handler = redis,不用改太多代码,轻松落地。
实战避坑:这些细节别忽略!
-
配置负载均衡后,一定要给Tomcat配置不同的端口,避免端口冲突;
-
用ip_hash时,不要随意添加/删除Tomcat节点,否则会导致大量Session失效;
-
Redis存储Session,一定要配置Redis高可用(主从或哨兵),避免Redis崩了,整个项目的Session都丢失;
-
改完负载均衡配置,记得执行./nginx -s reload,不然不生效(别问我怎么又提这个,踩过坑的都懂)。
最后总结
Nginx负载均衡不难,核心就是“分请求、保可用”,6种策略按需选择,Session丢失用Redis解决,新手也能轻松落地。
如果你的项目正面临高并发压力,或者被Session丢失困扰,赶紧试试上面的配置,评论区留下你的场景,我帮你优化配置~ 关注我,下期讲Nginx性能调优,让你的项目再快一步!


