Nginx詳解Location匹配規則

2021-10-06 08:15:10 字數 2803 閱讀 2601

本文我們來給大家詳細介紹下nginx中的核心配置檔案中的location匹配規則。

location會嘗試根據使用者請求中的uri來匹配上面的/uri表示式,如果可以匹配,就選擇location{}塊中的配置來處理使用者請求。當然,匹配方式是多樣的,

下面介紹location的匹配規則。

語法:

location [

=|~|~*] /uri/

~ #波浪線表示執行乙個正則匹配,區分大小寫

~* #表示執行乙個正則匹配,不區分大小寫

= #進行普通字元精確匹配

location的指令分為兩種匹配模式

1.普通字串匹配: 以=開頭或者沒有帶正則引導符號(~)規則

2.正則匹配:以()開頭或者(*)開頭的表示正則匹配

location / 

location /demo

匹配規則:

location不是嚴格匹配,而是乙個「字首匹配」過程,所以在上面那個案例中,兩個location都能夠匹配,但是普通匹配會遵循乙個最長匹配規則,也就是上面的請求中,最終uri會匹配到長度最大location。也就是/demo

在普通匹配模式中,還可以細分出一種叫精準匹配模式,也就是通過等於號直接來匹配的

location =/demo 

location /demo

我們繼續沿著上面的案例來新增乙個基於 location =/demo的匹配規則,那麼這個時候的匹配就是精準匹配。精準匹配和普通匹配的差異在**呢?以及匹配順序是什麼樣的?

http://localhost/demo/gp.html √ (精準匹配)

但是在此處並不能證明此處是精準匹配

#location =/demo 

location /demo

把精準匹配注釋掉

http://localhost/demo/gp.html √ (普通匹配)

location =/demo 

#location /demo

我們把普通匹配注釋掉發現:

第一種方式訪問不了。但這也證明不了精準匹配的優先順序比普通匹配高,這時我們可以這樣設定

location =/index.html 

location /index.html

然後我們再訪問

訪問到的是gp1目錄中的,說明普通匹配沒起作用。

正則匹配在實際應用中也會用得比較多,比如接下來給大家演示乙個基於正則匹配的案例

location ~* \.(jpg|png|css|js|gif)$
然後我們在html目錄下建立images資料夾,裡面放入一張。reload nginx服務後,訪問

正則匹配在三種匹配模式中的優先順序是什麼樣的呢?前面我們講了一般匹配,最終會選擇最大字首匹配。但是匹配後不會停止匹配,最大匹配只是乙個臨時結果,nginx還需要繼續檢查正則location。那麼正則匹配規則是什麼樣的?按照正則location在配置檔案中的物理順序匹配。如果匹配到一條正則location,就不再考慮後面的規則

首先看有沒有精準匹配,如果有,則停止匹配過程

判斷普通命中,如果有多個命中,「記錄」下最長的命中結果(記錄但不結束)

繼續判斷正規表示式,按配置裡的正規表示式順序為準,由上到下開始匹配,一旦匹配成功乙個,立即返回結果並結束

a) 普通命中,順序無關,因為按照命中長短來確定

b) 正則命中,順序有關係,因為是從前往後命中

所以實際使用中,至少有三個匹配規則定義

直接匹配**根,通過網域名稱訪問**首頁比較頻繁,使用這個會加速處理

這裡是直接**給後端應用伺服器了,也可以是乙個靜態首頁

第乙個必選規則

location  =/
第二個必選規則是處理靜態檔案請求,這是nginx作為http伺服器的強項

有兩種配置模式,目錄匹配或字尾匹配,任選其一或搭配使用

location ^~ /static/
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$
第三個規則就是通用規則,用來**動態請求到後端應用伺服器

非靜態檔案請求就預設是動態請求,自己根據實際把握

location /

nginx的location配置詳解

語法規則 location uri 開頭表示精確匹配 開頭表示uri以某個常規字串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為 static 20 aa,可以被規則 static aa匹配到 注意是空格 開頭表示區分大小寫的正則匹配 開頭表示不區分大小寫的正則匹配 和 分...

nginx的location配置詳解

語法規則 location uri 開頭表示精確匹配 開頭表示uri以某個常規字串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為 static 20 aa,可以被規則 static aa匹配到 注意是空格 開頭表示區分大小寫的正則匹配 開頭表示不區分大小寫的正則匹配 和 分...

nginx的location配置詳解

語法規則 location uri 開頭表示精確匹配 開頭表示uri以某個常規字串開頭,理解為匹配url路徑即可。nginx不對url做編碼,因此請求為 static 20 aa,可以被規則 static aa匹配到 注意是空格 20 表示空格 開頭表示區分大小寫的正則匹配 開頭表示不區分大小寫的正...