nginx能夠在配置文件中對某些內置變量進行判斷,從而實現某些功能。例如:防止rewrite、盜鏈、對靜態資源設置緩存以及瀏覽器限制等等。因爲nginx配置中有if指令,可是沒有對應else指令,因此判斷要分爲匹配和不匹配。html
字符串表達式支持正則表達式,能設定大小寫是否敏感。所以共有四個操做符,java
以下:nginx
~ 區分大小寫(大小寫敏感)匹配成功
~* 不區分大小寫匹配成功
!~ 區分大小寫匹配失敗
!~* 不區分大小寫匹配失敗正則表達式
1: 限制某些類型的客戶端的訪問
if指令
全部的Nginx內置變量均可以經過if指令和正則表達式來進行匹配,而且根據匹配結果進行一些操
瀏覽器
代碼以下 | 複製代碼 |
location / { |
#限制IE訪問spa
若是把MSIE改爲 Mozilla 就基本上把IE和firefox這樣pc瀏覽器限制了
2和3主要是針對盜鏈作處理
2:針對不一樣的文件類型.net
可能這個指令是咱們平時使用正則匹配用的最多的指令:firefox
代碼以下 | 複製代碼 |
|
3:針對不一樣的目錄
代碼以下 | 複製代碼 |
location /img/ { |
1.^~ 標識符後面跟一個字符串。
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,若是沒有,則使用第二條匹配的結果。