在nginx中配置proxy_pass时,当在后面的url加上了/ 相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/ 则会把匹配的路径部分也给代理走。举例如下:
首先是location进行的是模糊匹配
1)没有“/”时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等
2)而有“/”时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求
假设请求url: http://www.test.com/static/js/us.js
第一种:
location /static/ {
proxy_pass http://192.168.1.11:8081/;
}
结论:会被代理到http://192.168.1.11:8081/js/us.js这个url
第二种(相对于第一种,最后少一个 /):
location /static/ {
proxy_pass http://192.168.1.11:8081;
}
结论:会被代理到http://192.168.1.11:8081/static/js/us.js这个url
第三种:
location /static/ {
proxy_pass http://192.168.1.11:8081/web/;
}
结论:会被代理到http://192.168.1.11:8081/web/js/us.js这个url。
第四种(相对于第三种,最后少一个 / ):
location /static/ {
proxy_pass http://192.168.1.11:8081/web;
}
结论:会被代理到http://192.168.1.11:8081/webjs/us.js这个url
#####################################################################################
proxy_pass到域名注意事项
#####################################################################################
如果proxy_pass是直接指向的域名,nginx在启动的时候会缓存域名解析的IP。此时修改域名解析的IP,那么nginx默认将不会解析到新IP上除非reload才会生效。改换成如下配置则更换IP解析后nginx会自动重新查询域名解析。
resolver 8.8.8.8 8.8.4.4 valid=60s;
set $url "http://abc.test.com";
proxy_pass $url;
参考:http://www.cnblogs.com/kevingrace/p/6566119.html