nginx反向代理核心是proxy_pass指令,其末尾斜杠决定路径处理方式:不带/则保留原始uri,带/则截断匹配路径;必须配置host、x-real-ip等代理头以透传真实信息,并为websocket或https后端启用proxy_http_version 1.1及upgrade头。

<p>在 Nginx 的 <code>server</code> 块中配置反向代理,核心是用 <code>proxy_pass</code> 指令把请求转发给后端服务。关键在于路径匹配、请求头传递和协议兼容性,不是简单写一行就完事。</p>
<h3>基础反向代理写法</h3>
<p>最简配置示例(将所有请求转发到 http://127.0.0.1:3000):</p>
<pre class="brush:php;toolbar:false;"><code>location / {
proxy_pass http://127.0.0.1:3000;
}</code>
注意:proxy_pass 后面的 URL 末尾是否带 / 会影响路径重写逻辑——不带斜杠会保留原始 URI;带斜杠则会替换掉匹配的 location 路径部分。
必须加的代理头设置
否则后端可能收不到真实 IP、协议或 Host,导致跳转异常或日志不准:
-
proxy_set_header Host $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,对重定向很重要
常见路径映射场景
比如想把 /api/ 开头的请求转发到后端 API 服务:
<code>location /api/ {
proxy_pass http://backend-api/;
}</code>
这里两个 / 都重要:location 的 /api/ 和 proxy_pass 后的 / 一起作用,实现路径截断(/api/user → /user)。如果 proxy_pass 写成 http://backend-api(无尾部斜杠),Nginx 会原样转发 /api/user,后端可能 404。
HTTPS 后端或 WebSocket 支持
如果后端是 HTTPS 或需要 WebSocket,要额外启用:
-
proxy_http_version 1.1;—— 必须设为 1.1 才支持 keepalive 和 upgrade proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";- HTTPS 后端还需加
proxy_ssl_verify off;(仅测试环境)或配证书验证











