nginx Location 語法基礎知識


  URL地址匹配是Nginx配置中最靈活的部分 Location 支持正則表達式匹配,也支持條件匹配,用戶可以通過location指令實現Nginx對動丶靜態網頁的過濾處理。

Nginx location 配置語法

  location [ = | ~ | ~* | ^~ ] uri { ... }

  location @name { ... }

location 配置可以有兩種配置方法

前綴 + uri(字符串/正則表達式)

@ + name

前綴含義

=:精確匹配(必須全部相等)

~:大小寫敏感

~*:忽略大小寫

^~:只需匹配uri部分

@:內部服務跳轉

Location 基礎知識

  location 是在 server 塊中配置。

  可以根據不同的 URI 使用不同的配置(location 中配置),來處理不同的請求。

  location 是有順序的,會被第一個匹配的location 處理。

 Location 配置演示

 =精確匹配

location = / { #規則 }   

  #則匹配到 `http://www.example.com/` 這種請求。

 

~大小寫敏感

location~ /Example/ { #規則 }   

  #請求示例#http://www.example.com/Example/ [成功]

  #http://www.example.com/example/ [失敗]

 

~*大小寫忽略

 location~* /Example/ { #規則 }

  # 則會忽略 uri 部分的大小寫

  #http://www.example.com/Example/ [成功]

  #http://www.example.com/example/ [成功]

 

^~只匹配以 uri 開頭

 location ^~ /img/ { #規則 }

  #以 /img/ 開頭的請求,都會匹配上

  #http://www.example.com/img/a.jpg [成功]

  #http://www.example.com/img/b.mp4 [成功]

 

 

@nginx內部跳轉

 location /img/ { error_page404@img_err; }

 location@img_err { # 規則 }

  #以 /img/ 開頭的請求,如果鏈接的狀態為 404。則會匹配到 @img_err 這條規則上。

 

規則分類

其中“~ ”和“~”以及“!~”和“!~”前綴表示正則location .

其他前綴(包括:“=”,“^~”和“@ ”)和無任何前綴的都屬於普通location .

 

匹配規則

  普通 location ”的匹配規則是“最大前綴.(特殊的是“=”和“^~”,前綴指令將嚴格匹配uri ,如果匹配,停止搜索.)正則 location ”的匹配規則是“順序匹配,且只要匹配到第一個就停止后面的匹配.通用匹配 “/”最后匹配

  先匹配普通 location ,再“考慮”匹配正則 location 。注意這里的“考慮”是“可能”的意思,也就是說匹配完“普通 location ”后,有的時候需要繼續匹配“正則 location ”,有的時候則不需要繼續匹配“正則 location ”。

  兩種情況下,不需要繼續匹配正則 location :

  ( 1 )當普通 location 前面指定了“ ^~ ”,特別告訴 Nginx 本條普通 location 一旦匹配上,則不需要繼續正則匹配;

  ( 2 )當普通location 恰好嚴格匹配上,不是最大前綴匹配,則不再繼續匹配正則.

  總結:正則 location 匹配讓步普通 location 的嚴格精確匹配結果;但覆蓋普通 location 的最大前綴匹配結果.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM