Nginx之proxy_pass指令url反斜杠作用
程序员文章站
2022-07-12 10:19:03
...
在nginx中配置proxy_pass代理转发时,其后面的url中反斜杠/ 的匹配处理时常出现意想不到的问题发生,以下说明两种情况:
(1)如果在proxy_pass后面的url加/,表示绝对根路径;
(2)如果在proxy_pass后面的url没有/,表示相对路径,把匹配的路径部分也给代理走。
下面六种情况分别用 http://127.0.0.1/proxy/test.html 进行访问测试
第一种情况:
location /proxy/ {
proxy_pass http://127.0.0.1/;
}
最终会被代理到URL:http://127.0.0.1/test.html
第二种情况(相对于第一种,最后少一个 / ):
location /proxy/ {
proxy_pass http://127.0.0.1;
}
最终会被代理到URL:http://127.0.0.1/proxy/test.html
第三种情况:
location /proxy/ {
proxy_pass http://127.0.0.1/aaa/;
}
最终会被代理到URL:http://127.0.0.1/aaa/test.html
第四种情况(相对于第三种,最后少一个 / ):
location /proxy/ {
proxy_pass http://127.0.0.1/aaa;
}
最终会被代理到URL:http://127.0.0.1/aaatest.html
* 第五种情况(定义了一个正则表达式,那么在URl部分没有转换发生):
location ~ ^/proxy/ {
proxy_pass http://127.0.0.1/aaa;
}
最终会被代理到URL:http://127.0.0.1/proxy/test.html
最佳写法为:
location ~ ^/proxy/ {
proxy_pass http://127.0.0.1;
}
* 第六种情况(有rewrite规则改变URl,那也不会发生转换):
location /proxy/ {
rewrite /proxy/(.*)$ /index.php?page=$1 break; # break标记用于立即停止rewrite模块的所有指令
proxy_pass http://127.0.0.1/aaa;
}
最终会被代理到URL:http://127.0.0.1/index.php?page=test.html
最佳写法为:
location /proxy/ {
rewrite /proxy/(.*)$ /index.php?page=$1 break;
proxy_pass http://127.0.0.1;
}
上一篇: ROS中使用Eigen库