nginx中location配置及匹配詳解

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 這條規則上。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章