nginx location中多個(gè)if里面proxy_pass的方法
1、首先我們回顧一下nginx中l(wèi)ocation的相關(guān)知識(shí)
1)location的匹配指令:
- ~ #波浪線表示執(zhí)行一個(gè)正則匹配,區(qū)分大小寫
- ~* #表示執(zhí)行一個(gè)正則匹配,不區(qū)分大小寫
- ^~ #^~表示普通字符匹配,不是正則匹配。如果該選項(xiàng)匹配,只匹配該選項(xiàng),不匹配別的選項(xiàng),一般用來(lái)匹配目錄
- = #進(jìn)行普通字符精確匹配
- @ #"@" 定義一個(gè)命名的 location,使用在內(nèi)部定向時(shí),例如 error_page, try_files
2)location 匹配的優(yōu)先級(jí)(與location在配置文件中的順序無(wú)關(guān))
1.= 精確匹配會(huì)第一個(gè)被處理。如果發(fā)現(xiàn)精確匹配,nginx停止搜索其他匹配。
2.普通字符匹配,正則表達(dá)式規(guī)則和長(zhǎng)的塊規(guī)則將被優(yōu)先和查詢匹配,也就是說(shuō)如果該項(xiàng)匹配還需去看有沒(méi)有正則表達(dá)式匹配和更長(zhǎng)的匹配。
3.^~ 則只匹配該規(guī)則,nginx停止搜索其他匹配,否則nginx會(huì)繼續(xù)處理其他location指令。
4.最后匹配理帶有"~"和"~*"的指令,如果找到相應(yīng)的匹配,則nginx停止搜索其他匹配;當(dāng)沒(méi)有正則表達(dá)式或者沒(méi)有正則表達(dá)式被匹配的情況下,那么匹配程度最高的逐字匹配指令會(huì)被使用。
2、nginx多個(gè)if里面proxy_pass:
server { listen 127.0.0.1:80; set $test A; set $testB B; location / { if ($test ~* "A") { proxy_pass http://www.so.com; break; } if ($testB ~* "B") { proxy_pass http://www.sogou.com; #break; } } }
希望滿足某個(gè)條件的時(shí)候,走某個(gè)proxy_pass。但是如果多個(gè)if都滿足,比如上例中的情況:在第一個(gè)if中沒(méi)有break的時(shí)候,就會(huì)執(zhí)行下面的;為了第一個(gè)匹配上之后就執(zhí)行proxy_pass,可以加上break。(在nginx中貌似沒(méi)有if else這樣的指令)
3、判斷參數(shù)進(jìn)行不同的proxy_pass:
rewrite只能通過(guò)url路徑進(jìn)行匹配,不能進(jìn)行參數(shù)匹配,所以如果要實(shí)現(xiàn)參數(shù)的判斷需要用$arg_parameter。
location / { root html; index index.html index.htm index.php; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Connection ""; if ( $query_string ~* "usg=0" ) { proxy_pass http://local_workera; } if ( $query_string ~* "usg=1" ) { proxy_pass http://local_workerb; } if ( $arg_uid ~* "(.*[AB]$)" ) { proxy_pass http://local_workerf; } proxy_pass http://local_workera; }
1)請(qǐng)求路徑中的usg=0和usg=1這兩個(gè)參數(shù)是確定的,所以使用了$query_string進(jìn)行正則匹配即可;($query_string的值是請(qǐng)求中所有參數(shù))
2)接下來(lái),我們想對(duì)uid的值如果是以A、B結(jié)尾的請(qǐng)求,轉(zhuǎn)向local_workerf處理,這時(shí)候就無(wú)法用$query_string進(jìn)行正則匹配了;(因?yàn)閷?duì)于/?uid=1A&t=1&usg=1和/?uid=123&t=A&usg=0 不太好匹配)這時(shí),只能用$arg_uid進(jìn)行正則匹配了。
3)由于usg=0和usg=2這兩個(gè)參數(shù)是互斥的,所以根據(jù)上面location中if指令的邏輯,不用break也可以正確處理,且放到最上面。對(duì)于uid的匹配,由于會(huì)和usg進(jìn)行沖突,所以只能放到最下面或者加break,即:
location / { root html; index index.html index.htm index.php; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Connection ""; if ( $arg_uid ~* "(.*[AB]$)" ) { proxy_pass http://local_workerf; break; } if ( $query_string ~* "usg=0" ) { proxy_pass http://local_workera; } if ( $query_string ~* "usg=1" ) { proxy_pass http://local_workerb; } proxy_pass http://local_workera; }
到此這篇關(guān)于nginx location中多個(gè)if里面proxy_pass的方法的文章就介紹到這了,更多相關(guān)nginx location proxy_pass內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx?location和proxy_pass配置示例詳解
- Nginx的location路徑與proxy_pass匹配規(guī)則說(shuō)明
- 解決Nginx location中配置proxy_pass轉(zhuǎn)發(fā)時(shí)斜線‘/‘導(dǎo)致404問(wèn)題
- 解讀nginx反向代理location和proxy_pass的映射關(guān)系
- Nginx反向代理location和proxy_pass配置規(guī)則詳細(xì)總結(jié)
- Nginx location 和 proxy_pass路徑配置問(wèn)題小結(jié)
- Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說(shuō)明
相關(guān)文章
在nginx中實(shí)現(xiàn)單位時(shí)間內(nèi)限制訪問(wèn)頻率的教程
這篇文章主要介紹了在nginx中實(shí)現(xiàn)單位時(shí)間內(nèi)限制訪問(wèn)頻率的教程,并非針對(duì)IP而是全局的訪問(wèn)量限制,需要的朋友可以參考下2015-04-04Nginx反向代理多個(gè)服務(wù)器的實(shí)現(xiàn)方法
這篇文章主要介紹了Nginx反向代理多個(gè)服務(wù)器的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Nginx優(yōu)化配置和內(nèi)核優(yōu)化 實(shí)現(xiàn)突破十萬(wàn)并發(fā)
Nginx是一個(gè)高性能的 HTTP 和 反向代理 服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器。本文介紹一些Nginx優(yōu)化代碼參數(shù)等2013-06-06編寫Go程序?qū)ginx服務(wù)器進(jìn)行性能測(cè)試的方法
這篇文章主要介紹了編寫Go程序?qū)ginx服務(wù)器進(jìn)行性能測(cè)試的方法,包括對(duì)其負(fù)載均衡和緩存等方面的測(cè)試,極力推薦!需要的朋友可以參考下2015-06-06nginx的限流和網(wǎng)關(guān)gatway限流詳解
這篇文章主要介紹了nginx的限流和網(wǎng)關(guān)gatway限流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08使用referer指令配置Nginx服務(wù)器來(lái)防止圖片盜鏈
這篇文章主要介紹了使用referer指令配置Nginx服務(wù)器來(lái)防止圖片盜鏈的方法,文中也簡(jiǎn)單介紹了referer指令的一些語(yǔ)法和常用參數(shù),需要的朋友可以參考下2015-12-12Nginx服務(wù)器的location指令匹配規(guī)則詳解
這篇文章主要介紹了Nginx服務(wù)器的location指令匹配規(guī)則,文中介紹了一種動(dòng)靜態(tài)地址分離的方法示例,需要的朋友可以參考下2015-12-12