24h購物| | PChome| 登入
2023-04-17 05:49:43| 人氣15| 回應0 | 上一篇 | 下一篇

Linux 虛擬主機上處置HTTP緊縮之gzip、defla

推薦 0 收藏 0 轉貼0 訂閱站台

web gzip 測試網站

1、什麼是gzip         

        gzip是一種數據格局,默認且今朝僅利用deflate算法緊縮data部分;

網站架設

        Gzip是一種風行的文件緊縮算法,目下當今的利用十分普遍,特別是在Linux平台。當利用Gzip緊縮到一個純文本文件時,效果長短常明明的,大約可以減少70%以上的文件巨細。這取決於文件​​中的內容。

      利用Apache中的Gzip模塊,我們可使用Gzip緊縮算法來對Apache服務器發布的網頁內容進行壓縮後再傳輸到客戶端瀏覽器。網站架設如許顛末壓縮後現實上下降了收集傳輸的字節數,最顯明的益處就是可以加快網頁加載的速度。網站架設

      網頁加載速度加速的益處不言而喻,除節約流量,改良用戶的瀏覽體驗外,另外一個潛在的好處是Gzip與搜索引擎的抓取東西有著更好的關係。例如Google就能夠通過直接讀取gzip文件來比通俗手工抓取更快地檢索網頁。在Google網站經管員東西(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作為Sitemap被提交的。

      而這些好處其實不僅僅限於靜態內容,PHP動態頁面和其他動態生成的內容都可以經由過程利用Apache緊縮模塊緊縮,加上其他的性能調劑機制和響應的服務器端緩存規則,這可以大大提高網站的機能。是以,對於佈置在Linux辦事器上的PHP程序,在辦事器撐持的情形下,我們建議你開啟利用Gzip Web緊縮。

 

PS:詳情參考:http://baike.baidu.com/item/gzip?fr=aladdin


2、什麼是deflate

        DEFLATE是同時利用了LZ77算法與哈夫曼編碼(Huffman Coding)的一個無損數據壓縮算法。

        它最初是由Phil Katz為他的PKZIP歸檔工具第二版所界說的,後來界說在RFC 1951規範中。

        人們遍及認為DEFLATE不受任何專利所製約,而且在LZW(GIF文件花式利用)相關的專利失效之前,這類花式除了在ZIP文件格局中獲得利用之外也在gzip緊縮文件和PNG圖像文件中獲得了應用。

        DEFLATE壓縮與解壓的源代碼可以在自由、通用的壓縮庫zlib上找到。

        更高壓縮率的DEFLATE是7-zip所實現的。AdvanceCOMP也利用這種實現,它可以對gzip、PNG、MNG和ZIP文件進行壓縮從而獲得比zlib更小的文件巨細。在Ken Silverman的KZIP與PNGOUT中利用了一種更加高效同時要求更多用戶輸入的DEFLATE法式。

        deflate是一種緊縮算法,是huffman編碼的一種增強。

        deflate與gzip解壓的代碼幾近溝通,可以合成一塊代碼。


3、web辦事器處置懲罰http緊縮的過程

    1. Web辦事器領受到瀏覽器的HTTP要求後,檢查瀏覽器是不是支撐HTTP緊縮(Accept-Encoding 信息);

    2. 若是瀏覽器撐持HTTP緊縮,Web服務器查抄要求文件的後綴名;

    3. 若是要求文件是HTML、CSS等靜態文件,Web辦事器到緊縮緩衝目次中檢查是不是已存在請求文件的最新緊縮文件;

    4. 假如請求文件的緊縮文件不存在,Web辦事器向瀏覽器返回未緊縮的要求文件,並在壓縮緩衝目錄中寄存要求文件的緊縮文件;

    5. 如果請求文件的最新壓縮文件已存在,則直接返回請求文件的緊縮文件;

    6. 若是請求文件是動態文件,Web服務器動態壓縮內容並返回瀏覽器,緊縮內容不寄存到緊縮緩存目次中。

下面是兩個演示圖:

未利用Gzip:

1.png
 

開啟利用Gzip後:

 

2.png

 
四、gzip與deflate區分

        deflate利用inflateInit(),而gzip利用inflateInit2()進行初始化,比inflateInit()多一個參數: -MAX_WBITS,示意處置raw deflate數據。因為gzip數據中的zlib緊縮數據塊沒有zlib header的兩個字節。利用inflateInit2時要求zlib庫忽略zlib header。在zlib手冊中要求windowBits為8..15,然則現實上其它局限的數據有特殊作用,見zlib.h中的註釋,如負數透露表現raw deflate。        

        Apache的deflate變種可能也沒有zlib header,需要添加假頭後處置懲罰。即MS的錯誤deflate (raw deflate).zlib頭第1字節一般是0x78, 第2字節與第一字節合起來的雙字節應能被31整除,詳見rfc1950。例如Firefox的zlib假頭為0x7801,python zlib.compress()成效頭部為0x789c。        

        deflate 是最根本的算法,gzip 在deflate 的raw data 前增添了10 個字節的gzheader,尾部添加了8 個字節的校驗字節(可選crc32 和adler32) 和長度標識字節。

        安裝它們的Apache Web服務器版本的差別。Apache 1.x系列沒有內建網頁緊縮手藝,所以才去用額外的第三方mod_gzip 模塊來履行壓縮。而Apache 2.x官方在開辟的時刻,就把網頁緊縮斟酌進去,內建了mod_deflate 這個模塊,用以代替mod_gzip。雖然二者都是使用的Gzip緊縮算法,它們的運作道理是類似的。     

 

        緊縮質量。mod_deflate 壓縮速度略快而mod_gzip 的緊縮比略高。一般默認情形下,mod_gzip 會比mod_deflate 多出4%~6%的緊縮量。

        對辦事器資本的佔用。一般來講mod_gzip對辦事器CPU的佔用要高一些。mod_deflate是專門為確保辦事器的性能而利用的一個緊縮模塊,mod_deflate需要較少的資本來壓縮文件。這意味著在高流量的辦事器,利用mod_deflate可能會比mod_gzip加載速度更快。即在辦事器機能足夠的情況下,利用mod_gzip,固然會花費辦事器機能,可是值得(緊縮更快更好);在辦事器性能不足的環境下,利用mod_deflate  確保機能。

 

        從Apache 2.0.45入手下手,mod_deflate 可以使用DeflateCompressionLevel 指令來設置緊縮級別。該指令的值可為1(壓縮速度最快,最低的緊縮質量)至9(最慢的緊縮速度,緊縮率最高)之間的整數,其默許值為6(緊縮速度和緊縮質量較為均衡的值)。這個簡單的轉變更是使得mod_deflate 可以輕鬆媲美mod_gzip 的緊縮。


五、開啟mod_gzip、mod_deflate

        Apache上操縱Gzip壓縮算法進行緊縮的模塊有兩種:mod_gzip 和mod_deflate。要利用Gzip Web緊縮,請首先肯定你的辦事器開啟了對這兩個組件之一的撐持。在Linux辦事器上,而今已有愈來愈多的空間商開放了對它們的支持,有的乃至是同時支撐這兩個模塊的。例如今朝Godaddy、Bluehost及DreamHosts等空間商的服務器都已同時撐持mod_gzip 和mod_deflate。        

 

        通過查看HTTP頭,我們可以快速判定利用的客戶端瀏覽器是不是支撐接管gzip壓縮。若發送的HTTP頭中出現以下信息,則講明你的瀏覽器撐持接管響應的gzip壓縮:

    Accept-Encoding: gzip 支持mod_gzip    Accept-Encoding: deflate 支撐mod_deflate     Accept-Encoding: gzip,deflate 同时支持mod_gzip 和mod_deflate

        mod_deflate 是apache自帶的模塊,當然是在apache 2後撐持的,之前1的時候是mod_gzip,啟用mod_deflate可以很好的為節約網頁巨細,只不過是佔用辦事器的資源和內存.用戶看到頁面的速度會大大加速。在apache2.0以上(包括apache2.0)的版中gzip壓縮使用的是mod_deflate模塊

1.查看apache的安裝模式
apachectl -l

發現mod_so.c,ok可以動態加模塊,不用重新編譯。

2.安裝mod_deflate
找到原本的apache安裝包安裝mod_deflate
cd httpd-2.0.59/modules/filters
/usr/local/apache2/bin/apxs -i -c -a mod_deflate.c

PS:apxs號令參數說明:
        -i此選項透露表現需要執行安裝操作,以安裝一個或多個動態同享對像到辦事器的modules目次中。
        -a此選項主動增加一個LoadModule行到httpd.conf文件中,以激活此模塊,或,假如此行已經存在,則啟用之。
        -A與-a選項近似,然則它增加的LoadModule饬令有一個井號前綴(#),即此模塊已準備停當但還沒有啟用。
        -c此選項暗示需要履行編譯操作。它首先會編譯C源程序(.c)files為對應的方針代碼文件(.o),然後毗連這些目標代碼和files中其餘的目標代碼文件(.o和.a),以生成動態同享對象dsofile 。假如沒有指定-o選項,則此輸出文件名由files中的第一個文件名推斷獲得,也就是默許為mod_name.so 。

 

3、修改Apache的http.conf文件,去除mod_deflate.so前面的註釋

在您的主機下建立下列論述:

  1. <IfModule mod_deflate.c>
  2.   AddOutputFilterByType DEFLATE text/html
  3.   AddOutputFilterByType DEFLATE text/css
  4.   AddOutputFilterByType DEFLATE text/javascript
  5.   AddOutputFilterByType DEFLATE text/xml
  6.   AddOutputFilterByType DEFLATE text/plain
  7.   AddOutputFilterByType DEFLATE image/x-icon
  8.   AddOutputFilterByType DEFLATE image/svg+xml
  9.   AddOutputFilterByType DEFLATE application/rss+xml
  10.   AddOutputFilterByType DEFLATE application/javascript
  11.   AddOutputFilterByType DEFLATE application/x-javascript
  12.   AddOutputFilterByType DEFLATE application/xml
  13.   AddOutputFilterByType DEFLATE application/xhtml+xml
  14.   AddOutputFilterByType DEFLATE application/x-font
  15.   AddOutputFilterByType DEFLATE application/x-font-truetype
  16.   AddOutputFilterByType DEFLATE application/x-font-ttf
  17.   AddOutputFilterByType DEFLATE application/x-font-otf
  18.   AddOutputFilterByType DEFLATE application/x-font-opentype
  19.   AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  20.   AddOutputFilterByType DEFLATE font/ttf
  21.   AddOutputFilterByType DEFLATE font/otf
  22.   AddOutputFilterByType DEFLATE font/opentype
  23.  
  24. # For Olders Browsers Which Can't Handle Compression
  25.   BrowserMatch ^Mozilla/4 gzip-only-text/html
  26.   BrowserMatch ^Mozilla/4\.0[678] no-gzip
  27.   BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  28. </IfModule>
複製代碼

或是在.htaccess檔案成立論述
  1. #GZIP压缩模块設置裝備擺設<ifmodule mod_deflate.c>
  2. #启用对特定MIME类型内容的压缩
  3. SetOutputFilter DEFLATESetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|exe|t?gz|zip|bz2|sit|rar|pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary #设置不对压缩的文件AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-httpd-php application/x-javascript #设置对压缩的文件</ifmodule>
複製代碼

如要增加檔案刻日加入代碼
  1. <IfModule mod_expires.c>
  2.     ExpiresActive on
  3.     ExpiresByType image/jpg "access plus 1 month"
  4.     ExpiresByType image/jpeg "access plus 1 month"
  5.     ExpiresByType image/gif "access plus 1 month"
  6.     ExpiresByType image/png "access plus 1 month"
  7.     ExpiresByType text/javascript "access plus 1 month"
  8.     ExpiresByType application/javascript "access plus 1 month"
  9.     ExpiresByType text/css "access plus 1 month"
  10. </IfModule>
複製代碼



5、對指定的文件配置緩存的保存時候,去除mod_headers.so模塊前面的註釋
Apache配置文件路徑是:/usr/local/apache/conf/httpd.conf
 
打開此文件查找以下兩行代碼:
  1. LoadModule deflate_module modules/mod_deflate.so
  2. LoadModule headers_module modules/mod_headers.so
複製代碼
前面沒有#符號即為正常的,若是有#符號則示意被註釋掉了,刪除前面的#符號即可。
在Apache 設置裝備擺設文件/usr/local/apache/conf/httpd.conf 的最後添加:
  1. <IfModule deflate_module>
  2. SetOutputFilter DEFLATE
  3. SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
  4. SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
  5. SetEnvIfNoCase Request_URI .(?:pdf|doc|avi|mov|mp3|rm)$ no-gzip dont-vary
  6. AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
  7. AddOutputFilterByType DEFLATE application/x-javascript
  8. </IfModule>
複製代碼
註解:
IfModule deflate_module是判定若是deflate_module模塊加載的話,執行里面的設置裝備擺設。
SetOutputFilter DEFLATE是設置輸出為deflate緊縮算法。
SetEnvIfNoCase Request_URI是解除一些常見的圖片,影音,文檔等類型的後綴,不緊縮。
AddOutputFilterByType DEFLATE是對常見的文本類型,如html,txt,xml,css,js做緊縮處置。網站架設
6、在根目錄中新建.htaccess文件,定制緊縮劃定規矩
 
  1. #文件缓存时间設置裝備擺設
  2. <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css)[        DISCUZ_CODE_2        ]quot;>
  3. Header set Cache-Control "max-age=2592000"
  4. </FilesMatch>
複製代碼

裡面的文件MIME類型可以憑據自己情況添加,至於PDF 、圖片、音樂文檔之類的這些自己都已經高度緊縮格式,反複緊縮的作用不大,反而可能會因為增加CPU的處置懲罰時候及瀏覽器的襯著問題而降低機能。所以就沒需要再通過Gzip壓縮。經由過程以上設置後再查看返回的HTTP頭,泛起以下信息則評釋返回的數據已過壓縮。即網站法式所配置的Gzip緊縮已生效。

Content-Encoding: gzip
注:不管使用mod_gzip 仍是mod_deflate,此處返回的信息都一樣。因為它們都是實現的gzip緊縮體例。




碰到的問題和解決:

1:apach2 安裝mod_deflate後restart,直接

load /opt/apache/modules/mod_deflate.so into server: /opt/apache/modules/mod_deflate.so: undefined symbol: deflate 異常的疾苦

什麼ldd mod_deflate.so後再export LIB_LIBRARY_PATH呀,都試了N次,google也go了N天

終於在google上go出來一篇文章,終於解決,方式以下: vi /usr/local/apache2/bin/apr-config 點竄LDFLAGS=" " 為LDFLAGS="-lz" 然後再apxs -ica mod_deflate.c 就OK了.

2:apach2安裝mod_deflate後restart,直接

module deflate_module is built-in and can't be loaded ...

這說明該模塊已安裝,沒必要再LoadModule deflate_module啟用它。

只需做<ifmodule mod_deflate.c>設置裝備擺設


參考文章
https://my.oschina.net/rasine/blog/343769


本文引用自:

台長: garciaok3
人氣(15) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 美食情報(食記、食譜、飲品) | 個人分類: NetYea |
此分類下一篇:openvino 若何run demo applicatio
此分類上一篇:jQuery分類過濾和排序佈局插件-Isotope(瀑布流網

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文