«

Nginx反向代理去除路径前缀rewrite写法

时间:2026-11-15 07:13     作者:emer     分类: Nginx


前言

前端访问 /api/xxx,后端只认 /xxx,需要代理时去掉 /api 前缀。proxy_pass 带不带结尾斜杠决定是否透传路径,配合 rewrite 可精确控制。本文讲解斜杠差异、rewrite 去前缀和保留 query 参数。

操作步骤

1. proxy_pass 带斜杠自动去前缀

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

访问 /api/user → 后端收到 /user。

2. 不带斜杠则原样透传

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

后端收到 /api/user。

3. 用 rewrite 精确改写

location /api/ {
    rewrite ^/api/(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:8080;
}

4. 保留查询参数

rewrite 末尾加 ? 或让 proxy_pass 自动带 $args:

rewrite ^/api/(.*)$ /$1? break;

5. 校验并重载

nginx -t && nginx -s reload

6. 验证后端收到的路径

curl -i https://域名/api/user

常见坑

  1. proxy_pass 结尾斜杠写错,去前缀行为相反。
  2. rewrite 后忘记 break,继续匹配其他 location。
  3. 重写把 query 参数丢掉,接口报参数缺失。
  4. 正则捕获组写错,路径被截断。
  5. 后端返回的重定向 Location 不带前缀,浏览器 404。
  6. WebSocket 场景改写要保留 Upgrade 头。
  7. 多版本前缀 /v1/ /v2/ 分别写 location。

总结

去前缀先看 proxy_pass 斜杠:带 / 自动剥离 location 前缀,不带则原样传;复杂改写用 rewrite ^/api/(.*)$ /$1 break。注意 break、保留 $args,改完 curl 核对后端实际路径。

遇到问题加QQ23979811 协助处理

标签: Nginx 反向代理 rewrite 路径前缀