直接在 proxy_pass 中写明非标准端口即可,关键在于保持协议、主机头和端口三者一致;需显式指定完整 URL(如 http://127.0.0.1:8080),透传 Host 头,启用 WebSocket 升级机制,并确认后端监听 0.0.0.0 且防火墙放行。

直接在 proxy_pass 中写明非标准端口即可,关键在于保持协议、主机头和端口三者一致,避免后端服务因端口缺失或 Host 错误而拒绝请求。
明确指定后端地址与端口
Nginx 默认只代理到 80/443,若后端运行在如 8080、9001、3000 等非标端口,必须在 proxy_pass 中显式写出完整 URL(含协议和端口):
-
proxy_pass http://127.0.0.1:8080;—— 本地后端 -
proxy_pass http://backend-server:3000;—— 基于 upstream 的命名服务器 - 不要写成
proxy_pass http://127.0.0.1;(默认走 80),否则请求会失败
透传原始 Host 和端口信息(必要时)
某些后端应用依赖 Host 头或原始端口做路由判断(如多租户 SaaS、开发环境调试)。需手动设置 Host 头,并考虑是否保留原始端口:
-
proxy_set_header Host $host:$server_port;—— 把 Nginx 监听的端口也带过去(例如用户访问example.com:8081,后端收到Host: example.com:8081) -
proxy_set_header Host $host;—— 更常见,仅透传域名,适合后端不关心端口的场景 - 若后端需识别客户端真实端口,还需配合
proxy_set_header X-Forwarded-Port $server_port;
处理 WebSocket 或长连接需额外指令
非标端口服务若含 WebSocket(如前端 dev server、实时日志)、gRPC 或 SSE,需启用升级机制:
proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";- 这三行必须同时存在,缺一不可,否则连接会在 60 秒后被静默关闭
检查防火墙与后端监听绑定
配置生效 ≠ 请求可达。务必确认:
- 后端进程确实在监听对应端口(
ss -tlnp | grep :8080) - 后端未绑定
127.0.0.1而是0.0.0.0(否则 Nginx 从本机代理也连不上) - 系统防火墙(
ufw/firewalld)或云厂商安全组放行该端口 - Nginx 自身监听的端口(如
listen 8081;)已正确配置且无冲突
不复杂但容易忽略的是 Host 头和后端监听范围——多数 502 错误其实不是 Nginx 配置问题,而是后端根本没准备好接收这个 Host 或没监听在可访问的地址上。

















