在項目開發中常常會遇到nginx配置文件中,會有不少條location配置,卻讀不懂其中的含義而煩惱
Location是Nginx中的塊級指令(block directive),
經過配置Location指令塊,能夠決定客戶端發過來的請求URI如何處理(是映射到本地文件仍是轉發出去)及被哪一個location處理
修飾符(modifier) location [ = | ~ | ~* | ^~ ] uri { ... } location根據不一樣的修飾符能夠分爲兩大類 1. 前綴location(prefix location): 無修飾符的普通location 帶=的精準匹配location 帶^~的非正則表達式location 2.正則表達式location(regular expressions location): ~ 區分大小寫的正則location ~* 不區分大小寫的正則location
匹配規則是指當請求到達nginx時,nginx如何決定該使用哪條location。html
首先,nginx首先會檢查全部的前綴location,從中選出 最長前綴匹配(也就是修飾符後面的路徑最長的)的location並記下。而後,若是存在正則location時,按照其出現的順序,依次匹配URI,找到匹配的正則location就再也不繼續往下,並選擇該location做爲最終的結果。(劃重點:正則location出現的順序很重要)nginx
若是最長前綴匹配location的修飾符是^~時,就不會檢查正則location了,直接選擇該location爲最終location
若是存在精準匹配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]