nginx配置proxy_pass路径加斜杠以及包含路径的区别

这是很重要的,经常在配置中忽略导致访问不可用。

在proxy_pass中

  1. proxy_pass包含路径如http://localhost/abchttp://localhost规则都有区别。
  2. proxy_pass结尾加斜杠/和不加斜杠的有区别

下面四种情况分别用http://localhost/proxy/test.html 进行访问。

  1. 末尾加斜杠,proxy_pass中不包含路径
location  /proxy/ {
    proxy_pass http://localhost/;
}

结论:会被代理到http://localhost/test.html(proxy_pass+请求url匹配的location路径后的内容

  1. 末尾不加斜杠,proxy_pass不包含路径
location  /proxy/ {
    proxy_pass http://localhost;
}

结论:会被代理到http://localhost/proxy/test.html(proxy_pass替换请求url的ip和端口

  1. 末尾加斜杠,proxy_pass包含路径
location /proxy/ {
    proxy_pass http://localhost/abc/;
}

结论:会被代理到http://localhost/abc/test.html(proxy_pass+请求url匹配的location路径后的内容

  1. 末尾不加斜杠,url包含路径
location /proxy/ {
    proxy_pass http://localhost/abc;
}

结论:会被代理到http://localhost/abctest.html(proxy_pass+请求url匹配的location路径后的内容)

总结:

  1. 如果proxy_pass后面有斜杠。转发url为proxy_pass+原url匹配的location路径之后的内容。

例:原请求http://localhost/proxy/test.html,location 为/proxy/

proxy_pass为 http://localhost/abc/

转发路径:(proxy_pass)http://localhost/abc/加上原请求部分路径test.html,最终路径http://localhost/abc/test.html

  1. proxy_pass后面没有斜杠,
    1. 只有当proxy_pass只有IP加端口,无路径时。匹配规则为proxy_pass替换原请求url的ip和端口,
      同时保留了location路径。例子为上述的第二种情况。
    2. 当proxy_pass端口后包含路径时,匹配规则同1.

3.推荐:一般建议proxy_pass后面不包含路径

# nginx  

评论

企鹅群:39438021

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×