Nginx配置檔案中location節點配置
阿新 • • 發佈:2022-04-06
nginx檔案結構
首先我們先簡單瞭解 nginx 的檔案結構,nginx 的 HTTP 配置主要包括三個區塊,結構如下:
Global: nginx 執行相關
Events: 與使用者的網路連線相關
http
http Global: 代理,快取,日誌,以及第三方模組的配置
server
server Global: 虛擬主機相關
location: 地址定向,資料快取,應答控制,以及第三方模組的配置
從上面展示的 nginx 結構中可以看出 location 屬於請求級別配置,這也是我們最常用的配置。
配置 location 塊
location 語法
Location 塊通過指定模式來與客戶端請求的URI相匹配。
Location基本語法:
- 匹配 URI 型別,有四種引數可選,當然也可以不帶引數。
- 命名location,用@來標識,類似於定義goto語句塊。
location [ = | ~ | ~* | ^~ ] /URI { … }
location @/name/ { … }
location匹配順序
nginx有兩層指令來匹配請求 URI 。第一個層次是 server 指令,它通過域名、ip 和埠來做第一層級匹配,當找到匹配的 server 後就進入此 server 的 location 匹配。
location 的匹配並不完全按照其在配置檔案中出現的順序來匹配,請求URI 會按如下規則進行匹配:
- 先精準匹配
=
,精準匹配成功則會立即停止其他型別匹配;- 沒有精準匹配成功時,進行字首匹配。先查詢帶有
^~
的字首匹配,帶有^~
的字首匹配成功則立即停止其他型別匹配,普通字首匹配(不帶引數^~
)成功則會暫存,繼續查詢正則匹配;=
和^~
均未匹配成功前提下,查詢正則匹配~
和~\*
。當同時有多個正則匹配時,按其在配置檔案中出現的先後順序優先匹配,命中則立即停止其他型別匹配;- 所有正則匹配均未成功時,返回步驟 2 中暫存的普通字首匹配(不帶引數
^~
)結果
以上規則簡單總結就是優先順序從高到低依次為(序號越小優先順序越高):
1. location = # 精準匹配 2. location ^~ # 帶參字首匹配 3. location ~ # 正則匹配(區分大小寫) 4. location ~* # 正則匹配(不區分大小寫) 5. location /a # 普通字首匹配,優先順序低於帶引數字首匹配。 6. location / # 任何沒有匹配成功的,都會匹配這裡處理