Nginx proxy_pass斜杠路径转发区别

Nginx 反向代理里 proxy_pass 末尾到底带不带斜杠,是最容易写错、也最容易导致后端 404 的地方。同样一个 location,proxy_pass 有没有结尾斜杠,转发给后端的 URL 路径完全不同。很多人配置后后端报 404、路径多一截或少一截,问题就出在这个斜杠上。本文把规则讲清并给对比例子。

一、核心规则

proxy_pass 的目标地址分两种写法:

  1. 带协议和主机,末尾可带路径或斜杠:http://127.0.0.1:8080/
  2. 不带路径(纯主机):http://127.0.0.1:8080

关键判断:当 proxy_pass 后带了 URI(哪怕只是一个 /),Nginx 会把 location 匹配到的那一段替换掉;不带 URI 时,则把完整原始路径原样拼到后端。

二、带斜杠:替换匹配段

location /api/ {
    proxy_pass http://127.0.0.1:8080/;
}

访问 /api/user/list,匹配 /api/,这一段被替换成 /,后端收到的是:

http://127.0.0.1:8080/user/list

/api/ 前缀被剥掉了。

三、不带斜杠:原样转发

location /api/ {
    proxy_pass http://127.0.0.1:8080;
}

访问 /api/user/list,后端收到完整路径:

http://127.0.0.1:8080/api/user/list

/api/ 保留,原样透传。

四、带自定义路径的情况

location /api/ {
    proxy_pass http://127.0.0.1:8080/backend/;
}

访问 /api/user,匹配段 /api/ 被替换成 /backend/,后端收到:

http://127.0.0.1:8080/backend/user

五、完整反向代理示例

location /app/ {
    proxy_pass http://127.0.0.1:9000/;
    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;
}

改完执行 nginx -t 校验,再 nginx -s reload 重载。

常见坑

  1. 后端本身就需要 /api/ 前缀,你却加斜杠剥掉,结果全 404。
  2. proxy_pass 写了主机又写端口,末尾漏斜杠导致路径重复。
  3. location 用正则 ~ 时不能在 proxy_pass 里写固定路径,需用变量拼接。
  4. 只改配置没 nginx -t 校验,重载失败导致整站 502。
  5. 后端框架按转发路径找路由,前缀不一致就报路由不存在。
  6. 误以为斜杠只是美观符号,实际它决定路径替换规则。

总结

记住一句话:proxy_pass 后带 URI(含 /)就替换 location 匹配段,不带就原样透传完整路径。先确认后端路由要不带 /api/,再决定斜杠去留,改完务必 nginx -t 再重载。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-11-15 07:29 
'); })();