nginx之location 匹配規則

2021-08-04 21:04:34 字數 2984 閱讀 7171

語法規則

location [=|~|~*|^~] /uri/

模式

含義location = /uri

= 表示精確匹配,只有完全匹配上才能生效

location ^~ /uri

^~ 開頭對url路徑進行字首匹配,並且在正則之前。

location ~ pattern

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

location ~* pattern

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

location /uri

不帶任何修飾符,也表示字首匹配,但是在正則匹配之後

location /

通用匹配,任何未匹配到其它location的請求都會匹配到,相當於switch中的default

字首匹配時,nginx 不對 url 做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)

多個 location 配置的情況下匹配順序為(參考資料而來,還未實際驗證,試試就知道了,不必拘泥,僅供參考):

注意:字首匹配,如果有包含關係時,按最大匹配原則進行匹配。比如在字首匹配:location /dir01location /dir01/dir02,如有請求http://localhost/dir01/dir02/file將最終匹配到location /dir01/dir02

例子,有如下匹配規則:

location /那麼產生的效果如下:

訪問http://localhost/category/id/1111則最終匹配到規則 f ,因為以上規則都不匹配,這個時候應該是 nginx **請求給後端應用伺服器,比如 fastcgi(php),tomcat(jsp),nginx 作為反向**伺服器存在。

所以實際使用中,筆者覺得至少有三個匹配規則定義,如下:

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

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

# 第乙個必選規則

location = /

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

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

# 第三個規則就是通用規則,用來**動態請求到後端應用伺服器

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

# 畢竟目前的一些框架的流行,帶.php、.jsp字尾的情況很少了

location /

rewrite 語法

1、下面是可以用來判斷的表示式:

-f 和 !-f 用來判斷是否存在檔案

-d 和 !-d 用來判斷是否存在目錄

-e 和 !-e 用來判斷是否存在檔案或目錄

-x 和 !-x 用來判斷檔案是否可執行

2、下面是可以用作判斷的全域性變數

例:http://localhost:88/test1/test2/test.php?k=v

$host:localhost

$server_port:88

$request_uri:/test1/test2/test.php?k=v

$document_uri:/test1/test2/test.php

$document_root:d:\nginx/html

$request_filename:d:\nginx/html/test1/test2/test.php

redirect 語法
server 

}

防盜煉
location ~* \.(gif|jpg|swf)$ 

}

根據檔案型別設定過期時間
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ 

}

禁止訪問某個目錄
location ~* \.(txt|doc)$

try_files

try_files $uri $uri/ /index.php?q=$uri&$args;

按順序檢查檔案是否存在,返回第乙個找到的檔案。結尾的斜線表示為資料夾 -$uri/。如果所有的檔案都找不到,會進行乙個內部重定向到最後乙個引數。

務必確認只有最後乙個引數可以引起乙個內部重定向,之前的引數只設定內部uri的指向。 最後乙個引數是回退uri且必須存在,否則將會出現內部500錯誤。

命名的location也可以使用在最後乙個引數中。與rewrite指令不同,如果回退uri不是命名的location那麼$args不會自動保留,如果你想保留$args,必須明確宣告。

location /

例項分析

try_files 將嘗試你列出的檔案並設定內部檔案指向。

例如:你也可以使用乙個檔案或者狀態碼 (=404)作為最後乙個引數,如果是最後乙個引數是檔案,那麼這個檔案必須存在。

需要明確的是出最後乙個引數外 try_files 本身不會因為任何原因產生內部重定向。

nginx之location匹配規則

1.概述nginx server 塊下的乙個指令,每個server塊可以包含多個location塊。2.作用 1 基於nginx伺服器接收到的請求字串 例如 server name abc 對除虛擬主機名稱 也可以是ip別名 之外的字串 例如 abc 進行匹配,對特定的匹配進行處理 2 位址定向 資...

nginx學習之location塊

nginx官方文件中location塊的語法結構為 location uriuri 待匹配的字串,可以使不含正則表達的字串,如 myserver.php等 location模式 含義以 開頭 表示精準匹配,如只匹配根目錄結尾的請求,後面不能帶任何字串 以 開頭 表示uri以某個常規字串開頭,不是正則...

nginx之location匹配順序

開頭表示精確匹配 開頭表示uri以某個常規字串開頭,不是正則匹配 開頭表示區分大小寫的正則匹配 開頭表示不區分大小寫的正則匹配 通用匹配,如果沒有其它匹配,任何請求都會匹配到優先順序 location location 完整路徑 location 路徑 location 從上向下正則順序,匹配在最後...