Nginx负载均衡配置实战:从入门到生产部署

2026-07-21 ✍️ 信服无限编辑 0 次阅读 服务器运维托管

Nginx作为高性能的反向代理服务器,在企业服务器运维托管中承担着流量入口的关键职责。负载均衡配置做得好不好,直接影响到整个集群的稳定性和响应速度。这篇就围绕upstream模块和反向代理的实战配置展开,把生产环境中真正用得上的参数讲透。

upstream模块基础配置

upstream模块是Nginx实现负载均衡的核心。定义一个upstream块,把后端服务器地址写进去,然后在server块里通过proxy_pass引用就行。最基本的写法是指定几台后端服务器的IP和端口,Nginx默认采用轮询策略,请求会依次分发到各个节点。但生产环境基本不会用默认轮询,因为每台服务器的硬件配置可能不同,处理能力也有差异。

weight参数可以给不同服务器分配权重。配置高的机器给大权重,配置低的给小权重,这样流量分配更合理。比如一台32核64G的机器给weight=5,一台16核32G的给weight=2,Nginx就会按照5:2的比例分发请求。这个参数调起来很灵活,要根据实际压测数据来定,拍脑袋设的值往往不靠谱。

健康检查与故障转移

开源版Nginx自带的健康检查比较简陋,只有max_fails和fail_timeout两个参数。max_fails设置失败次数阈值,fail_timeout设置判定失败后的暂停时间。比如max_fails=3 fail_timeout=30s,意思是30秒内失败3次就标记为不可用,接下来的30秒不再往这台机器转发请求。这个机制能应对基本的故障场景,但对于更精细的健康检查,比如检测HTTP响应码、检测响应内容,就需要借助nginx_upstream_check_module或者直接上Nginx Plus。

backup参数也值得说一下。标记了backup的服务器平时不参与负载,只有当所有非backup服务器都挂了才会启用。这个适合用一台低配机器做兜底,虽然处理能力有限,但至少能保证服务不中断,给运维争取修复时间。

反向代理的关键参数

proxy_pass只是入口,真正影响线上表现的是一堆proxy开头的参数。proxy_set_header要设置Host和X-Real-IP,不然后端拿到的都是Nginx的IP,日志分析和访问控制全废了。X-Forwarded-For也要带上,多层代理的情况下这个头能把客户端真实IP一路传下去。

proxy_connect_timeout、proxy_read_timeout、proxy_send_timeout这三个超时参数要分清楚。connect_timeout是Nginx与后端建立连接的超时,一般设短一点,3到5秒就够了,连不上就快速换一台。read_timeout和send_timeout根据业务定,如果是API接口响应快,10到15秒就行;如果是文件上传下载,适当调大。timeout设太长会导致用户长时间等待,设太短又容易把慢请求误杀,需要根据监控数据反复调优。

proxy_next_upstream参数控制什么情况下把请求转发给下一台服务器。常用的配置是error timeout和http_500 http_502 http_503 http_504,意思是连接出错、超时或者后端返回5xx状态码时自动重试下一台。这个功能提升了容错能力,但要注意proxy_next_upstream_tries限制重试次数,不然遇到大面积故障时一个请求会挨个试遍所有后端,拖垮整个集群。

生产部署的注意事项

配置改完一定要nginx -t测试语法,通过后再nginx -s reload平滑加载。千万别直接重启,会导致正在处理的连接中断。线上环境建议用灰度发布的方式更新配置,先改一台观察一段时间没问题再全量推。日志格式也要规范,把upstream_addr、upstream_response_time、upstream_status这几个变量加进去,排查问题时能看到请求实际打到了哪台后端、响应耗时多少,定位故障节点特别快。


电话咨询 微信咨询 在线咨询 返回顶部
xycx202108

微信扫码咨询 | 浙ICP备2024102941号-10

×