十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
Nginx中的proxy_pass該怎么設(shè)置,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

Nginx很適合用做反向代理[ Reverse-Proxy]的,主要原因有以下幾點(diǎn)。
Nginx的高性能特性,可以Hold住更多的連接數(shù)。
更加成熟的面向互聯(lián)網(wǎng)的設(shè)計(jì),可以增強(qiáng)后端服務(wù)器的安全性。
可以方便的對(duì)性能進(jìn)行橫向擴(kuò)展,增強(qiáng)數(shù)據(jù)處理能力。
基于以上優(yōu)點(diǎn),那么該如何正確的配置Nginx反向代理?
分為兩種情況
第一種情況: proxy_pass后面的指定帶有URI
被location所匹配的URI將會(huì)被proxy_pass后面的URI所替換。舉例如下,
location /requested-uri/ {
proxy_pass http://example.com/backend/;
}
此時(shí),如果請(qǐng)求的連接是, http://proxy-ip/requested-uri/a.html,則傳輸?shù)胶蠖说穆窂骄蜁?huì)變成,http://example.com/backend/a.html
驗(yàn)證如下:
場(chǎng)景:在tomcat上創(chuàng)建了兩個(gè)鏈接,分別是http://10.2.0.51:8000/zzp/app1 和 http://10.2.0.51:8000/zzp/app2
兩個(gè)鏈接分別顯示不同的內(nèi)容,app1 和 app2
然后我們?cè)趎ginx中配置如下:
location /zzy/ {
proxy_pass http://10.2.0.51:8000/zzp/;
}
這時(shí),我們?cè)L問http://10.2.0.51/zzy/app1 時(shí),就會(huì)發(fā)現(xiàn)會(huì)得到app1 ,說明zzy這個(gè)URI被zzp替換了。
第二種情況: proxy_pass后面不帶URI時(shí),則URI直接傳輸給了后端服務(wù)器。舉例如下,
location /requested-uri/ {
proxy_pass http://example.com;
}
此時(shí)如果請(qǐng)求的連接是,http://proxy-ip/requested-uri/a.html,則傳輸?shù)胶蠖说穆窂骄蜁?huì)變成,http://example.com/requested-uri/a.html
驗(yàn)證如下:
接上個(gè)例子,我們?cè)趐roxy_pass中不帶有uri,此時(shí)我們?cè)L問zzy這個(gè)uri時(shí),就會(huì)發(fā)現(xiàn),404錯(cuò)誤。
location /zzy/ {
proxy_pass http://10.2.0.51:8000;
}

修改配置如下,
location /zzp/ {
proxy_pass http://10.2.0.51:8000;
}
訪問http://10.2.0.51/zzp/app1時(shí),就調(diào)整好了。
Exceptions:
凡事總有例外,Nginx也是這樣。
特特例:1.1.12之前的版本,在某些情況下,不帶URI的proxy_pass指令會(huì)被一些指令所取代。
一般特例:
當(dāng)location后面帶有正則表達(dá)式的時(shí)候,此時(shí)proxy_pass后面不帶URI。
因?yàn)椋绻鹟ocation在有正則表達(dá)式的時(shí)候,nginx無法確定哪個(gè)部分的URI和表達(dá)式匹配。
當(dāng)URI被用rewrite指令修改的時(shí)候,并且同樣的配置將被用于處理一個(gè)請(qǐng)求。例如,這個(gè)好繞口。Boring
location /name/ {
rewrite /name/([^/]+) /users?name=$1 break;
proxy_pass http://127.0.0.1;
}
當(dāng)prox_pass中使用了變量的時(shí)候,將會(huì)被以下替換。
location /name/ {
proxy_pass http://127.0.0.1$request_uri;
}
總而言之,只要我們不觸碰exceptions發(fā)生的條件,我們就能達(dá)到自己的目的,如果不小心出現(xiàn)exceptions,那就來這里研究吧。
Basic is import , and should be studied in details.
關(guān)于Nginx中的proxy_pass該怎么設(shè)置問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。