正确配置Nginx代理非标准端口需同步处理四环节:显式声明后端地址与端口、透传Host/X-Real-IP/X-Forwarded-For/X-Forwarded-Proto四大请求头、为WebSocket启用proxy_http_version 1.1及Upgrade/Connection头、确认后端监听0.0.0.0且防火墙放行。

直接在 proxy_pass 中写明完整地址(含协议和非标准端口)即可,但必须同步处理路径拼接、请求头透传、连接稳定性等细节,否则容易出现 404、502 或 WebSocket 断连。
显式写出带端口的后端地址
后端若运行在 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 端口,后端收不到请求
精准控制路径拼接逻辑
proxy_pass 末尾是否带 / 决定路径如何转发:
- 带
/:如location /api { proxy_pass http://127.0.0.1:3000/; }→ 请求/api/user转发为http://127.0.0.1:3000/user(剥离/api) - 不带
/:如location /api { proxy_pass http://127.0.0.1:3000; }→ 请求/api/user转发为http://127.0.0.1:3000/api/user(保留前缀)
必须透传四大关键请求头
默认 Nginx 不透传原始信息,后端可能因 Host 不匹配返回 404,或误判协议导致跳转异常:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
-
proxy_set_header 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
WebSocket 和长连接要额外启用升级机制
如果后端含 WebSocket(如前端开发服务器、实时日志)、SSE 或 gRPC,缺以下三行就会在 60 秒后静默断连:
proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
这三行必须同时存在,且放在对应 location 块内,不能只写在 server 级别。
别忘了检查后端是否真正就绪
配置写对 ≠ 请求能通,常见卡点在后端自身:
- 确认后端进程监听的是
0.0.0.0:3000,不是仅127.0.0.1:3000 - 用
ss -tlnp | grep :3000验证端口确实在监听 - 系统防火墙(ufw/firewalld)或云厂商安全组需放行该端口
- Nginx 自身的
listen端口(如 80 或 443)不能被其他服务占用

















