在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
第二咱(相對於第一種,最後少一個 /)(注:公司的是/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