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;    
}
相關文章
相關標籤/搜索