Linux下部署反向代理需精细配置Nginx或HAProxy:补全Host、X-Real-IP等关键请求头;调优连接复用、超时与缓冲区;按后端特性选轮询、weight、ip_hash等负载策略;并优化内核参数及worker进程数。

Linux下部署反向代理,核心是让Nginx或HAProxy稳定、高效地承接流量并分发到后端。真正影响效果的,不是装上就完事,而是配置细节和运行时调优。下面从实操角度讲几个关键环节。
基础代理配置要补全关键头信息
只写proxy_pass远远不够。缺了正确的请求头,后端可能拿不到真实客户端IP、协议类型或主机名,导致日志不准、跳转异常、HTTPS识别失败。
-
必须设置:
proxy_set_header Host $host;(保留原始Host) -
必须设置:
proxy_set_header X-Real-IP $remote_addr;(传递真实IP) -
必须设置:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;(兼容多层代理) -
推荐加上:
proxy_set_header X-Forwarded-Proto $scheme;(让后端知道是http还是https)
连接与超时参数不能沿用默认值
默认配置面向低并发测试环境,生产中容易出现“连接被重置”“502 Bad Gateway”或响应缓慢。需按业务特征调整:
-
上游连接复用:在
upstream块中加keepalive 32;,再在location里加proxy_http_version 1.1;和proxy_set_header Connection '';,避免频繁建连 -
合理设超时:
proxy_connect_timeout 5s;(连后端超时)、proxy_send_timeout 60s;(发数据超时)、proxy_read_timeout 60s;(等后端回包超时),长连接服务可适当延长 -
缓冲区调大:对大文件或API响应,加
proxy_buffering on;、proxy_buffers 8 16k;、proxy_busy_buffers_size 32k;
负载均衡策略要匹配后端特性
轮询(round-robin)最常用,但不万能。不同场景应选不同策略:
- 后端节点性能差异大 → 用
weight手动分配,例如server 192.168.1.100:80 weight=3; - 需要会话保持(如老系统无token机制)→ 用
ip_hash;,但注意NAT环境失效 - 后端有健康差异或响应时间波动 → 启用
least_conn;或least_time header;(Nginx Plus) - 务必配
max_fails=3 fail_timeout=30s;,让Nginx自动剔除故障节点
内核与进程级优化不可忽略
Nginx跑得稳,还得靠系统底座支撑:
-
提高文件描述符上限:修改
/etc/security/limits.conf,加nginx soft nofile 65536和nginx hard nofile 65536;同时在nginx.conf的events块中设worker_rlimit_nofile 65536; -
调优TCP栈:在
/etc/sysctl.conf中增加net.core.somaxconn = 65535、net.ipv4.tcp_tw_reuse = 1、net.ipv4.ip_local_port_range = 1024 65535,然后执行sysctl -p -
worker进程数匹配CPU:设
worker_processes auto;,并确认worker_connections足够(如1024或更高)
这些不是一步到位的模板,而是要结合压测结果和监控数据持续微调。比如发现TIME_WAIT过多,就回头查TCP参数;看到大量502,先看proxy_next_upstream是否启用、超时是否过短。稳,是调出来的,不是配出来的。










