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逻辑示意)
统一前置约定
后端服务基础域名: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 / 两种写法结果一致,匹配前缀是空,无内容可剔除
极简记忆口诀
- proxy_pass 无尾斜杠 /
全量URL直接拼接,location匹配的前缀保留 - proxy_pass 有尾斜杠 /
砍掉location匹配到的路径,只拼接后面剩余部分 location /两种写法无区别,匹配前缀为空,不会截断任何路径