【重要】nginx location配置proxy_pass的url加不加/的區別

在nginx中配置proxy_pass時,當在後面的url加上了/,至關因而絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;若是沒有/,則會把匹配的路徑部分也給代理走。html

 

下面四種狀況分別用http://192.168.1.4/proxy/test.html 進行訪問。nginx

第一種:api

【注意,這裏其實用/proxy也能夠,這裏不能把/當作是特殊字符,它就是匹配字符串的一部分,之因此後面加/是防止/proxymmm這樣的請求也匹配,加了後只會匹配到/proxy/xxxx】測試

location  /proxy/ {lua

          proxy_pass http://127.0.0.1:81/;url

}代理

會被代理到http://127.0.0.1:81/test.html 這個url日誌

(注,根據這個特性能夠設置這個配置:htm

location /serviceagent/ {
proxy_pass http://127.0.0.1:8090/huluapi/serviceagent/;
}

 

第二咱(相對於第一種,最後少一個 /)(注:公司的是/proxy便可[用的是mxxxxloan],通過測試也確實是這樣,可是最好像這種後面再加個/,不然這種請求http://xxx/proxymmm也會匹配到,而加了/那麼只會是http://xxx/proxy/mmm纔會匹配)blog

location  /proxy/ {

          proxy_pass http://127.0.0.1:81;

}

會被代理到http://127.0.0.1:81/proxy/test.html 這個url

 

第三種:(注:和第四種其實同樣)

location  /proxy/ {

          proxy_pass http://127.0.0.1:81/ftlynx/;

}

會被代理到http://127.0.0.1:81/ftlynx/test.html 這個url。

 

第四種狀況(相對於第三種,最後少一個 / ):(注:這種狀況比較特殊

location  /proxy/ {

          proxy_pass http://127.0.0.1:81/ftlynx;

}

會被代理到http://127.0.0.1:81/ftlynxtest.html 這個url

總結:這裏分兩種狀況,一種是http://localhost:8080;後面沒有/,第二種是後面有/可是以後能夠跟如/test/mm這樣的;

對於第一種,那麼location匹配到後會將完整的uri拼接到轉發的proxy_pass後面,而對於存在/的proxy_pass那麼匹配到它的location後只是將除匹配到的uri的其它部分拼接到proxy_pass後面 

 

上面的結果都是本人結合日誌文件測試過的。從結果能夠看出,應該說分爲兩種狀況才正確。即http://127.0.0.1:81 (上面的第二種) 這種和 http://127.0.0.1:81/.... (上面的第1,3,4種) 這種。

 

【轉自】http://ftlynx.blog.51cto.com/2833447/839607

相關文章
相關標籤/搜索