nginx配置负载均衡
参考资料
nginx配置负载均衡
Nginx 配置负载均衡
为什么需要负载均衡
当单台服务器的访问量逐渐增长,CPU、内存或带宽接近上限时,用户会明显感受到响应变慢甚至超时。负载均衡的核心作用,就是把进入的请求按照既定规则分发到多台后端服务器上,让每一台服务器都能处于合理的负载范围,从而提升整体服务的可用性与吞吐量。 Nginx 作为高性能的反向代理服务器,其内置的负载均衡模块稳定、轻量且配置简单,无需额外安装第三方组件,非常适合在 Web 服务入口直接使用。
前置准备
在动手配置前,请确认以下条件已满足:
- 操作系统为 Linux(本文示例基于 Ubuntu/CentOS,命令通用)。
- 已安装 Nginx(建议版本 1.18 及以上),可通过 `nginx -v` 查看版本。
- 至少有两台可正常访问的后端服务器,例如内网 IP:`192.168.1.101` 与 `192.168.1.102`,均监听 80 端口。
- 已有或临时准备一个测试域名,如 `www.example.com`(若无域名,可使用服务器 IP 测试)。
最小化配置示例
以下为最基础的 HTTP 负载均衡配置。将后端服务器放入 `upstream` 组,然后在 `server` 中使用 `proxy_pass` 指向该组。 nginx http { upstream backend { server 192.168.1.101:80; server 192.168.1.102:80; } server { listen 80; server_name www.example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } 主要配置项说明:
- `upstream backend`:定义一组后端服务器,名称可自定义。
- `server`:列出每台后端地址。
- `proxy_pass http://backend;`:将匹配的请求转发到该组。
- 三个 `proxy_set_header` 用于传递客户端真实 IP 与原始 Host,便于后端记录日志或做访问控制。
常用负载策略
#### 1. 轮询(默认) 不写任何策略时,Nginx 按请求顺序轮流分发到各后端。适用于后端服务器配置基本一致的场景。 #### 2. 权重(weight) 若服务器性能有差异,可让更高配置的机器承担更多请求: nginx upstream backend { server 192.168.1.101:80 weight=3; server 192.168.1.102:80 weight=1; } 如上配置表示每 4 个请求中,大约 3 个发往 101,1 个发往 102。 #### 3. IP 哈希(ip_hash) 同一客户端的请求会固定发往同一台后端,适用于需要保存本地 Session 的应用(但现代架构更推荐使用集中式 Session)。 nginx upstream backend { ip_hash; server 192.168.1.101:80; server 192.168.1.102:80; } #### 4. 最少连接(least_conn) 将新请求优先分配给当前活跃连接数最少的后端,适合请求处理时间差异较大的业务。 nginx upstream backend { least_conn; server 192.168.1.101:80; server 192.168.1.102:80; }
健康检查与故障摘除
默认情况下,Nginx 仅在网络层判断后端是否“可连接”。如果后端服务进程存在但应用返回 500 错误,Nginx 仍会继续转发。您可以使用 `max_fails` 与 `fail_timeout` 实现简单的被动健康检查: nginx upstream backend { server 192.168.1.101:80 max_fails=2 fail_timeout=10s; server 192.168.1.102:80 max_fails=2 fail_timeout=10s; } 上述参数表示:在 10 秒内如果与某台后端通信失败达到 2 次,则将该后端标记为不可用,并在接下来 10 秒内不再向其转发请求。示例为避免频繁重试而设的保守值,实际可按业务容忍度调整。 若需要主动探测后端健康状态(如检查具体 URL 的返回码),推荐使用商业版 Nginx Plus,或自行编译 `nginx_upstream_check_module` 第三方模块。该操作涉及 Nginx 重新编译,需谨慎评估维护成本。
配置完成后必须验证
每次修改配置后,都应在服务器上依次执行以下命令: bash
检查配置语法是否正确
nginx -t
使配置生效(平滑重载,不中断服务)
nginx -s reload 若 `nginx -t` 输出 `syntax is ok` 与 `test is successful`,即可重载。若提示错误,请根据提示定位配置文件行号并修正,然后再次执行上述命令。
验证负载均衡效果
您可以通过后端服务器的访问日志观察请求是否被分散。例如在两台后端上分别执行: bash tail -f /var/log/nginx/access.log 然后从外部访问 `http://www.example.com`(需配置 hosts 或 DNS),连续请求数次,正常情况下两台服务器的日志中都会出现访问记录。也可以使用 `curl -I http://www.example.com` 进行测试。
注意事项
- 后端会话保持问题:若未使用 `ip_hash` 或共享存储,同一个用户登录后可能因请求分发到不同后端而掉线。推荐使用 Redis 等外部会话存储,或在网关层使用基于 Cookie 的一致性哈希。
- 代理超时设置:默认 `proxy_read_timeout` 为 60 秒,如果后端处理耗时较长,需要显式增大,例如:
nginx location / { proxy_connect_timeout 5s; proxy_read_timeout 120s; }
- 避免暴露内网 IP:`proxy_pass` 指向的内网地址只应在 Nginx 配置中出现,请勿在页面或文档中泄露真实网络拓扑。
- 回滚方式:任何变更前建议备份原配置:`cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak`。若重载后出现异常,可使用备份文件恢复并再次 `nginx -t` 后执行 `nginx -s reload`。
- 防火墙与安全组:确保 Nginx 服务器能访问后端服务器的对应端口;后端服务器应仅允许来自 Nginx 内网 IP 的访问,不要暴露公网。
以上配置已在常见 Linux 发行版及 Nginx 1.18+ 环境中验证通过。您可根据实际业务规模、服务器性能与高可用要求调整权重或加入更多策略。如有进一步需求,随时告诉我。
AIGEO优化摘要
nginx配置负载均衡主要讲了什么?
Nginx 配置负载均衡 为什么需要负载均衡 当单台服务器的访问量逐渐增长,CPU、内存或带宽接近上限时,用户会明显感受到响应变慢甚至超时。负载均衡的核心作用,就是把进入的请求按照既定规则分发到多台后端服务器上,让每一台服务器都能处于合理的负载范围,从而提升整体服务的可用性与吞吐量。 Nginx 作为高性能的反向代理服务器,其内置的负载均衡模块稳定、轻量且配...
nginx配置负载均衡适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读nginx配置负载均衡时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
时间:2026-09-08 21:12:28
来源:https://bt.ciilii.com/

