Nginx proxy_pass 斜杠区分

Nginx proxy_pass 斜杠区分

Nginx proxy_pass 斜杠区分

斜杠区分不清楚

问题

nginx代理后的地址记录不清

Nginx proxy_pass 两种规则完整解析 + Mermaid示意图

核心底层规则总结

规则A:proxy_pass 末尾无 /(无目录后缀)

转发拼接逻辑:代理完整地址 + 客户端完整请求URI

代理地址原样拼接原始全部URL路径,location匹配前缀不会剔除

规则B:proxy_pass 末尾带 /(有目录)

转发拼接逻辑:代理地址固定目录 + 客户端URI剔除location匹配到的前缀部分

会把location匹配命中的路径截掉,只拼接剩余后缀


Mermaid 流程图(1:1逻辑示意)

情况2 proxy_pass http://backend/

情况1 proxy_pass http://backend

客户端请求: /api/user/list

location /api

proxy_pass http://backend

转发目标:http://backend/api/user/list

location /api

proxy_pass http://backend/

转发目标:http://backend/user/list

统一前置约定

后端服务基础域名:http://127.0.0.1:8080
客户端统一原始请求:http://当前Nginx域名/匹配前缀/剩余路径

10组区分案例(5组无/、5组带/,两两对照)

案例1

无/写法

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

访问URL:/api/login
转发地址:http://127.0.0.1:8080/api/login

带/对照写法

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

访问URL:/api/login
转发地址:http://127.0.0.1:8080/login

案例2

无/

location /img/ { proxy_pass http://127.0.0.1:8080/static; }

访问:/img/avatar/1.png
转发:http://127.0.0.1:8080/staticavatar/1.png

带/

location /img/ { proxy_pass http://127.0.0.1:8080/static/; }

访问:/img/avatar/1.png
转发:http://127.0.0.1:8080/static/avatar/1.png

案例3

无/

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

访问:/goods/detail
转发:http://127.0.0.1:8080/goods/detail

带/

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

访问:/goods/detail
转发:http://127.0.0.1:8080/goods/detail

注:location / 两种写法结果一致,匹配前缀是空,无内容可剔除


极简记忆口诀

  1. proxy_pass 无尾斜杠 /
    全量URL直接拼接,location匹配的前缀保留
  2. proxy_pass 有尾斜杠 /
    砍掉location匹配到的路径,只拼接后面剩余部分
  3. location /两种写法无区别,匹配前缀为空,不会截断任何路径