在 CN2 VPS 上配置 Nginx 反向代理实现负载均衡,核心是在 http 块定义 upstream 服务器组,并在 server 块通过 proxy_pass 转发请求,同时注意网络延迟导致的超时设置。适用场景为多后端服务分发流量,风险边界在于 upstream 位置错误会导致 502 报错或配置不生效。
先说结论:Nginx 实现负载均衡核心是三步——定义 upstream、写好 server 块、确保 proxy_pass 指向正确,漏掉任意一个会导致 502 或请求发错地方。
- 适合:多台后端服务器需要分担流量或提高可用性的场景
- 先准备:后端服务 IP 地址、端口及域名解析已就绪
- 验收:通过 curl 测试响应头及后端日志确认真实 IP 透传
命令速用版
以下配置片段可直接放入/etc/nginx/conf.d/目录下的配置文件中,注意 upstream 必须位于 http 块内。
upstream backend_servers { server 192.168.1.101:8080 weight=3; server 192.168.1.102:8080 weight=2; max_fails 3; fail_timeout 30s; } server { listen 80; server_name your-domain.com; location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }为什么会这样
Nginx 负载均衡本质是通过 upstream 模块维护后端服务器列表,再按策略分发请求,而非单纯的网络加速。
反向代理位于用户与目标服务器之间,对用户而言代理服务器即目标服务器,Nginx 负责将请求转发给内部网络上的目标服务器并返回结果。CN2 线路主要优化网络路由延迟,不影响 Nginx 配置逻辑,但需关注超时参数。
分步处理
第一步:定义后端服务器集群。在 nginx.conf 的 http 段或单独 include 文件中编写 upstream 块,指定后端 IP 和权重,不要嵌套在 server 块内。
第二步:配置 server 块转发请求。设置 listen 端口和 server_name,在 location 中使用 proxy_pass 指向 upstream 名称,注意末尾斜杠会影响 URI 拼接。
第三步:透传客户端真实信息。添加 proxy_set_header 指令传递 Host、X-Real-IP 和 X-Forwarded-For,否则后端获取的将是 Nginx 内网 IP。
第四步:重载配置并检查语法。执行 nginx -t 确认配置无误,再执行 nginx -s reload 应用更改,避免直接 restart 导致服务中断。
怎么验证是否生效
使用 curl -I 命令检查响应头状态码是否为 200,并在后端服务日志中查看 remote_addr 是否为客户端真实 IP 而非 Nginx 服务器 IP。
若配置了权重,可通过多次请求观察不同后端服务器的访问日志分布是否符合 weight 比例;若配置了 max_fails,可手动停止一台后端服务,观察 Nginx 是否自动剔除该节点。
常见坑
upstream 块写在 server 内部会导致 unknown directive 报错,必须放在 http 顶层。proxy_pass 末尾带斜杠会剥离 location 匹配前缀,导致后端收到路径错误。后端是域名时需配置 resolver,否则 DNS 变更后不会自动刷新。
常见问题
配置 reload 后出现 502 但后端服务正常怎么办
常见原因是 Nginx 进程未获取新配置中的 resolver 或 upstream 变更,检查错误日志确认连接拒绝还是超时。
如何保持会话一致性
在 upstream 块中启用 ip_hash 指令,确保同一客户端 IP 始终转发到同一节点,但启用后不能使用 backup 节点。
CN2 线路需要特殊超时设置吗
公开资料中没有看到可靠的量化数据表明 CN2 需要特定超时值,建议根据实际网络延迟调整 proxy_read_timeout,默认 60s 通常适用。
参考来源
- Nginx 怎么配置反向代理 Nginx 多站点负载均衡设置详解
- 配置 Nginx 反向代理来实现负载均衡,续阿里云 ECS 配置 Nginx 反向代理
- 如何用 Nginx 实现负载均衡_反向代理配置详细操作【指南】
- Nginx 反向代理与负载均衡实战指南_nginx 代理实战-CSDN 博客