Nginx中proxy_pass的斜杠的兩種方式
1、proxy_pass的類型
Nginx的官網(wǎng)將proxy_pass分為兩種類型:
- 一種是只包含IP和端口號的(連端口之后的/也沒有,這里要特別注意),比如proxy_pass http://localhost:8080,這種方式稱為不帶URI方式;
- 另一種是在端口號之后有其他路徑的,包含了只有單個/的,如proxy_pass http://localhost:8080/,以及其他路徑,比如proxy_pass http://localhost:8080/xxx。這種稱為帶URI方式
(先明白上面的兩種類型,很重要!下面的就按照我的方式,就能看懂了,只要你認真看完這篇文章,保證你對于proxy_pass的斜杠問題很通透!)
2、不帶URI方式列舉說明
我基于上面的兩種類型給大家舉例,為了方便理解,這里解釋一下,咱們只用看proxy_pass中ip+端口后面有沒有/,就可以區(qū)分是不帶URI還是帶URI方式了。例如:http://localhost:8080,這樣的就是典型的不帶URI方式,例如:http://localhost:8080/、http://localhost:8080/aaa、http://localhost:8080/a/b/c,這些統(tǒng)稱為帶URI方式。
2.1、不帶URI方式(例1)
假如客戶端請求為:http://localhost/test1/xxx
location /test1/ { proxy_pass http://localhost:8080; }
來看第一個舉例,proxy_pass中http://localhost:8080沒有后面的/,也就是典型的不帶URI方式,
要得到代理后的請求路徑,記住一句話:不帶URI,保留location后的內(nèi)容,拼接代理路徑后。詳細看下面的步驟拆解:
(1)首先保留location后的所有內(nèi)容
http://localhost/test1/xxx
(2)拼接代理路徑后面
最終請求:http://localhost:8080/test1/xxx
2.2、不帶URI方式(例2)
如果上面例1還沒有明白,我們多來幾個例子,保證你能夠看懂這個變換過程,來看例2
假如客戶端請求為:http://localhost/test2/xxx
location /test2 { proxy_pass http://localhost:8080; }
這次是location中沒有了右/,還是那句話:不帶URI,保留location后的內(nèi)容,拼接代理路徑后。
詳細看下面的步驟拆解:
(1)首先保留location后的所有內(nèi)容
http://localhost/test2/xxx
(2)拼接代理路徑后面
最終請求:http://localhost:8080/test2/xxx
2.3、不帶URI方式總結(jié)
可以看出,不帶URI方式是最簡單的一個,不管loction中帶不帶右/,都是保留直接拼接到proxy_pass的后面。
3、帶URI方式舉例說明
帶URI方式比較難懂,不過,只要按照我給的方法,也是非常的輕松,來看下面的舉例。
還是一句話:帶URI,去除location,剩下右側(cè)內(nèi)容拼接到代理路徑中。
3.1、帶URI方式(例1)
假如客戶端請求:http://localhost/test1/xxx
location /test1/ { proxy_pass http://localhost:8080/; }
詳細看下面步驟拆解:
(1)首先在客戶端請求去除location,獲得剩下的右側(cè)內(nèi)容
http://localhost/test1/xxx ---------------------------> xxx(獲得的右側(cè)內(nèi)容)
(2)拼接到代理路徑中
最終請求:http://localhost:8080/xxx
3.2、帶URI方式(例2)
還是那句話:帶URI,去除location,剩下右側(cè)內(nèi)容拼接到代理路徑中。
假如客戶端請求:http://localhost/test2/xxx
location /test2 { proxy_pass http://localhost:8080/; }
詳細看下面步驟拆解:
(1)首先在客戶端請求去除location,獲得剩下的右側(cè)內(nèi)容
http://localhost/test2/xxx --------------------------------> /xxx(獲得的右側(cè)內(nèi)容)
(2)拼接到代理路徑中
最終請求:http://localhost:8080//xxx http://localhost:8080//xxx(這里就有兩個/了)
3.3、帶URI方式(例3)
還是那句話:帶URI,去除location,剩下右側(cè)內(nèi)容拼接到代理路徑中。
假如客戶端請求:http://localhost/test3/xxx
location /test3/ { proxy_pass http://localhost:8080/aaa; }
詳細看下面步驟拆解:
(1)首先在客戶端請求去除location,獲得剩下的右側(cè)內(nèi)容
http://localhost/test3/xxx ------------------------> xxx(獲得的右側(cè)內(nèi)容)
(2)拼接到代理路徑中
最終請求:http://localhost:8080/aaaxxx
http://localhost:8080/aaaxxx(這里aaa和xxx之間沒有/,顯然這是不對的)
3.4、帶URI方式(例4)
還是那句話:帶URI,去除location,剩下右側(cè)內(nèi)容拼接到代理路徑中。
假如客戶端請求:http://localhost/test4/xxx
location /test4/ { proxy_pass http://localhost:8080/aaa/; }
詳細看下面步驟拆解:
(1)首先在客戶端請求去除location,獲得剩下的右側(cè)內(nèi)容
http://localhost/test4/xxx ------------------------> xxx(獲得的右側(cè)內(nèi)容)
(2)拼接到代理路徑中
最終請求:http://localhost:8080/aaa/xxx
3.5、帶URI方式(例5)
還是那句話:帶URI,去除location,剩下右側(cè)內(nèi)容拼接到代理路徑中。
假如客戶端請求:http://localhost/test5/xxx
location /test5 { proxy_pass http://localhost:8080/aaa; }
詳細看下面步驟拆解:
(1)首先在客戶端請求去除location,獲得剩下的右側(cè)內(nèi)容
http://localhost/test5/xxx ------------------------> /xxx(獲得的右側(cè)內(nèi)容)
(2)拼接到代理路徑中
最終請求:http://localhost:8080/aaa/xxx
3.6、帶URI方式(例6)
還是那句話:帶URI,去除location,剩下右側(cè)內(nèi)容拼接到代理路徑中。
假如客戶端請求:http://localhost/test6/xxx
location /test6 { proxy_pass http://localhost:8080/aaa/; }
詳細看下面步驟拆解:
(1)首先在客戶端請求去除location,獲得剩下的右側(cè)內(nèi)容
http://localhost/test6/xxx ------------------------> /xxx(獲得的右側(cè)內(nèi)容)
(2)拼接到代理路徑中
最終請求:http://localhost:8080/aaa//xxx
http://localhost:8080/aaa//xxx(這里aaa和xxx之間有兩個/,顯然這是不對的)
3.7、帶URI方式總結(jié)
估計有細心的小伙伴會發(fā)現(xiàn)一個問題,就是當location和proxy_pass其中有一個不帶/(例如例2、例3、例6),最終的請求路徑就不同尋常了,所以這里給大家一個建議,以后寫反向代理時,要不location和proxy_pass 都帶/,要不都不帶,否則就會出現(xiàn)上面例子里的錯誤。
到此這篇關(guān)于Nginx中proxy_pass的斜杠問題實現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx proxy_pass斜杠內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說明
- Nginx?location和proxy_pass配置示例詳解
- Nginx的location路徑與proxy_pass匹配規(guī)則說明
- Nginx捕獲并自定義proxy_pass返回的錯誤問題
- nginx中如何配置proxy_pass
- Nginx rewrite和proxy_pass的區(qū)別及說明
- Nginx proxy_pass如何到https后端
- nginx代理參數(shù)proxy_pass的實現(xiàn)
- nginx反向代理proxy_pass遇到的死循環(huán)問題
- 解決nginx配置proxy_pass之后,響應變慢的問題
- Nginx使用if指令實現(xiàn)多個proxy_pass方式
- Nginx中proxy_pass使用小結(jié)
相關(guān)文章
nginx的location配置導致網(wǎng)關(guān)返回404問題
這篇文章主要介紹了nginx的location配置導致網(wǎng)關(guān)返回404問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06封80端口應對策略 Nginx反向代理For WIN2003超級傻瓜式配置
封80應對策略,Nginx反向代理ForWIN2003超級傻瓜式配置!2010-03-03