nginx反向代理斜杠“/”问题总是记不住?( 二 )

这里截取 "
http://localhost:8000/test"  , 剩余 "/user/query" 拼接到 proxy_pass 的内容后面 , 得到 "http://127.0.0.1:9000/user/query" , 很遗憾不符合推测 , 但是比实际结果刚好少了 location 后面的内容 "/test" 。
第八种斜杠配置#配置8Location /test/ {proxy_pass http://127.0.0.1:9000;}模拟请求
curl http://localhost:8000/test/user/queryerror.log日志截取如下:
request: "GET /test/user/query HTTP/1.1", upstream: "http://127.0.0.1:9000/test/user/query"这里截取 "
http://localhost:8000/test/"  , 剩余 "user/query" 拼接到 proxy_pass 的内容后面 , 得到 "http://127.0.0.1:9000user/query" , 同样的也是比实际结果刚好少了location后面的内容 "/test/" 。
结果分析经过分析所有情况 , 我们可以得到以下结论:
当proxy_pass 后面的内容不是以端口号结尾 , 即端口号后面有"/**"时 , 其实就是将请求的地址 , 截取掉 location 后面的内容 , 将剩余内容拼接到proxy_pass代理地址上;
当proxy_pass 后面的内容以端口号结尾 , 即端口号后面什么都没有 , 可以视为默认拼接了 location 的内容 。那么配置7 , 8 就等同如下配置 , 再套用上面的结论就可以等到正确的结果 。
#配置7location /test {proxy_pass http://127.0.0.1:9000/test;}#配置8Location /test/ {proxy_pass http://127.0.0.1:9000/test/;}不知道 nginx 的源码关于这里的逻辑是怎样处理的 , 但是有上面的结论以后再配置反向代理应该不会因为末尾的斜杠疑惑了 。




推荐阅读