匹配規則
概括
1. 空 普通匹配(遵循最大前綴匹配規則, 優先度比正則低) 2. = 精確(嚴格)匹配, 優先度最高,后續不再匹配正則 3. ^~ 非正則匹配(依然遵循最大前綴匹配規則),后續不再匹配正則 4. ~ 表示區分大小寫的正則匹配 5. ~* 表示不區分大小寫的正則匹配 6. / 通用匹配,任何請求都會匹配到(本質上等同於語法 空)
常用正則符
. : 匹配除換行符外的任意字符 ? : 重復0次或1次 : 重復1次或更多次 : 重復0次或更多次 d :匹配數字 ^ : 匹配字符串的開始 $ : 匹配字符串的結束 {n} : 重復n次 {n,} : 重復n次或更多次 [c] : 匹配單個字符,如此處的字符 c [a-z] : 匹配a-z小寫字母的任意一個 (a|b|c):匹配a或b或c</span>
案例
=
location /aaa 普通匹配
http:192.1680.0.1/aaa 匹配
^~
location ^~ /aaa 普通匹配
http:192.1680.0.1/aaa 匹配
~
location ^ /(.*js)$ 正則匹配 //http:192.1680.0.1/aaa.js 匹配 //http:192.1680.0.1/bbb.js 匹配
//http:192.1680.0.1/BBB.js 不匹配
~*
location ^ /(.*js)$ 正則匹配 //http:192.1680.0.1/aaa.js 匹配 //http:192.1680.0.1/bbb.js 匹配 //http:192.1680.0.1/BBB.js 匹配
//http:192.1680.0.1/BB.css 不匹配
/
location / 正則匹配 //http:192.1680.0.1/aaa.js 匹配 //http:192.1680.0.1/bbb.js 匹配 //http:192.1680.0.1/BBB.js 匹配 //http:192.1680.0.1/BB.css 匹配
gzip壓縮
nginx開啟gzip壓縮有兩種方式
1.動態壓縮,在響應請求前,將原有資源壓縮成gz文件放回給客戶端,缺點是每次請求都會進行壓縮,會消耗gpu性能
2.靜態壓縮,在服務器提前准備好壓縮文件,在客戶端請求時,判斷是否有對應的gz文件,有的話則響應gz文件,沒有則響應原文件。
3.圖片、視頻、pdf類,不應使用動態壓縮,原因是,文件的壓縮應當在上傳致服務器之前進行壓縮處理,而壓縮處理后的文件在經過gzip壓縮。並不能有效的壓縮其體積,反而會白白損耗cpu的性能
常用nginx gzip配置
//...http塊
gzip on; #決定是否開啟gzip模塊,on表示開啟,off表示關閉; gzip_min_length 1k; #設置允許壓縮的頁面最小字節(從header頭的Content-Length中獲取) ,當返回內容大於此值時才會使用gzip進行壓縮,以K為單位,當值為0時,所有頁面都進行壓縮。建議大於1k gzip_buffers 4 16k; #設置gzip申請內存的大小,其作用是按塊大小的倍數申請內存空間,param2:int(k) 后面單位是k。這里設置以16k為單位,按照原始數據大小以16k為單位的4倍申請內存 gzip_http_version 1.1; #識別http協議的版本,早起瀏覽器可能不支持gzip自解壓,用戶會看到亂碼 gzip_comp_level 2; #設置gzip壓縮等級,等級越底壓縮速度越快文件壓縮比越小,反之速度越慢文件壓縮比越大;等級1-9,最小的壓縮最快 但是消耗cpu gzip_types text/plain application/x-javascript text/css application/xml; #設置需要壓縮的MIME類型,非設置值不進行壓縮,即匹配壓縮類型 gzip_vary on; #啟用應答頭"Vary: Accept-Encoding" gzip_proxied off; nginx做為反向代理時啟用,off(關閉所有代理結果的數據的壓縮),expired(啟用壓縮,如果header頭中包括"Expires"頭信息),no-cache(啟用壓縮,header頭中包含"Cache-Control:no-cache"), no-store(啟用壓縮,header頭中包含"Cache-Control:no-store"),private(啟用壓縮,header頭中包含"Cache-Control:private"),no_last_modefied(啟用壓縮,header頭中不包含 "Last-Modified"),no_etag(啟用壓縮,如果header頭中不包含"Etag"頭信息),auth(啟用壓縮,如果header頭中包含"Authorization"頭信息) gzip_disable msie6;
開啟動態壓縮
http{ ... #修改配置為 gzip on; #開啟gzip壓縮功能 gzip_min_length 10k; #設置允許壓縮的頁面最小字節數; 這里表示如果文件小於10個字節,就不用壓縮,因為沒有意義,本來就很小. gzip_buffers 4 16k; #設置壓縮緩沖區大小,此處設置為4個16K內存作為壓縮結果流緩存 gzip_http_version 1.1; #壓縮版本 gzip_comp_level 2; #設置壓縮比率,最小為1,處理速度快,傳輸速度慢;9為最大壓縮比,處理速度慢,傳輸速度快; 這里表示壓縮級別,可以是0到9中的任一個,級別越高,壓縮就越小,節省了帶寬資源,但同時也消耗CPU資源,所以一般折中為6 gzip types text/css text/xml application/javascript; #制定壓縮的類型,線上配置時盡可能配置多的壓縮類型! gzip_disable "MSIE [1-6]\."; #配置禁用gzip條件,支持正則。此處表示ie6及以下不啟用gzip(因為ie低版本不支持) gzip vary on; #選擇支持vary header;改選項可以讓前端的緩存服務器緩存經過gzip壓縮的頁面; 這個可以不寫,表示在傳送數據時,給客戶端說明我使用了gzip壓縮 ... }
開啟靜態壓縮
安裝靜態壓縮模塊
nginx包中,已經包含靜態壓縮需要使用http_gzip_static_module這個模塊,我們只需要編譯安裝即可,模塊 ngx_http_gzip_static_module 允許發送以“.gz”作為文件擴展名的預壓縮文件,以替代發送普通文件。需要指定 --with-http_gzip_static_module編譯選項:請注意,如果已經啟動了nginx,那么需要先停止nginx,再進行編譯
./configure --with-http_gzip_static_module #這里可以配合其他修飾符
make
make install
開啟配置
location ~* \.(json)$ { gzip_static on; //開啟靜態壓縮 gzip_proxied expired no-cache no-store private auth; }
#gzip_proxied #Nginx做為反向代理的時候啟用: #off – 關閉所有的代理結果數據壓縮 #expired – 如果header中包含”Expires”頭信息,啟用壓縮 #no-cache – 如果header中包含”Cache-Control:no-cache”頭信息,啟用壓縮 #no-store – 如果header中包含”Cache-Control:no-store”頭信息,啟用壓縮 #private – 如果header中包含”Cache-Control:private”頭信息,啟用壓縮 #no_last_modified – 啟用壓縮,如果header中包含”Last_Modified”頭信息,啟用壓縮 #no_etag – 啟用壓縮,如果header中包含“ETag”頭信息,啟用壓縮 #auth – 啟用壓縮,如果header中包含“Authorization”頭信息,啟用壓縮 #any – 無條件壓縮所有結果數據
值得一提的是
a) 文件可以使用 gzip 命令來進行壓縮,或任何其他兼容的命令。建議壓縮文件和原始文件的修改日期和時間保持一致。 b) gzip_static配置優先級高於gzip。 c) 開啟nginx_static后,對於任何文件都會先查找是否有對應的gz文件。 d) gzip_types設置對gzip_static無效。 e) gzip static默認適用HTTP 1.1。