Nginx之proxy_pass指令url反斜杠做用

在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测试

* 第五种状况(定义了一个正则表达式,那么在URl部分没有转换发生):

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;    
}

* 第六种状况(有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;    
}
相关文章
相关标签/搜索