正确配置 nginx proxy_pass 需明确指定后端地址(含协议与非标端口),精准处理路径拼接(带/截前缀、不带/原样追加),必须设置 host、x-real-ip、x-forwarded-for、x-forwarded-proto 四大代理头,并为 websocket 补充 http_version 1.1 及 upgrade/connection 头,同时确保后端监听 0.0.0.0 且端口开放。

直接在 proxy_pass 中写明完整地址(含协议和非标端口)即可,但必须同步处理路径拼接、请求头透传、连接稳定性等细节,否则容易出现 404、502 或 WebSocket 断连。
正确书写 proxy_pass 地址
后端若运行在 3000、8080、9001 等非标准端口,proxy_pass 必须显式带端口号:
-
proxy_pass http://127.0.0.1:3000/;✅ 本地服务,末尾斜杠表示剥离 location 前缀 -
proxy_pass http://backend.internal:8080;✅ 使用域名或 upstream 名称时也必须带端口 -
proxy_pass http://127.0.0.1;❌ 默认走 80 端口,后端收不到请求
关键请求头必须设置
默认 Nginx 不透传原始信息,后端可能拿错 Host、IP 或协议:
-
proxy_set_header Host $host;—— 防止后端因 Host 不匹配返回 404 -
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,避免重定向跳回 http
WebSocket 和长连接要额外配置
如果后端含 WebSocket(如开发服务器、实时日志)、SSE 或 gRPC,缺一不可:
proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
这三行必须同时存在,否则连接会在 60 秒后被静默关闭。
别忘了检查后端是否就绪
配置写对 ≠ 请求能通,常见卡点:
- 确认后端进程监听的是
0.0.0.0:3000,不是仅127.0.0.1:3000 - 用
ss -tlnp | grep :3000验证端口确实在监听 - 系统防火墙(ufw/firewalld)或云厂商安全组需放行该端口
- Nginx 自身的
listen端口(如 80 或 443)不能被其他服务占用











