nginx location詳解

Nginx的Location匹配html

 

Location根據類型分爲兩種:普通配置和正則匹配nginx

 

1、 普通配置web

 

普通location根據使用方法又分爲兩種,格式以下:url

1.  location  / {spa

命令序列server

}htm

       

解釋:括號中定義的表示對當前路徑及子路徑下的全部對象有效。優先級最低對象

用戶全部的請求都能被它匹配到。blog

        例子:域名

location / {       

              root /web; 

                相應策略     

    }

        這說明網頁根目錄在/web

        訪問的時候直接http://127.0.0.1或是域名就能夠了

        用戶全部的請求都能被它匹配到

       

location /bbs {

       root "/web";

         相應策略

}

 

這就說明網頁根目錄是位於  /web/bbs

訪問的時候直接http://127.0.0.1/bbs就能夠了

當用戶訪問

http://127.0.0.1/bbs/

或是

http://127.0.0.1/bbs/子路徑的時候才能被上邊的路徑匹配到。

        問題:當用戶訪問http://127.0.0.1/bbs/a.html

        這兩段location 同時存在時以下,那麼哪段配置會生效呢?

        server {

        listen       80;

        server_name  www.benet.com;

        index index.html;

        location  / {

                root /web;

        }

        location  /bbs {

                root /web;

        }

 

結論就是,

當用戶請求的(/bbs)url同時匹配到兩段location時,

最大前綴生效(location /bbs生效

若是沒有這段(location /bbs第一段生效。

第一段至關於默認策略,由於location / 包含全部的請求,全部的請求都是以  」/」 開始的

 

 

 

 

2.  location = /路徑 {

命令序列

}

  解釋:括號中定義的表示對當前路徑有效,子路徑不生效(精確匹配指定的路徑不包括子路徑)。「它的優先級最高。」

例子:

location = /prefix {

}

 

也就是用戶訪問www.benet.com/prefix能被上邊的location匹配到,它只匹配"/prefix",

"/"下的子路不匹配。

用戶訪問www.benet.com/prefix/a 就不能被它匹配到

優先級最高:指的是一旦匹配到此location ,當即生效。其它location不管是否匹配到請求都不生效。

 

例子:

location  /prefix/ {

                root /;

        }

location  = /prefix/  {

               return 507;

       }

 

 

匹配順序註解:

 

 

 

 

2、 正則匹配

 

正則匹配也分爲兩種:

  1. location ~ URI {}

~匹配的文件是區分字符 大小寫的

2.location ~* URI {} :

~*匹配的文件是不區分字符大小的

   

    正則匹配是按照正則location編寫的順序生效的,一旦匹配成功即中止匹配到後續的location

 

例子:

   location  ~ /bbs {

                return 400;

    }

   location ~* /bbs {

                return 500;

   }

網頁返回錯誤信息400

 

 

 

 

而後將兩段配置調換一下位置

  location ~* /bbs {

                return 500;

        }

  location  ~ /bbs {

                return 400;

        }

 

 

 

3、匹配順序和生效順序

 

匹配順序和生效順序是兩個概念

當配置中出現多個locaton而且普通和正則都有,那麼

一、匹配順序是:

    用戶請求的URL

    1)先匹配普通location

            普通location在匹配是按照編輯順序匹配

    2)在匹配正則location

            正則location在匹配時按照編輯順序匹配

可是正則和普通locaiton不按照編輯順序匹配

2、生效順序

當普通和正則都存在的狀況下,遵循如下原則

1.nginx開始按照編輯順序依次匹配普通location

    (1)若是匹配過程當中匹配到了

        "location =" :nginx會當即生效即中止後續的匹配

    (2)若是沒有"locaiton ="話,

        若是匹配到"locatin ^~"。會中止後續的正則匹配.而後此策略當即生效。

    

 

    (3)    若是以上兩種location都不存在的話

        nginx會匹配全部location後看後續有沒有正則locaion

            若是後續沒有正則locaiton

                而後最大前綴locaiton生效

                最後是location / 生效

            若是後續還有正則location

                一旦匹配成功一條正則locaion,這條會生效,而且會中止後續的正則匹配,還會會覆蓋前邊的普通location結果 

相關文章
相關標籤/搜索