語法規則
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 /dir01
與location /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
}
根據檔案型別設定過期時間location ~* \.(js|css|jpg|jpeg|gif|png|swf)$
}
禁止訪問某個目錄location
~* \.(txt|doc)$
nginx匹配規則說明以及匹配的優先順序
語法規則 location uri 模式 含義location uri 表示精確匹配,只有完全匹配上才能生效 location uri 開頭對url路徑進行字首匹配,並且在正則之前。location pattern 開頭表示區分大小寫的正則匹配 location pattern 開頭表示不區分大小寫...
nginx匹配規則
nginx的location可以有以下幾個匹配 1.嚴格匹配這個查詢。如果找到,停止搜尋。2.匹配路徑的字首,如果找到,停止搜尋。3.為區分大小寫的正則匹配 4.為不區分大小寫匹配 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該...
nginx匹配規則
模式 含義location uri 表示精確匹配,只有完全匹配上才能生效 location uri 開頭對url路徑進行字首匹配,並且在正則之前。location pattern 開頭表示區分大小寫的正則匹配 location pattern 開頭表示不區分大小寫的正則匹配 location uri...