1. 程式人生 > 其它 >Nginx配置檔案中location節點配置

Nginx配置檔案中location節點配置

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 會按如下規則進行匹配:

  1. 先精準匹配 = ,精準匹配成功則會立即停止其他型別匹配;
  2. 沒有精準匹配成功時,進行字首匹配。先查詢帶有 ^~ 的字首匹配,帶有 ^~ 的字首匹配成功則立即停止其他型別匹配,普通字首匹配(不帶引數 ^~ )成功則會暫存,繼續查詢正則匹配;
  3. =^~ 均未匹配成功前提下,查詢正則匹配 ~~\* 。當同時有多個正則匹配時,按其在配置檔案中出現的先後順序優先匹配,命中則立即停止其他型別匹配;
  4. 所有正則匹配均未成功時,返回步驟 2 中暫存的普通字首匹配(不帶引數 ^~ )結果

以上規則簡單總結就是優先順序從高到低依次為(序號越小優先順序越高):

1. location =    # 精準匹配
2. location ^~   # 帶參字首匹配
3. location ~    # 正則匹配(區分大小寫)
4. location ~*   # 正則匹配(不區分大小寫)
5. location /a   # 普通字首匹配,優先順序低於帶引數字首匹配。
6. location /    # 任何沒有匹配成功的,都會匹配這裡處理