Nginx location匹配規則

2021-08-29 17:59:25 字數 2653 閱讀 8186

location [=|~|~*|^~|@] /uri/
從上面的語法出發,可以了解到 location 可以區分為三個部分,接下來乙個乙個的研究一下。

1) [=||*|^~|@]

上面定義了幾個不同的符號,表示不同的匹配規則,那麼先後順序呢?

= 字首的指令嚴格匹配這個查詢。如果找到,停止搜尋;

所有剩下的常規字串,最長的匹配。如果這個匹配使用 ^~ 字首,搜尋停止;

正規表示式,在配置檔案中定義的順序;

如果第 3 條規則產生匹配的話,結果被使用。否則,使用第 2 條規則的結果。

測試示例1:

location = /world 

location = /hello

location ~ /hellowo

location ^~ /hello

- 請求 localhost/world 返回600

- 請求 localhost/world2 localhost/test/world 返回其他

- 請求 localhost/hello 返回600

- 請求 localhost/hello/123 返回601

- 請求 localhost/hellow 返回601

- 請求 localhost/hellowo 返回601

- 請求 localhost/test/hellowo 返回602

- 請求 localhost/test/hello 返回其他

因此可以知道:

測試示例2:

location ~ /hello 

location ~ /helloworld

- 請求 localhost/world/helloworld 返回 602

- 請求 localhost/helloworld 返回 602

調整上面的順序

location ~ /helloworld 

location ~ /hello

- 請求 localhost/helloworld 返回601

- 請求 localhost/world/helloworld 返回601

- 請求 localhost/helloworld 返回602

所以同時正則匹配時

測試示例3:

location ^~ /hello/ 

location /hello/world

這種場景中,存在乙個沒有符合的路由規則,那麼實際的測試是怎樣呢?

- http://localhost/hello/wor 返回601

- http://localhost/hello/world 返回602

- http://localhost/hello/world23 返回602

- http://localhost/hello/world/123 返回602

從上面的示例可以看出

2) [uri]

這裡主要填的是需要匹配的 path 路徑,根據前面的符號,這裡可以填寫精確到 path 路徑,也可以填正規表示式,下面則主要針對正則進行說明

. : 匹配除換行符以外的任意字元

? : 重複0次或1次

\d :匹配數字

^ : 匹配字串的開始

$ : 匹配字串的介紹

: 重複n次

[c] : 匹配單個字元c

[a-z] : 匹配a-z小寫字母的任意乙個

小括號()之間匹配的內容,可以在後面通過$1來引用,$2表示的是前面第二個()裡的內容。正則裡面容易讓人困惑的是\轉義特殊字元。

請求 path 匹配只是第一步,匹配完成之後,如何將請求**給其它的 web 服務呢?
通常可見的一種使用姿勢就是使用 nginx **請求,**到內部的其它 web 服務上

主要通過 prixy_pass 來實現

location ^~ /webs
上面規則的含義是,將所有以 webs 開頭的請求,**到 8080 埠的 web 服務上。

上面是直接寫死**到乙個 ip 上,如果是多個機器提供服務,可以這樣配置

## 下面放在http的括號內,作為第一層

upstream test.online

location ^~ /webs

rewrite功能就是,使用nginx提供的全域性變數或自己設定的變數,結合正規表示式和標誌位實現url重寫以及重定向。

rewrite只能放在server{},location{},if{}中,並且只能對網域名稱後邊的除去傳遞的引數外的字串起作用, 如

只對/a/we/index.php重寫。

語法: rewrite regex replacement [flag];
示例:

location ^~ /hexo 

location ~ /hello

將hello開頭的,全部**到/hexo/public/index.html

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,不使用正規表示式,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error pag...

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error page,try fil...

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error page,try fil...