nginx location块中配置反向代理的核心是proxy_pass指令,需配合路径处理规则、四类关键请求头(host、x-real-ip、x-forwarded-for、x-forwarded-proto)及超时控制(connect/read/send timeout)以确保正确转发与客户端信息透传。

在 Nginx 的 location 块中配置反向代理,核心是用 proxy_pass 指令把请求转发到后端服务,并配齐关键请求头和超时控制,确保后端能正确识别客户端来源和协议信息。
基础转发:用 proxy_pass 指向后端地址
最简配置只需一行 proxy_pass,但要注意路径处理逻辑:
- 如果
proxy_pass后面的 URL 以/结尾(如http://127.0.0.1:8080/),Nginx 会自动截掉location匹配的前缀再拼接。例如:location /api/ { proxy_pass http://127.0.0.1:8080/; },访问/api/users会转发为http://127.0.0.1:8080/users - 如果末尾没
/(如http://127.0.0.1:8080),则原样拼接路径。上例会转发为http://127.0.0.1:8080/api/users,容易导致 404
必须设置的请求头
仅转发请求不够,后端常依赖原始客户端信息做鉴权、日志或重定向。以下四行应作为标配:
-
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;—— 支持多层代理链,保留完整 IP 链路 -
proxy_set_header X-Forwarded-Proto $scheme;—— 告知后端是 http 还是 https,影响生成链接的协议
增强稳定性:超时与连接控制
默认超时较短,生产环境建议显式设置:
-
proxy_connect_timeout 60s;—— 建立连接最大等待时间 -
proxy_read_timeout 60s;—— 后端响应数据间隔超时(适用于长轮询或大文件) -
proxy_send_timeout 60s;—— 发送请求体给后端的超时 -
proxy_buffering on;和proxy_buffer_size 4k;—— 启用缓冲,避免小包频繁传输
常见组合示例
比如前端静态资源走根路径,API 统一走 /api/:
location / {
root /var/www/frontend;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
这样访问 /api/users 就会准确打到后端 http://127.0.0.1:3000/users,且后端拿到的是用户真实 IP 和 HTTPS 协议标识。











