Apache配置gzip壓縮(HTTP壓縮)功能

先來了解一下GZIP,gzip是GNU zip的縮寫,它是一個GNU自由軟件的文件壓縮程序,也經常用來表示gzip這種文件格式。軟件的作者是Jean-loup Gailly和Mark Adler。1992年10月31日第一次公開發布,版本號是0.1,目前的穩定版本是1.2.4。

gzip可以級大的加速網站.有時壓縮比率高到80%,近來測試了一下,最少都有40%以上,還是相當不錯的.在Apache2之後的版本,模塊名不叫gzip,而叫mod_deflate

1、Apache啓用gzip

如果要開啓gzip的話,一定要打開下面二個模塊.
LoadModule headers_module modules/mod_headers.so
LoadModule deflate_module modules/mod_deflate.so

設置壓縮比率,取值範圍在 1(最低) 到 9(最高)之間,不建議設置太高,雖然有很高的壓縮率,但是佔用更多的CPU資源.

<IfModule mod_deflate.c>
DeflateCompressionLevel 3
AddOutputFilter DEFLATE html xml php js css
<Location />
    SetOutputFilter DEFLATE    #必須的,就像一個開關一樣,告訴apache對傳輸到瀏覽器的內容進行壓縮

    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #設置不對後綴gif,jpg,jpeg,png的圖片文件進行壓縮
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是設置不對exe,tgz,gz。。。的文件進行壓縮
    SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary

    AddOutputFilterByType DEFLATE text/* #設置對文件是文本的內容進行壓縮,例如text/html  text/css  text/plain等
    AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #這段代碼你只需要瞭解application/javascript application/x-javascript這段就可以了,這段的意思是對javascript文件進行壓縮
    AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #這段是告訴apache對php類型的文件進行壓縮

    BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些問題,所以只壓縮文件類型是text/html的
    BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的問題,所以不開啓壓縮
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # IE瀏覽器會僞裝成 Netscape ,但是事實上它沒有問題
    Header append Vary User-Agent env=!dont-vary #對代理的設置
</Location>
</IfModule>

到此配置完畢,重啓apache。


下面二個測試網站

http://www.whatsmyip.org/mod_gzip_test/

http://www.gidnetwork.com/tools/gzip-test.php

測試數據對css
Original Size: 44 KB
Gzipped Size: 10 KB
Data Savings: 77.27%

測試數據js
Original Size: 6 KB
Gzipped Size: 2 KB
Data Savings: 66.67%

測試數據php
Original Size: 62 KB
Gzipped Size: 15 KB
Data Savings: 75.81%

上面只是隨機拿的幾個數據,看的出來,使用了gzip壓縮後文件小多了.

-------------------------------------------------------------------------------------------------------

另外講一下,有關squid對gzip的處理
在squid中,對同一個URL只保留一份緩存。對於如果不同browser(是否支持壓縮)如果頻繁交替訪問,例如:對某個cache住的目標,一個 http/1.0請求可能會導致squid強制更新其緩存。但接下來的另一個http/1.1請求又會導致squid再次更新緩存。這樣那squid緩存 數據就要頻繁更新,這就極大的降低了cache命中率。
不過還好,現實環境中不支持壓縮的browser畢竟是很少的情況,所以對於緩存命中率的降低很有限.

這個神通廣大的模塊就是mod_gzip. 它通過用和gzip一樣的壓縮算法對apache發出的頁面進行壓縮,可能的話可以把頁面壓縮成爲原來大小的十份之一。哪,如果10K的頁面只要傳1K這 不就是提速10倍嘛。當然一般網頁只可以達到3-6倍。那也很不錯。對吧。連google這樣一個大的網站都採用這個技術。你還不快跟上?

這樣一個好東東,來來來,我告訴你如何安裝:分3步,1、下載,2、修改配置,3、測試。

下載

到http://www.remotecommunications.com/apache/mod_gzip 下載mod_gzip.c 還有它的補丁。

安裝, 配置
把mod_gzip放到你的apache的源代碼目錄下,新建一個mod_gzip目錄如果需要補丁(針對1.3.17.la版) 還需運行:
patch mod_gizp.c
按你需要,在配置中選擇動態DSO或靜態編譯進apache系統。如何處理在README中講得很清楚,如-add-module=mod_gzip.c, make,make install等等。這裏不多講。

把下列配置加入httpd.conf尾部。

# MOD_GZIP configuration
mod_gzip_on Yes
mod_gzip_minimum_file_size 1002
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 60000
mod_gzip_item_include mime "application/x-httpd-php"
mod_gzip_item_include mime text/*
mod_gzip_item_include mime "httpd/unix-directory"
mod_gzip_dechunk Yes
mod_gzip_temp_dir "/tmp"
mod_gzip_keep_workfiles No
mod_gzip_item_include file ".php3$"
mod_gzip_item_include file ".txt$"
mod_gzip_item_include file ".html$"
mod_gzip_item_exclude file ".css$"
mod_gzip_item_exclude file ".js$"

在保存修改後運行
…/bin/apachectl configtest確保配置修改無誤。
然後用 apachectl restart 指令重起服務。

修改,測試

在宣佈做好了之前在測試一下是優秀程序員的習慣。爲了儘量不影響你的用戶的瀏覽,我們可以用把新的apache驅動在8080端口上或者用指令控制mod_gzip起作用的目錄,而不是一下子全用mod_gzip.
用法如下:

MOD_GZIP configuration

沒有問題後你就可以讓你的用戶很開心的發現’XX網站現在好快哦。’
Mod_gzip真的很神奇,100K的HTML大 文檔只要12K就可以傳到用戶端了。越先採用這個技術你的用戶對你的網站的高速度印象就越深。不過有所得必有所失,由於解壓是在客戶端進行的,效果和用戶 的瀏覽器有一定關係。

2、IIS啓用gzip

現代的瀏覽器IE6和Firefox都支持客戶端Gzip,也就是說,在服務器上的網頁,傳輸之前,先使用Gzip壓縮再傳輸給客戶端,客戶端接收之後由瀏覽器解壓顯示,這樣雖然稍微佔用了一些服務器和客戶端的CPU,但是換來的是更高的帶寬利用率。對於純文本來講,壓縮率是相當可觀的。如果每個用戶節約50%的帶寬,那麼你租用來的那點帶寬就可以服務多一倍的客戶了。

IIS6已經內建了Gzip壓縮的支持,可惜,沒有設置更好的管理界面。所以要打開這個選項,還要費些功夫。

首先,如果你需要壓縮靜態文件(HTML),需要在硬盤上建一個目錄,並給它“IUSR_機器名”這個用戶的寫權限。如果壓縮動態文件(PHP,asp,aspx)就不需要了,因爲它的頁面是每次都動態生成的,壓縮完就放棄。然後在IIS管理器中,“網站”上面右鍵-屬性,不是下面的某個站點,而是整個網站。進入“服務”標籤,選上啓用動態內容壓縮,靜態內容壓縮。

然後選中網站下面那個服務器擴展,新建一個服務器擴展。名字無所謂,下面的添加文件的路徑是:

c:/windows/system32/inetsrv/gzip.dll,然後啓用這個擴展。

這時候靜態內容是可以壓縮的,但是對於動態內容,aspx文件卻不在壓縮範圍內。因爲默認的可壓縮文件並沒有這個擴展名。而管理界面中你又找不到可以增加擴展名的地方,這時候只能去修改它的配置文件了。

在 c:/windows/system32/inetsrv/下面有個MetaBase.xml文件,可以用記事本打開,找到 IIsCompressionScheme,有三個相同名字的段,分別是deflate,gzip,Parameters,第三段不用管它,前兩段有基本相同的參數,在這兩段的參數HcScriptFileExtensions下面都加上一行aspx,如果你有其它的動態程序要壓縮,也加在這裏。 HcDynamicCompressionLevel改成9,(0-10,9是性價比最高的一個)。

1.首先備份 IIS 的配置文件,

複製 C:/Windows/system32/inetsrv/metabase.xml 到另外的備份文件夾中.

C:/Windows/system32/inetsrv/metabase.xml 是 IIS 的核心配置文件,該文件的完整性一但被破壞,IIS 將無法正常運行,嚴重到需要重新安裝系統.

2. 在開始菜單中啓動 Internet 信息服務(IIS)管理器,右鍵點擊“網站”屬性,打開“服務”選項卡,勾選“HTTP 壓縮”的兩個選項。“臨時目錄”和“臨時目錄最大容量”可根據需要自行設置。設置完成後點擊確定。

3. 右鍵點擊“網站”下方的 “Web服務擴展”,添加一個新的Web服務擴展,擴展名填寫爲“HTTP Compression”或其他,都可以。“要求的文件”添加:c:/windows/system32/inetsrv/gzip.dll ,並勾選“設置擴展狀態爲允許”,完成後點擊確定。

4.下面的步驟有些複雜,如果沒有確定的把握能理解,最好不要嘗試,右鍵點擊“Internet 信息服務的”“本地計算機”屬性,勾選“允許直接編輯配置數據庫”並確定。

5. 在開始菜單中運行 notepad C:/Windows/system32/inetsrv/metabase.xml ,打開metabase.xml 文件,請在任何改動前再次確認該文件已經備份。

6. 搜索並找到 metabase.xml 文件中的 <IIsCompressionScheme  片段中的 HcScriptFileExtensions,依照原有文件的格式添加你希 望進行 HTTP 壓縮的文件擴展名,靜態文件HcFileExtensions可添加 JS,CSS 等; 動態文件 HcScriptFileExtensions 可添加"ASPX"”ASMX”,如下:

<IIsCompressionScheme Location =”/LM/W3SVC/Filters/Compression/deflate”
HcCompressionDll=”%windir%/system32/inetsrv/gzip.dll”
HcCreateFlags=”0″
HcDoDynamicCompression=”TRUE”
HcDoOnDemandCompression=”TRUE”
HcDoStaticCompression=”FALSE”
HcDynamicCompressionLevel=”9″
HcFileExtensions=”htm
html
js
css
txt”
HcOnDemandCompLevel=”10″
HcPriority=”1″
HcScriptFileExtensions=”asp
aspx
asmx
dll
exe”
>
</IIsCompressionScheme>
<IIsCompressionScheme Location =”/LM/W3SVC/Filters/Compression/gzip”
HcCompressionDll=”%windir%/system32/inetsrv/gzip.dll”
HcCreateFlags=”1″
HcDoDynamicCompression=”TRUE”
HcDoOnDemandCompression=”TRUE”
HcDoStaticCompression=”TRUE”
HcDynamicCompressionLevel=”9″
HcFileExtensions=”htm
html
js
css
txt”
HcOnDemandCompLevel=”10″
HcPriority=”1″
HcScriptFileExtensions=”asp
aspx
asmx
dll
exe”
>
</IIsCompressionScheme>

注意“Compression/deflate”和“Compression/gzip”兩個片段都需要修改。動態壓縮等級,HcDynamicCompressionLevel 建議設置爲“9”

7. 保存並關閉 metabase.xml 文件。

8. 重新啓動 IIS 服務,運行“IISReset”或重新啓動 WWW 服務。

9. 其他:

如果你的服務器上某一個Web站點不希望啓用 IIS 壓縮,請運行以下腳本:

cscript. C:/Inetpub/AdminScripts/adsutil.vbs set w3svc/site#/root/DoStaticCompression False
cscript. C:/Inetpub/AdminScripts/adsutil.vbs set w3svc/site#/root/DoDynamicCompression False

如果想增加啓用 HTTP 壓縮的文件類型,請運行以下腳本:

“” 中爲文件擴展名,別忘了把原有的擴展名加上。

靜態文件壓縮:

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcFileExtensions “htm” “html” “txt” “doc” “ppt” “xls”

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcFileExtensions “htm” “html” “txt” “doc” “ppt” “xls”

動態文件壓縮:

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions “asp” “aspx” “asmx” “dll” “exe” “php”

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions “asp” “aspx” “asmx” “dll” “exe” “php”

將site#替換爲該 Web 站點的 ID。Web 站點的 ID 是什麼到“日誌記錄屬性”中看一下日誌記錄的“日誌文件名”前面的路徑就知道了。

運行以上腳本前務必備份,運行後再次執行“IISReset”使生效.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章