nginx中location配置及匹配詳解
1、location語法規則
Location 基礎知識
1.location 是在 server 塊中配置。
2.可以根據不同的 URI 使用不同的配置(location 中配置),來處理不同的請求。
3.location 是有順序的,會被第一個匹配的location 處理。
語法規則: 1. location [ = | ~ | ~* | ^~ ] uri { ... } 2. location @name { ... } | |
location = /uri | =開頭表示精確匹配,只有完全匹配上才能生效 |
location ^~ /uri | ^~ 開頭對URL路徑進行前綴匹配,並且在正則之前 |
location ~ 正則表達式 | ~開頭表示區分大小寫的正則匹配 |
location ~*正則表達式 | ~*開頭表示不區分大小寫的正則匹配 |
location !~ 正則表達式 | !~區分大小寫不匹配的正則 |
location !~*正則表達式 | !~*不區分大小寫不匹配的正則 |
location /uri | 不帶任何修飾符,也表示前綴匹配,但是在正則匹配之後 |
location /uri | 通用匹配,任何未匹配到其它location的請求都會匹配到,相當於switch中的default |
location @名稱 | nginx內部跳轉 |
2、location匹配順序
(location =) > (location 完整路徑) > (location ^~ 路徑
1.首先匹配=
2.其次匹配^~
3.再其次按照配置文件的順序進行正則匹配
4.最後是交給/進行通用匹配
提示:當有匹配成功時,立刻停止匹配,按照當前匹配規則處理請求
特別註意:
1、字符串匹配優先搜索,但是只是記錄下最長的匹配 ( 如果 ^~ 是最長的匹配,則會直接命中,停止搜索正則 ),然後繼續搜索正則匹配,如果有正則匹配,則命中正則匹配,如果沒有正則匹配,則命中最長的字符串匹配.,需要註意的是正則表達式按照配置文件裏的順序測試。找到第一個匹配的正則表達式將停止搜索。
2、一般情況下,匹配成功了普通字符串
location匹配的nginx變量是 $request_uri
3、location實例說明
(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配置及匹配詳解