Nginx配置之location的匹配優(yōu)先級(jí)淺析
前言
Nginx 配置中的 server 塊中的 location 用來(lái)匹配請(qǐng)求 URI,以便對(duì)不通的 URI 進(jìn)行不通的處理。
location 類(lèi)型 和 成功匹配的條件
- location = expression {} 精準(zhǔn)匹配,只有 URI 和 expression 完全相同,才算匹配成功;
- location expression {} 普通匹配,只要 URI 前部分的字符與 expression 相同就算匹配成功;
- location ^~ expression {} 普通匹配,只要 URI 前部分字符與 expression 相同就算匹配成功;
- location ~ regex {} 正則匹配(區(qū)分大小寫(xiě));
- location ~* regex {} 正則匹配(不區(qū)分大小寫(xiě));
總結(jié)可分為三大類(lèi):精準(zhǔn)匹配、普通匹配和正則匹配。
匹配邏輯與優(yōu)先級(jí)
對(duì)于一個(gè)進(jìn)入 Nginx 的請(qǐng)求來(lái)講,其 URI 可能符合多個(gè) location 的匹配條件,但這條請(qǐng)求最終只會(huì)被一個(gè) location 邏輯所處理(重定向不算),那么,匹配時(shí)肯定有優(yōu)先級(jí)之分。Nginx 的匹配邏輯是這樣的:
1. 執(zhí)行精準(zhǔn)匹配
若請(qǐng)求 URI 與 location = 相匹配(符合精準(zhǔn)匹配條件),則執(zhí)行該 location 的內(nèi)容,不再進(jìn)行其他匹配,否則見(jiàn)下一條。
2. 執(zhí)行普通匹配
接下來(lái) Nginx 會(huì)將 URI 與所有普通匹配的 location 進(jìn)行比較(無(wú)論是 ^~ 類(lèi)型還是無(wú)符號(hào)類(lèi)型),然后找出匹配度最高的 location ,若該 location 為 ^~ 類(lèi)型,則停止匹配,執(zhí)行該 location 內(nèi)容;若匹配度最高的 location 為無(wú)符號(hào)類(lèi)型,則保留這個(gè)無(wú)符號(hào) location ,繼續(xù)進(jìn)行下面的正則匹配;若 URI 不符合任何普通匹配 location 的條件,則直接進(jìn)入下一步。
3. 執(zhí)行正則匹配
正則的匹配與 location 的順序相關(guān),Nginx 會(huì)從上至下進(jìn)行匹配,若匹配到一個(gè) location ,則執(zhí)行該 location 邏輯,忽略后面所有的正則 location ,終止匹配;若一個(gè)正則都沒(méi)匹配上,則執(zhí)行之前保留的那個(gè)無(wú)符號(hào) location ,若之前沒(méi)有保留,則直接返回 404。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Nginx暴露出請(qǐng)求的真實(shí)IP的問(wèn)題
在工作中,經(jīng)常會(huì)用用戶實(shí)際請(qǐng)求的IP地址,本文主要介紹了Nginx暴露出請(qǐng)求的真實(shí)IP的問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10Nginx上對(duì)同一IP訪問(wèn)的特定URL進(jìn)行限流實(shí)現(xiàn)
要在Nginx上對(duì)同一IP訪問(wèn)的特定URL進(jìn)行限流,您可以使用ngx_http_limit_req_module模塊,本文就來(lái)介紹一下如何使用,具有一定的參考價(jià)值,感興趣的餓2024-01-01ngin配置301重定向設(shè)置方法和nginx子目錄301重定向
這篇文章主要介紹了ngin配置301重定向設(shè)置方法和nginx子目錄301重定向,需要的朋友可以參考下2014-04-04為高負(fù)載網(wǎng)絡(luò)優(yōu)化Nginx和Node.js的方法
如果不先對(duì)Nginx和Node.js的底層傳輸機(jī)制有所了解,并進(jìn)行針對(duì)性優(yōu)化,可能對(duì)兩者再細(xì)致的調(diào)優(yōu)也會(huì)徒勞無(wú)功。一般情況下,Nginx通過(guò)TCP socket來(lái)連接客戶端與上游應(yīng)用2013-02-02