proxy_pass反向代理配置中url後面加不加/的說明
在日常的web網站部署中,經常會用到nginx的proxy_pass反向代理,有一個配置需要弄清楚:配置proxy_pass時,當在後面的url加上了/,相當於是絕對根路徑,則nginx不會把location中匹配的路徑部分代理走;如果沒有/,則會把匹配的路徑部分也給代理走。 下面舉個小例項說明下: centos7系統庫中預設是沒有nginx的rpm包的,所以我們自己需要先更新下rpm依賴庫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
--------------------------看看下面幾種情況:分別用http://192.168.1.23/proxy/index.html進行訪問測試-----------------
為了方便測試,先在另一臺機器192.168.1.5上部署一個8090埠的nginx,配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
192.168.1.23作為nginx反向代理機器,nginx配置如下:1)第一種情況:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
這樣,訪問http://192.168.1.23/proxy/就會被代理到http://192.168.1.5:8090/。p匹配的proxy目錄不需要存在根目錄/var/www/html裡面 注意,終端裡如果訪問http://192.168.1.23/proxy(即後面不帶"/"),則會訪問失敗!因為proxy_pass配置的url後面加了"/"
1 2 3 4 5 6 7 8 9 10 |
|
頁面訪問http://103.110.186.23/proxy的時候,會自動加上"/”(同理是由於proxy_pass配置的url後面加了"/"),並反代到http://103.110.186.5:8090的結果
2)第二種情況,proxy_pass配置的url後面不加"/"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
3)第三種情況
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
這樣配置的話,訪問http://103.110.186.23/proxy代理到http://192.168.1.5:8090/haha/
4)第四種情況:相對於第三種配置的url不加"/"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
-------------------------------------------------------------------------------------上面四種方式都是匹配的path路徑後面加"/",下面說下path路徑後面不帶"/"的情況:
1)第一種情況,proxy_pass後面url帶"/":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
2)第二種情況,proxy_pass後面url不帶"/"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
這樣配置的話,訪問http://103.110.186.23/proxy會自動加上"/”(即變成http://103.110.186.23/proxy/),代理到192.168.1.5:8090/proxy/
3)第三種情況
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
這樣配置的話,訪問http://103.110.186.23/proxy會自動加上"/”(即變成http://103.110.186.23/proxy/),代理到http://192.168.1.5:8090/haha/
4)第四種情況:相對於第三種配置的url不加"/"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
這樣配置的話,訪問http://103.110.186.23/proxy,和第三種結果一樣,同樣被代理到http://192.168.1.5:8090/haha/