在nginx中配置proxy_pass代理转发时,其后面的url中反斜杠/ 的匹配处理时常出现意想不到的问题发生,如下说明两种状况:
(1)若是在proxy_pass后面的url加/,表示绝对根路径;
(2)若是在proxy_pass后面的url没有/,表示相对路径,把匹配的路径部分也给代理走。php
下面六种状况分别用 http://127.0.0.1/proxy/test.html 进行访问测试html
location /proxy/ { proxy_pass http://127.0.0.1/; }
最终会被代理到URL:http://127.0.0.1/test.htmlnginx
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.htmlide
location /proxy/ { proxy_pass http://127.0.0.1/aaa; }
最终会被代理到URL:http://127.0.0.1/aaatest.html测试
location ~ ^/proxy/ { proxy_pass http://127.0.0.1/aaa; }
最终会被代理到URL:http://127.0.0.1/proxy/test.htmlurl
location ~ ^/proxy/ { proxy_pass http://127.0.0.1; }
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; }