Nginx location你須要知道這些!

場景:

在項目開發中常常會遇到nginx配置文件中,會有不少條location配置,卻讀不懂其中的含義而煩惱

Location是什麼?

Location是Nginx中的塊級指令(block directive),
經過配置Location指令塊,能夠決定客戶端發過來的請求URI如何處理(是映射到本地文件仍是轉發出去)及被哪一個location處理

Location基本語法

修飾符(modifier)         
location [ = | ~ | ~* | ^~ ]     uri     { ... } 
location根據不一樣的修飾符能夠分爲兩大類
  1. 前綴location(prefix location): 
    無修飾符的普通location
    帶=的精準匹配location
    帶^~的非正則表達式location
  2.正則表達式location(regular expressions location):
    ~    區分大小寫的正則location
    ~*   不區分大小寫的正則location

Location基本匹配規則

匹配規則是指當請求到達nginx時,nginx如何決定該使用哪條location。html

首先,nginx首先會檢查全部的前綴location,從中選出 最長前綴匹配(也就是修飾符後面的路徑最長的)的location並記下。

而後,若是存在正則location時,按照其出現的順序,依次匹配URI,找到匹配的正則location就再也不繼續往下,並選擇該location做爲最終的結果。(劃重點:正則location出現的順序很重要)nginx

Location特殊匹配規則1

若是最長前綴匹配location的修飾符是^~時,就不會檢查正則location了,直接選擇該location爲最終location

Location特殊匹配規則2

若是存在精準匹配location,且請求的uri跟其 徹底匹配,選擇該精準匹配location做爲最終的location

測試下本身的理解是否準確:

下面是一個location配置參考,以及不一樣的請求uri到達nginx時會執行的規則正則表達式

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

請求URI                        執行的規則
/                             A
/index.html                   B
/documents/document.html      C
/images/1.gif                 D
/documents/1.jpg              E

參考文獻:

[Nginx官網location解釋][1]
相關文章
相關標籤/搜索