proxy_pass是nginx实现反向代理的核心指令,用于将客户端请求转发至后端服务器并返回响应;它只能在location、if(不推荐)或limit_except块中使用,值支持http://、https://、unix:/path等格式,末尾斜杠决定路径是否截断,需配合proxy_set_header等参数传递真实请求信息,并可通过upstream实现负载均衡。

在 Nginx 中,proxy_pass 是实现反向代理的核心指令,它把客户端请求转发到后端服务器,并将响应返回给客户端,整个过程对用户透明。
基本语法与位置上下文
proxy_pass 只能用在 location、if(不推荐)或 limit_except 块中,不能直接写在 server 或 http 块顶层。它的值可以是 HTTP 协议地址(含端口)、域名或 upstream 名称。
- 支持
http://、https://、unix:/path/to/socket等协议前缀 - 若 URL 末尾带斜杠(如
http://127.0.0.1:3000/),Nginx 会截掉匹配的location路径再拼接;不带斜杠则原样追加 - 例如:
location /api/ { proxy_pass http://backend/; }→/api/user转发为/user
常见转发路径处理技巧
路径重写容易出错,关键看 proxy_pass 后是否带 URI 部分:
- 带 URI(如
http://127.0.0.1:8000/api/):Nginx 会用该 URI 替换掉匹配的location路径 - 不带 URI(如
http://127.0.0.1:8000):原始请求路径完整保留并追加 - 需要精确控制路径时,配合
rewrite指令更灵活,但优先用proxy_pass自带逻辑
必须搭配的关键代理参数
仅写 proxy_pass 往往不够,后端服务常依赖正确的请求头和连接设置:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
proxy_set_header Host $host;:避免后端收到localhost这类无效 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 -
proxy_http_version 1.1;和proxy_set_header Connection '';:支持长连接,尤其对接 WebSocket
结合 upstream 实现负载均衡
当有多个后端时,定义 upstream 块再引用,比硬编码地址更清晰、易维护:
upstream backend_servers {
server 192.168.1.10:3000;
server 192.168.1.11:3000 weight=2;
server 192.168.1.12:3000 backup;
}
然后在 location 中写:proxy_pass http://backend_servers;。支持轮询、权重、备份节点、健康检查(需商业版或第三方模块)等策略。










