nginx location 匹配 多个规则_三道小练习助你弄懂 Nginx location 匹配
在 Nginx 中我們可以通過配置 location 指令塊,來決定一個請求 url 如何處理。如果我們編寫了多條 location 指令塊,如何保證各個 location 不會產生沖突?如何理清 location 的匹配順序?
帶著這兩個問題,我們先來做幾道練習題。
原文地址,歡迎 Star 和 訂閱 我的博客。Nginx Location 小練習
問題 1、如果訪問 /abcd 會匹配到哪個 config?
server問題 2、如果訪問 /abcd 會匹配到哪個 config?
server問題 3、如果訪問 /abcd 會匹配到哪個 config?
server如果這 3 道小練習讓你很費解,那么我們就接著深入研究,相信你一定會有所收獲,如果只想知道答案,請直接看文章末尾。
Nginx location 配置語法
Nginx location 配置語法如下
location [ = | ~ | ~* | ^~ | 空 ] url { … }其中 [ = | ~ | ~* | ^~ | 空 ] 表示 location 的修飾符,具體含義如下
- = 表示精準匹配(完全相等時,才會命中規則)。
- ~ 表示區分大小寫的正則匹配。
- ~* 表示不區分大小寫的正則匹配。
- ^~ 表示最佳匹配。
- 空,匹配以 url 開頭的字符串,只能是普通字符串。
Nginx location 的匹配過程
一般來說,一個 nginx.conf 文件通常會配置多個匹配規則,如果多個匹配規則都匹配到了 url,最終會執行哪一個呢?
1、Nginx 首先根據 url 檢查最長匹配前綴字符串,即會判斷【=】、【^~】、【空】修飾符定義的內容。
- 如果匹配到最長匹配前綴字符串。
- 如果最長匹配前綴字符串被【=】修飾符匹配,則立即響應。
- 如果沒有被【=】修飾符匹配,則執行第 2 步判斷。
- 如果沒有匹配到最長匹配前綴字符串,則執行第 3 步判斷。
2、Nginx 繼續檢查最長匹配前綴字符串,即判斷【^~】、【空】修飾符定義的內容。
- 如果最長匹配前綴字符串被【^~】修飾符匹配,則立即響應。
- 如果被【空】修飾符匹配,則將該匹配保存起來,并執行第 3 步判斷。
3、Nginx 找到 nginx.conf 中定義的所有正則匹配(~ 和 ~*),并按順序進行匹配。
- 如果有任何正則表達式匹配成功,則立即響應。
- 如果沒有任何正則匹配成功,則響應第 2 步中存儲的【空】匹配。
問題 1:最長匹配字符串為 abc,且有 ^~ 匹配,故結果為:config3。
問題 2:最長匹配字符串為 abc,被【空】匹配,故會開始查詢正則匹配,匹配到正則 ~ /abc,故結果為:config1。
問題 3:最長匹配字符串為 abc,被【空】匹配,故會開始查詢正則匹配,沒有匹配到任何正則,故使用【空】匹配到的結果:config2。
參考資料
Understanding Nginx Server and Location Block Selection Algorithms
總結
以上是生活随笔為你收集整理的nginx location 匹配 多个规则_三道小练习助你弄懂 Nginx location 匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java角度_java中角度或弧度的计算
- 下一篇: python 水仙花_python 水仙