閱讀431 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Nginx學習之location匹配規則

介紹

location指令是http模塊當中最核心的一項配置,根據預先定義的URL匹配規則來接收用戶發送的請求,根據匹配結果,將請求轉發到後台服務器、非法的請求直接拒絕並返回403、404、500錯誤處理等。

location 的匹配符

~ 波浪線表示執行一個正則匹配,區分大小寫
~* 表示執行一個正則匹配,不區分大小寫
^~ 表示普通字符匹配,如果該選項匹配,隻匹配該選項,不匹配別的選項,一般用來匹配目錄
= 進行普通字符精確匹配
@ 定義一個命名的 location,使用在內部定向時,例如 error_page, try_files

location 匹配的優先級

與location在配置文件中的順序無關

= 精確匹配會第一個被處理。如果發現精確匹配,nginx停止搜索其他匹配。
普通字符匹配,正則表達式規則和長的塊規則將被優先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
^~ 則隻匹配該規則,nginx停止搜索其他匹配,否則nginx會繼續處理其他location指令。
最後匹配理帶有"~"和"~*"的指令,如果找到相應的匹配,則nginx停止搜索其他匹配;當沒有正則表達式或者沒有正則表達式被匹配的情況下,那麼匹配程度最高的逐字匹配指令會被使用。

來自實踐總結中:
(location =) > (location 完整路徑 >) >(location ^~ 路徑) >(location ~* 正則) >(location 路徑)

配置解析

location  = / {
  # 隻匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何請求,因為所有請求都是以"/"開始
  # 但是更長字符匹配或者正則表達式匹配會優先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 開始的請求,並停止匹配 其它location
  [ configuration C ] 
}
location ~* .(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg結尾的請求. 
  # 但是所有 /images/ 目錄的請求將由 [Configuration C]處理.   
  [ configuration D ] 
}

最後更新:2017-04-10 11:00:02

  上一篇:go Nginx學習之反向代理
  下一篇:go 文學,大數據的終極挑戰