12,nginx location 的匹配順序
阿新 • • 發佈:2020-12-17
一: 1. 字首含義 = :精確匹配(必須全部相等) ~ :大小寫敏感 ~* :忽略大小寫 ^~ :只需匹配uri部分 @ :內部服務跳轉 Location 配置demo: 1.=,精確匹配 location = / { #規則 } # 則匹配到 `http://www.example.com/` 這種請求。 2.~,大小寫敏感 location ~ /Example/ { #規則 } #請求示例 #http://www.example.com/Example/ [成功] #http://www.example.com/example/ [失敗] 3.~*,大小寫忽略 location ~* /Example/ { #規則 } # 則會忽略 uri 部分的大小寫 #http://www.example.com/Example/ [成功] #http://www.example.com/example/ [成功] 4.^~,只匹配以 uri 開頭 location ^~ /img/ { #規則 } #以 /img/ 開頭的請求,都會匹配上 #http://www.example.com/img/a.jpg [成功] #http://www.example.com/img/b.mp4 [成功] 5.@,nginx內部跳轉 location /img/ { error_page 404 @img_err; } location @img_err { # 規則 } #以 /img/ 開頭的請求,如果連結的狀態為 404。則會匹配到 @img_err 這條規則上。 二: Nginx多個location匹配 首先匹配 = 其次匹配 ^~ 其次是按檔案中順序的正則匹配 最後是交給 / 通用匹配 當有匹配成功時候,停止匹配,按當前匹配規則處理請求 例子,有如下匹配規則: location = / { #規則A } location = /login { #規則B } location ^~ /static/ { #規則C } location ~ .(gif|jpg|png|js|css)$ { #規則D } location ~* .png$ { #規則E } location / { #規則F } 那麼產生的效果如下: 訪問根目錄 /, 比如 http://localhost/ 將匹配規則 A 訪問 http://localhost/login 將匹配規則 B,http://localhost/register 則匹配規則 F 訪問 http://localhost/static/a.html 將匹配規則 C 訪問 http://localhost/a.gif, http://localhost/b.jpg 將匹配規則 D 和規則 E,但是規則 D 順序優先,規則 E 不起作用,而 http://localhost/static/c.png 則優先匹配到規則 C 訪問 http://localhost/a.PNG 則匹配規則 E,而不會匹配規則 D,因為規則 E 不區分大小寫。 訪問 http://localhost/category/id/1111 則最終匹配到規則 F,因為以上規則都不匹配。