nginx location 和proxy_pass 代理說明

滴滴滴發表於2024-03-18
在nginx中配置proxy_pass的時候,當proxy_pass的最後位置帶了/和不帶/有很大的區別。
當 proxy_pass 後面的url不帶/的時候,相當於直接代理到後端的proxy_pass 地址
當proxy_pass 後面的url帶/ 的時候,相當於代理導當前域名+location路徑+後面的訪問地址

當你使用 proxy_pass 指令時,如果結尾不帶斜槓 /,Nginx 會將匹配的 URI 部分傳遞給代理伺服器。而當結尾帶有斜槓 / 時,Nginx 將會剝離掉匹配的 URI 部分,並傳遞剩餘的部分給代理伺服器。



在nginx中配置proxy_pass時,當在後面的url加上了/,相當於是絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;如果沒有/,則會把匹配的路徑部分也給代理走。 首先location進行的是模糊匹配 1)沒有“/”時,location /abc/def可以匹配/abc/defghi請求,也可以匹配/abc/def/ghi等 2)而有“/”時,location /abc/def/不能匹配/abc/defghi請求,只能匹配/abc/def/anything這樣的請求 下面四種情況分別用http://192.168.126.8/proxy/test.html 進行訪問。 第一種: location /proxy/ { proxy_pass http://127.0.0.1:81/; } 結論:會被代理到http://127.0.0.1:81/test.html 這個url 第二種(相對於第一種,最後少一個 /) 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/iflytek/; } 結論:會被代理到http://127.0.0.1:81/iflytek/test.html 這個url。 第四種(相對於第三種,最後少一個 / ): location /proxy/ { proxy_pass http://127.0.0.1:81/iflytek; } 結論:會被代理到http://127.0.0.1:81/iflytektest.html 這個url

相關文章