Nginx反向代理核心是统一入口、负载分发、协议/路径转换;需配置upstream、server块、关键代理头、静态资源与超时;规避502、重定向异常、WebSocket断连、大文件上传等问题。

用Nginx做反向代理,核心是把外部请求“转交”给后端服务,同时隐藏真实服务器细节。关键不在配置多复杂,而在于理清流量路径、明确角色分工、提前规避常见坑点。
明确反向代理的核心职责
反向代理不是万能中转站,它主要承担三件事:统一入口(所有请求先到Nginx)、负载分发(可选,单台后端也适用)、协议/路径转换(如HTTP→HTTPS、/api→后端8080端口)。不需要它做业务逻辑、不建议它存大量静态资源(除非小文件且CDN未介入)。
基础配置四步走
1. 定义上游服务(upstream)
即使只有一台后端,也建议用upstream块定义,方便后续扩展。例如:
upstream backend {
server 127.0.0.1:8080;
# 可加 weight、max_fails、fail_timeout 等参数
}2. 配置server块监听与路由
指定监听端口、域名、匹配规则。常用写法:
server {
listen 80;
server_name example.com;
<pre class="brush:php;toolbar:false;">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;
}
}
3. 关键代理头必须设置
- Host:确保后端收到原始Host头,否则可能404或跳转错乱;
- X-Real-IP / X-Forwarded-For:让后端能拿到真实客户端IP(注意:X-Forwarded-For可能被伪造,生产环境建议配合real_ip_module+可信代理段使用);
- 若后端是HTTPS服务,还需加 proxy_set_header X-Forwarded-Proto $scheme;。
4. 处理静态资源与超时
- 静态文件(js/css/img)建议由Nginx直接serve,避免穿透代理:location ~* \.(js|css|png|jpg|gif)$ {
root /var/www/static;
expires 1h;
}
- 调整超时防止长连接卡死:
proxy_connect_timeout 30s;<br> proxy_send_timeout 60s;<br> proxy_read_timeout 60s;
典型问题与应对要点
- 502 Bad Gateway:后端没起来、端口不通、proxy_pass地址写错(注意末尾斜杠是否一致);
- 重定向跳转异常(301/302跳到内网地址):后端应用生成了绝对URL,需在Nginx加 proxy_redirect 或让后端读取X-Forwarded-*头动态构造;
- WebSocket断连:需显式开启升级头:
proxy_http_version 1.1;<br> proxy_set_header Upgrade $http_upgrade;<br> proxy_set_header Connection "upgrade";
;
- 大文件上传失败:检查 client_max_body_size 和后端框架的上传限制是否匹配。
上线前必查清单
- 确认Nginx用户对配置文件、日志目录有读写权限
- 用
nginx -t验证语法,再nginx -s reload生效 - 检查
error.log是否有connect refused、no live upstream等报错 - curl测试时加
-v查看响应头和真实返回地址 - 用
netstat -tuln | grep :80确认Nginx确实在监听










