nginx 學習筆記--Nginx正則表達式之匹配操作符

nginx可以在配置文件中對連接進行判斷,已達到防止rewrite、盜鏈、對靜態資源設置緩存以及瀏覽器限制等目的:

字符串表達式支持正則表達式,能設定大小寫是否敏感。

1.~爲區分大小寫的匹配。
2.~*不區分大小寫的匹配(匹配firefox的正則同時匹配FireFox)。
3.!~和!~*意爲“不匹配的”。

1: 限制某些類型的客戶端的訪問
if指令
所有的Nginx內置變量都可以通過if指令和正則表達式來進行匹配

location / {
if ($http_user_agent ~ MSIE) {
return 503;
}
}

#限制IE訪問

如果把MSIE改成 Mozilla 就基本上把IE和firefox這樣pc瀏覽器限制了

針對防止盜鏈一般常用一下兩種方式:

1.針對不同的文件類型

location ~ .*.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
     if ($http_referer ~* jjf.com) {
     #rewrite ^/ http://www.jjf.com/403.html;
     return 403;
      }
}

2.針對不同的目錄

文件及目錄匹配

-f和!-f用來判斷是否存在文件

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

-e和!-e用來判斷是否存在文件或目錄

-x和!-x用來判斷文件是否可執行

例:

location = /

#匹配任何查詢,因爲所有請求都已 / 開頭。但是正則表達式規則和長的塊規則將被優先和查詢匹配

location ^~ /images/ {

# 匹配任何已/images/開頭的任何查詢並且停止搜索。任何正則表達式將不會被測試。

location ~* .(gif|jpg|jpeg)$ {

# 匹配任何已.gif、.jpg 或 .jpeg 結尾的請求

常用標示符詳解:

~ 區分大小寫匹配

~* 不區分大小寫匹配

!~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配

^ 以什麼開頭的匹配

$ 以什麼結尾的匹配

轉義字符。可以轉. * ?等

* 代表任意字符

注:^~ 標識符後面跟一個字符串。Nginx將在這個字符串匹配後停止進行正則表達式的匹配(location指令中正則表達式的匹配的結果優先使用),如:location ^~ /images/,你希望對/images/這個目錄進行一些特別的操作,如增加expires頭,防盜鏈等,但是你又想把除了這個目錄的圖片外的所有圖片只進行增加expires頭的操作,這個操作可能會用到另外一個location,例如:location ~* .(gif|jpg|jpeg)$,這樣,如果有請求/images/1.jpg,nginx如何決定去進行哪個location中的操作呢?結果取決於標識符^~,如果你這樣寫:location /images/,這樣nginx會將1.jpg匹配到location ~* .(gif|jpg|jpeg)$這個location中,這並不是你需要的結果,而增加了^~這個標識符後,它在匹配了/images/這個字符串後就停止搜索其它帶正則的location。

2.= 表示精確的查找地址,

如location = /它只會匹配uri爲/的請求,如果請求爲/index.html,將查找另外的location,而不會匹配這個,當然可以寫兩個location,location = /和location /,這樣/index.html將匹配到後者,如果你的站點對/的請求量較大,可以使用這個方法來加快請求的響應速度。


3.@ 表示爲一個location進行命名,即自定義一個location,這個location不能被外界所訪問,只能用於Nginx產生的子請求,主要爲error_page和try_files。
注意,這3個標識符後面不能跟正則表達式,雖然配置文件檢查會通過,而且沒有任何警告,但是他們並不會進行匹配。
綜上所述,location指令對於後面值的匹配順序爲:

1.標識符“=”的location會最先進行匹配,如果請求uri匹配這個location,將對請求使用這個location的配置。
2.進行字符串匹配,如果匹配到的location有^~這個標識符,匹配停止返回這個location的配置。
3.按照配置文件中定義的順序進行正則表達式匹配。最早匹配的location將返回裏面的配置。
4.如果正則表達式能夠匹配到請求的uri,將使用這個正則對應的location,如果沒有,則使用第二條匹配的結果。


發佈了14 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章