nginx location原理解析

2021-09-27 06:14:26 字數 1911 閱讀 7886

nginx中配置location

語法規則: location [=|~|~*|^~] /uri/

= 開頭表示精確匹配

^~ 開頭表示uri以某個常規字串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。

~開頭表示不區分大小寫的正則匹配

~* 開頭表示不區分大小寫的正則匹配

!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 的正則

/ 通用匹配,任何請求都會匹配到。

注意:匹配的順序是先匹配普通字串,然後再匹配正規表示式。另外普通字串匹配順序是根據配置中字元長度從長到短,也就是說使用普通字串配置的location順序是無關緊要的,反正最後nginx會根據配置的長短來進行匹配,但是需要注意的是正規表示式按照配置檔案裡的順序測試。找到第乙個比配的正規表示式將停止搜尋。

一般情況下,匹配成功了普通字串location後還會進行正規表示式location匹配。有兩種方法改變這種行為,其一就是使用「=」字首,這時執行的是嚴格匹配,並且匹配成功後立即停止其他匹配,同時處理這個請求;另外一種就是使用「^~」字首,如果把這個字首用於乙個常規字串那麼告訴nginx 如果路徑匹配那麼不測試正規表示式。

import re

def fregxeq():

return "this is my ="

def fregxw():

return "this is my /"

def fregxd():

return "this is my ~*"

def fregxd():

return "this is my ~"

def fregxh():

return "this is my ^"

#代表nginx中的等於

regxeq = re.compile("/abc/index.html")

#代表nginx中的/

regxw = re.compile("/.*")

#代表nginx中的~,大小寫敏感的正規表示式,輸入的path不進行大小寫轉換

#代表nginx中的~*,忽略大小寫,輸入的path路徑要轉換為小寫後進行正則匹配

#代表以什麼開頭的正規表示式

regxh = re.compile("^/images.*")

#注意註冊順序,以=精確匹配為首,其次大小寫敏感和以什麼開頭,再其次大小寫不敏感,最後/模糊匹配

d =

path = "/images/abc/index.html"

for regx in d:

try:

if regx.match(path).group():

print(d[regx]())

break

except exception as f:

print(f)

#精確的正規表示式註冊

location = /abc/index.html

#大小寫敏感的正規表示式註冊

#忽略大小寫的正規表示式註冊

#註冊正規表示式以什麼開頭的path

location ^~ /images.*

#匹配任意所有的正規表示式

location / {

root /usr/share/nginx/html;

index index.html index.htm;

Nginx Location 指令基礎

nginx 中的 location 指令 是nginxhttpcoremodule中重要指令。location 指令比較簡單,但卻是配置 nginx 過程中不得不去了解的。location 指令,是用來為匹配的 uri 進行配置,uri 即語法中的 uri 可以是字串或正規表示式。但如果要使用正規表...

nginx location匹配規則

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

nginx location匹配規則

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