如何對Apache做Web壓縮
目前很多企業都在網絡上開展業務,處理的信息容量很大,有時不得不需要進行Web壓縮。我給大家提供一個方案,不改變頁面風格,但是減小Web瀏覽的傳輸數據量。
我的Web服務器是Apache,采用的壓縮工具是免費軟件mod_gzip,通過流量測試軟件BWMeter來證實壓縮比例。用mod_gzip壓縮純文本內容平均可壓縮至原大小的40%以下,從而可節約60%以上的數據傳輸。雖然數據壓縮會導致Web服務器的CPU占用率略微上升,但是可以節約大量網絡I/O,提升用戶瀏覽速度。我將一個大小為8KB的HTML文本從未經過壓縮的10.4KB流量(如圖1),壓縮變成了5.9KB的流量(如圖2)。
mod_gzip的工作原理
mod_gzip的工作原理是,當客戶端請求瀏覽某網頁后,Apache服務器將所請求的網頁文件進行壓縮,具體壓縮是利用標準的zlib的壓縮。服務器將壓縮的文件下發給客戶端瀏覽器,由客戶端的瀏覽器負責解壓縮并瀏覽,所以解壓效果和用戶的瀏覽器有一定關系。經過測試,它在IE 4.0到IE 6.0上,以及Netscape 4.5到Netscape 6.0上都運行得很好。
mod_gzip的安裝
1.下載源程序
可以從http://sourceforge.net/下載mod_gzip的源程序,使用源程序編譯生成Apache的模塊(Module)。
2.解壓源程序
tar -zxvf mod_gzip-2.0.40.tar.gz
3.編譯
進入源程序所在的目錄進行編譯,生成相應的動態鏈接庫。編譯需要指定參數APXS的相應位置:
make APXS=/apache/httpd/bin/apxs
將mod_zip安裝到Apache服務器中,其中也要指定APXS的具體位置:
make install APXS=/apache/httpd/bin/apxs
4.調用mod_gzip模塊
在Apache的配置文件httpd.conf中增加LoadModule參數,調用mod_gzip模塊。
LoadModule gzip_module modules/mod_gzip.so
5.測試
運行以下命令測試安裝是否成功:
/apache/bin/apachectl configtest
如果出現“Syntax OK”,則說明Apache中已經成功安裝上mod_gzip的壓縮模塊了。
Apache中關于mod_gzip的配置
修改Apache的配置文件httpd.conf:
1.增加mod_gzip模塊的調用
LoadModule gzip_module modules/mod_gzip.so
2.開啟壓縮功能
mod_gzip_on Yes
3.設置壓縮文件的最小值
mod_gzip_minimum_file_size 1000
4.設定壓縮文件的最大值
mod_gzip_maximum_file_size 300000
5.設定壓縮文件的臨時目錄
mod_gzip_temp_dir /tmp/mod_gzip
6.設定是否保持壓縮的工作臨時文件
mod_gzip_keep_workfiles No
7.設定各種需要壓縮的文件及擴展名
mod_gzip_item_include file .htm$
mod_gzip_item_include file .html$
mod_gzip_item_include file .php$
mod_gzip_item_include file .php3$
mod_gzip_item_include mime text/.*
mod_gzip_item_include mime httpd/unix-directory
常見問題及解決方法
1.解決調用標準zlib問題
如果在編譯mod_gzip的時候沒有指定zlib類庫的具體位置,那么它默認路徑就是/usr/local/lib,當你的zlib不在這個目錄下面的時候,就會報如下錯誤提示:
Cannot load /httpd/modules/mod_gzip.so
into server/httpd/modules/mod_gzip.so:
undefined symbol: top_module (或者是deflate)
解決方法就是,在編譯mod_gzip的時候,編輯Makefile文件增加兩個參數,分別指向zlib的存放目錄:
INC=-I/usr/include
LIB=-lz -L/usr/lib
編輯ld.so.conf文件,在其中增加存放zlib標準類庫的具體目錄,然后運行ldconfig。
這樣更改以后,Apache就不會上述出現問題了。
2.Apache中jk2模塊有可能和mod_gzip沖突
這種現象會出現在Apache2、jk2及mod_gzip2.0.40配合的時候。最簡單的解決辦法是,改變應用環境的版本,使用Apache1.3、jk及mod_gzip1.3配合就會避免產生這種沖突。
3.實現對servlet的壓縮
我們在httpd.conf文件中增加相應的壓縮配置文件,就可以實現對servlet進行壓縮了。
mod_gzip_item_include handler jakarta-servlet
mod_gzip_item_include handler jakarta-servlet$
mod_gzip_item_include handler ^jakarta-servlet
mod_gzip_item_include handler ^jakarta-servlet$
mod_gzip_item_include handler ^^jakarta-servlet$
希望通過上述講解,讀者可以輕松地構造壓縮的Apache服務器,更好地利用網絡資源。
關鍵字:Apache、網絡、服務器
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解