1. 程式人生 > >nginx location優先級

nginx location優先級

字符串匹配 第一個 普通 index 進行 urn 則表達式 ati 配置實例

目錄

  • 1. 配置語法
  • 2. 配置實例
  • 3. 總結:

網上查了下location的優先級規則,但是很多資料都說的模棱兩可,自己動手實地配置了下,下面總結如下。

1. 配置語法

1> 精確匹配

    location = /test {
        ...
    }

2> 前綴匹配

  • 普通前綴匹配
    location  /test {
        ...
    }
  • 優先前綴匹配
    location  ^~ /test {
        ...
    }

3> 正則匹配

  • 區分大小寫
    location  ~ /test$ {
        ...
    }
  • 不區分大小寫
    location  ~* /test$ {
        ...
    }

2. 配置實例

1> 多個前綴匹配,訪問/test/a,則先記住最長的前綴匹配,並繼續匹配

    location / {
        root   html;
        index  index.html index.htm;
    }
    
    location /test {
        return 601;
    }

    location /test/a {
        return 602;
    }

命中的響應狀態碼

602

2> 前綴匹配和正則匹配,訪問/test/a,則命中正則匹配

    location / {
        root   html;
        index  index.html index.htm;
    }
    
    location /test/a {
        return 601;
    }

    location ~* /test/a$ {
        return 602;
    }

命中的響應狀態碼

602

3> 優先前綴匹配和正則匹配,訪問/test/a,則命中優先前綴匹配,終止匹配

    location / {
        root   html;
        index  index.html index.htm;
    }
    location ^~ /test/a {
        return 601;
    }

    location ~* /test/a$ {
        return 602;
    }

命中的響應狀態碼

601

4> 多個正則匹配命中,訪問/test/a,則使用第一個命中的正則匹配,終止匹配

    location / {
        root   html;
        index  index.html index.htm;
    }
    
    location ~* /a$ {
        return 601;
    }          
               
    location ~* /test/a$ {
        return 602;
    }

命中的響應狀態碼

601

5> 精確匹配和正則匹配,訪問/test,精確匹配優先

    location / {
        root   html;
        index  index.html index.htm;
    }

    location ~* /test {
        return 602;
    }

    location = /test {
        return 601;
    }

命中的響應狀態碼

601

3. 總結:

  • 搜索優先級:
精確匹配 > 字符串匹配( 長 > 短 [ 註: ^~ 匹配則停止匹配 ]) > 正則匹配( 上 > 下 )
  • 使用優先級:
精確匹配 > (^~) > 正則匹配( 上 > 下 )>字符串(長 > 短)

解釋:

  • 先搜索有沒有精確匹配,如果匹配就命中,終止匹配。
  • 索前綴匹配,命中則先記住(可能命中多個),繼續往下搜索,如果有優先前綴匹配符號“^~”,則命中優先前綴匹配,不再去檢查正則表達式;反之則繼續進行正則匹配,如果命中則使用正則表達式,如果沒命中則使用最長的前綴匹配。
  • 前綴匹配,長的優先;多個正則匹配,在上面的優先。

nginx location優先級