Nginx配置proxy_pass转发的/路径问题

在日常使用Nginx过程中,经常会遇到对路径进行映射的问题,有时候会为路径添加前缀,例如访问 http://localhost:80/file/group1/M00/00/00/zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO.png, 通过Nginx映射之后,其实访问的是 http://localhost:80/group1/M00/00/00/zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO.png, 对file路径进行了重定向。

实现方法如下:

在Nginx中配置proxy_pass时,如果是按照^~匹配路径时,要注意proxy_pass后的url最后的/,当加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。

location ^~ /static_js/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
proxy_pass http://js.test.com/;
}

如上面的配置,如果请求的url是http://servername/static_js/test.html
会被代理成http://js.test.com/test.html

而如果这么配置

location ^~ /static_js/
{
proxy_cache js_cache;
proxy_set_header Host js.test.com;
proxy_pass http://js.test.com;
}

则会被代理到http://js.test.com/static_js/test.htm

参考资料:
http://blog.51cto.com/wangwei007/1103734

分享到