nginx实现反向代理与负载均衡的核心是proxy_pass转发请求和upstream定义服务器组;需配置proxy_set_header传递真实ip与域名,设置max_fails/fail_timeout实现健康检查,ip_hash或least_conn等策略适配业务场景,并通过proxy_ssl_verify、keepalive等增强https代理与连接效率。

用 Nginx 实现 Linux 服务端的反向代理和负载均衡,核心是两件事:让请求先经过 Nginx 再转发(反向代理),再让 Nginx 把请求分发给多个后端(负载均衡)。配置不难,但关键细节容易漏掉,比如头信息转发、超时控制、健康检查等。
反向代理:把请求“转手”给后端
反向代理的本质是隐藏真实服务地址,所有客户端只跟 Nginx 打交道。最基础的配置在 server 块里写一个 location:
- 用
proxy_pass指定目标地址,比如http://192.168.1.100:8080或http://backend(后者用于配合 upstream) - 必须加
proxy_set_header Host $host,否则后端可能收不到原始域名 - 加上
proxy_set_header X-Real-IP $remote_addr和X-Forwarded-For $proxy_add_x_forwarded_for,让后端能拿到真实客户端 IP - 建议开启
proxy_ignore_client_abort on,避免客户端中途断开导致连接卡住
负载均衡:把流量“分出去”
负载均衡靠 upstream 块定义服务器组,再在 proxy_pass 中引用它。不同策略适用不同场景:
-
轮询(默认):适合性能相近的服务器,直接列几个
server就行 -
加权轮询:给高配机器加
weight=3,低配设weight=1,流量按比例分配 -
IP 哈希:加
ip_hash;,同一 IP 总是落到同一台后端,适合有状态会话 -
最少连接:加
least_conn;,新请求优先给当前连接数最少的机器
让负载均衡真正“可靠”
光把请求分出去还不够,得确保 Nginx 能自动绕过故障节点:
- 用
max_fails=3 fail_timeout=30s设置健康检查:连续失败 3 次,30 秒内不再发请求过去 - 加
backup标记备用服务器,主节点全挂时才启用 - 配
proxy_next_upstream error timeout http_502 http_503,遇到这些响应就自动重试下一节点 - 调低
proxy_connect_timeout、proxy_read_timeout(比如设为 5~10 秒),避免用户长时间等待
HTTPS 反向代理与常用增强项
如果前端是 HTTPS,后端用 HTTP,Nginx 需要终止 TLS 并转发明文请求:
- 在
server块中监听443 ssl,配上证书路径 - 加
proxy_ssl_verify off(后端无证书时),或开启验证并指定 CA - 开启
proxy_buffering on缓冲响应,避免大文件阻塞连接 - 加
keepalive 32复用到后端的长连接,减少握手开销











