1. 程式人生 > >nginx中location配置及匹配詳解

nginx中location配置及匹配詳解

back amp 告訴 正則表達式 順序 win http 方法 ext

nginx中location配置及匹配詳解

1location語法規則

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內部跳轉

2location匹配順序

(location =) > (location 完整路徑) > (location ^~ 路徑

) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/)

1.首先匹配=

2.其次匹配^~

3.再其次按照配置文件的順序進行正則匹配

4.最後是交給/進行通用匹配

提示:當有匹配成功時,立刻停止匹配,按照當前匹配規則處理請求

特別註意:

1、字符串匹配優先搜索,但是只是記錄下最長的匹配 ( 如果 ^~ 是最長的匹配,則會直接命中,停止搜索正則 ),然後繼續搜索正則匹配,如果有正則匹配,則命中正則匹配,如果沒有正則匹配,則命中最長的字符串匹配.,需要註意的是正則表達式按照配置文件裏的順序測試。找到第一個匹配的正則表達式將停止搜索。

2、一般情況下,匹配成功了普通字符串

location後還會進行正則表達式location匹配。有兩種方法改變這種行為,其一就是使用“=”前綴,這時執行的是嚴格匹配,並且匹配成功後立即停止其他匹配,同時處理這個請求;另外一種就是使用“^~”前綴,如果把這個前綴用於一個常規字符串那麽告訴nginx 如果路徑匹配那麽不測試正則表達式。

location匹配的nginx變量是 $request_uri

3location實例說明

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配置及匹配詳解