nginx 【匹配規則】【開啟gzip壓縮】


匹配規則

  概括

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。

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM