配置 proxy_pass 必须置于 location 块内,尾部斜杠影响路径重写,需设置 Host、X-Real-IP、X-Forwarded-For 请求头,并按 WebSocket、API 或静态资源等场景补充对应参数。

配置 proxy_pass 的核心在于明确代理目标、正确设置请求头,并匹配 location 路径规则。它不是单独一行就能生效的,必须放在 location 块中,配合关键的 HTTP 协议升级与头信息传递。
location 匹配路径决定 proxy_pass 行为
proxy_pass 的值是否带尾部斜杠(/),会直接影响后端 URL 的拼接逻辑:
- 如果
location /api/ { proxy_pass http://backend; }—— Nginx 会把/api/替换为/,请求https://domain/api/user将转发为http://backend/user - 如果
location /api/ { proxy_pass http://backend/; }—— 同样去掉/api/,效果一致;但若写成proxy_pass http://backend/sub/;,则会将/api/user改写为/sub/user - 如果
location /api { proxy_pass http://backend;(无尾斜杠)—— 则整个/api路径原样保留,转发为http://backend/api,容易引发 404
必须设置的请求头字段
仅写 proxy_pass 不足以让后端正确识别原始请求。以下三行是反向代理的基础标配:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
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;:兼容多层代理场景
常见服务类型需额外配置
不同后端协议对头部和超时要求不同:
-
WebSocket:必须加
proxy_http_version 1.1;、proxy_set_header Upgrade $http_upgrade;和proxy_set_header Connection "upgrade"; -
长连接 API:建议设
proxy_read_timeout 300;、proxy_send_timeout 300;,防止默认 60 秒中断 -
静态资源代理:可启用缓存,如
proxy_cache my_cache;,但需提前在http块定义缓存区
配置位置与文件层级
proxy_pass 只能出现在 location 块内,不能直接写在 server 或 http 级。典型结构如下:
/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/app.conf
upstream backend {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

















