nginx proxy_pass 转发需精准处理路径拼接(带/截前缀、不带/原样追加)和四大代理头(host、x-real-ip、x-forwarded-for、x-forwarded-proto),并补充websocket、https后端、静态资源绕过等扩展配置。

配置 Nginx 的 proxy_pass 实现基础转发,核心在于两点:路径处理要准确,客户端信息要传全。漏掉斜杠或少设一个头,后端就可能拿不到真实 IP、跳转出错,甚至 WebSocket 断连。
路径拼接规则必须分清末尾斜杠
proxy_pass 后面的 URL 是否带结尾斜杠,直接决定 Nginx 怎么改写请求路径:
- 带斜杠(如
http://127.0.0.1:3000/):location 匹配前缀被完全截掉,只转发剩余路径。例如location /api/ { proxy_pass http://127.0.0.1:3000/; },访问/api/users→ 后端收到/users - 不带斜杠(如
http://127.0.0.1:3000):原始请求路径原样追加。同样 location,访问/api/users→ 后端收到/api/users - location 用正则(如
~ ^/v[1-9]/)时,proxy_pass 必须写完整目标地址,且不能省略 URI 部分,否则会报错
四个关键代理头缺一不可
后端服务依赖这些头判断用户来源和协议,Nginx 默认不传,必须显式设置:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
-
proxy_set_header Host $host;:保持原始 Host,避免后端因识别不到域名返回 404 或错误跳转 -
proxy_set_header X-Real-IP $remote_addr;:透传最外层客户端真实 IP(尤其在有 CDN 或前置 LB 时) -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:链式补充 IP,支持多级代理识别 -
proxy_set_header X-Forwarded-Proto $scheme;:告知后端当前是 http 还是 https,影响重定向链接生成
常见扩展需求顺手加上
基础转发跑通后,这些配置常紧随其后,建议一并检查:
- WebSocket 支持:加
proxy_http_version 1.1;、proxy_set_header Upgrade $http_upgrade;、proxy_set_header Connection "upgrade"; - HTTPS 后端测试:proxy_pass 改为
https://...,临时加proxy_ssl_verify off;(仅限开发环境) - 静态资源绕过代理:把
location ~* \.(js|css|png|gif|jpg)$ { root /var/www/static; }放在 proxy 规则之前,利用最长匹配优先原则
验证与生效别跳步
改完配置不是 reload 就完事:
- 先执行
nginx -t检查语法是否正确 - 确认无误再
systemctl reload nginx或nginx -s reload - 后端日志里看实际收到的请求路径和 header,比浏览器表现更可靠










