七、啟用壓縮子產品mod_deflate
網站随着使用者通路量的增加和内容量的增加,網站的帶寬會不斷的增加,随之就是網站成本的增加。并且當内容量增大的時候,用戶端如果帶寬小,就會影響使用者的體驗。是以從這兩方面考慮,網站的某些内容必須經過壓縮之後再傳給使用者,然後在使用者用戶端進行解壓,來實作雙方共赢的效果。
apache的壓縮要用到mod_deflate子產品,該子產品提供了DEFLATE輸出過濾器,允許伺服器在将輸出内容發送到用戶端以前進行壓縮,以節約帶寬。它的核心思想就是把檔案先在伺服器進行壓縮,然後再進行傳輸,這樣可以顯著減少檔案傳輸的大小。當傳輸完畢後,用戶端遊覽器會重新對壓縮過的内容進行解壓縮。如果沒特殊情況的話,是以的文本内容都應該能被gzip壓縮,例如:html(php),js,css,xml,txt等。特殊情況就是像一些首頁上有很多廣告投放的js代碼,由于需要每次加載進而進行來訪資訊統計,是以這些廣告代碼擁有者網站的js不會經過gzip壓縮,
mod_deflate子產品,在我們前篇部署的時候已經編譯安裝進去了。
那麼如果沒有安裝,如何安裝呢?并且如果不知道到是否安裝了,如何檢視呢?
1、mod_deflate子產品檢查及安裝
由于apache2.2.x和2.4.x這兩個版本在檢查mod_deflate子產品是否安裝方法方法是不同的。最後,我無奈做了很多測試,下面建議大家這樣來檢查。
1.
[root@c64-web /]
# /usr/local/apache/bin/apachectl -M | grep deflate
2.
deflate_module (static)
#此種結果為編譯安裝時裝的
3.
[root@c64-web /]
# /usr/local/apache/bin/apachectl -M | grep deflate
4.
deflate_module (shared)
#此種結果為DSO方式安裝的
安裝了的話,就可以直接進行壓縮配置了,如果沒有安裝,下面為安裝方法
a)編譯時安裝方法
編譯的時候跟上--enable-deflate即可實作安裝
b)DSO方式安裝
1.
[root@c64-web /]
# cd /server/tools/httpd-2.4.6/modules/filters/ #切到apache源碼包mod_deflate所在的目錄下
2.
[root@c64-web filters]
# /usr/local/apache/bin/apxs -c -i -a mod_deflate.c #以dso的方式編譯安裝到apache中
3.
[root@c64-web filters]
# ll /usr/local/apache/modules/mod_deflate.so #檢查mod_deflate是否安裝,成功安裝這裡會顯示出該檔案
4.
-rwxr-xr-x 1 root root 76697 11月 5 07:50 /usr/
local
/apache/modules/mod_deflate.so
擴充:使用DSO方式安裝,apxs後跟的參數詳解
1.
-c 此選項表明需要執行編譯操作。它首先會編譯c源程式(.c)files為對應的目标代碼檔案(.c),然後連接配接這些目标代碼和files中其餘的目标代碼檔案(.c和.a),以生成動态共享對象dsofile。如果沒有指定-s選項,則此輸出檔案名由files中的第一個檔案名推測得出,也就是預設mod_name.so。
2.
-i 此選項表示需要執行安裝操作,以安裝一個或多個動态共享對象到伺服器的modules目錄。
3.
-a 此選項自動增加一個LoadModule行到httpd.conf檔案中,以激活此子產品,或者,如果此行已經存在,則啟用之。
4.
壓縮子產品配置
2、配置壓縮參數
注意如果我們是編譯安裝時已經編譯進去的,此時我們需要先将httpd.conf主配置檔案中
1.
LoadModule deflate_module modules/mod_deflate.so
此行解鎖後再進行下面操作,不然下面的操作會報錯。
我們需要在虛拟機的中添加如下配置即可實作壓縮*:80>
01.
<< code="">
ifmodule
mod_deflate.c>
02.
DeflateCompressionLevel 9 #壓縮等級,越大效率越高,消耗CPU也越高
03.
SetOutputFilter DEFLATE #啟用壓縮
04.
AddOutputFilterByType DEFLATE text/html text/plain text/xml #僅壓縮限制特定的MIME類型檔案:
05.
AddOutputFilterByType DEFLATE application/javascript
06.
AddOutputFilterByType DEFLATE text/css
07.
AddOutputFilterByType DEFLATE p_w_picpath/gif p_w_picpath/png p_w_picpath/jpe p_w_picpath/swf p_w_picpath/jpeg p_w_picpath/bmp
08.
#DeflateFilterNote ratio #在日志中放置壓縮率标記,下面是記錄日志的,這個功能一般不用
09.
#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
10.
#CustmLog logs/deflate_log.log deflate
11.
ifmodule
>
下面是朋友公司的另外一種壓縮配置,有興趣的朋友們也可以操作操作。
01.
<< code="">
ifmodule
mod_deflate.c>
02.
DeflateCompressionLevel 9
03.
SetOutputFilter DEFLATE
04.
DeflateFilterNote Input instream #聲明輸入流的byte數量
05.
DeflateFilterNote Output outstream #聲明輸出流的byte數量
06.
DeflateFilterNote Ratio ratio #聲明壓縮的百分比
07.
#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate #聲明日志類型
08.
#CustomLog logs/deflate_log.log deflate #聲明日志類型
09.
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript #僅壓縮限制特定的MIME類型檔案
10.
ifmodule
>
執行上面的添加後,我們對apache進行優雅重新開機
八、mod_expires緩存功能
雖然我們上面通過mod_deflate子產品啟用了壓縮,從很大程度上節約了企業帶寬,降低了企業成本。可是由于現在越來越多的圖檔、腳本、css和flash被嵌入到頁面中,當客戶通路站點勢必會做很多次的http請求,是以我們還可以通過mod_expires緩存子產品來設定ExpiresHeader來緩存這些檔案。Expires是通過header封包來指定特定類型的檔案在遊覽器中的緩存時間的。平時,我們大多數的圖檔,flash在釋出之後都是不需要經常修改的,是以做了緩存之後,遊覽器第一次從伺服器下載下傳之後,就不需要再從伺服器下載下傳這些檔案而是直接從遊覽器緩存中讀取了。這樣客戶通路頁面的速度就會大大加快,企業的帶寬壓力也得到了緩解。
1、mod_expires子產品檢查及安裝
檢查mod_expires子產品是否安裝的方法如下:
1.
[root@c64-web /]
# /usr/local/apache/bin/apachectl -M | grep deflate
2.
expires_module (static)
#此種結果為編譯安裝時裝的
3.
[root@c64-web /]
# /usr/local/apache/bin/apachectl -M | grep deflate
4.
expires_module (shared)
#此種結果為DSO方式安裝的
a)編譯方式安裝
編譯的時候跟上--enable-expires即可實作安裝
1.
[root@c64-web /]
# cd /server/tools/httpd-2.4.6/modules/filters/ #切到apache源碼包mod_expires所在的目錄下
2.
[root@c64-web filters]
# /usr/local/apache/bin/apxs -c -i -a mod_expires.c #以dso的方式編譯安裝到apache中
3.
[root@c64-web filters]
# ll /usr/local/apache/modules/mod_expires.so #檢查mod_deflate是否安裝,成功安裝這裡會顯示出該檔案
4.
-rwxr-xr-x 1 root root 37439 11月 5 02:02 /usr/
local
/apache/modules/mod_expires.so
2、配置緩存參數
1.
LoadModule expires_module modules/mod_expires.so
此行解鎖後再進行下面操作,不然會報錯。
緩存的用法有3種,分别問對全局,對目錄,對虛拟主機。
a)對全局
對全局的配置就是在apache主配置檔案httpd.conf的末尾加入如下參數即可
01.
ExpiresActive on
02.
ExpiresDefault
"access plus 12 month"
03.
ExpiresByType text/html
"access plus 12 months"
04.
ExpiresByType text/css
"access plus 12 months"
05.
ExpiresByType p_w_picpath/gif
"access plus 12 months"
06.
ExpiresByType p_w_picpath/jpeg
"access plus12 12 months"
07.
ExpiresByType p_w_picpath/jpg
"access plus 12 months"
08.
ExpiresByType p_w_picpath/png
"access plus 12 months"
09.
EXpiresByType application/x-shockwave-flash
"access plus 12 months"
10.
EXpiresByType application/x-javascript
"access plus 12 months"
11.
ExpiresByType video/x-flv
"access plus 12 months"
b)對目錄
對目錄的配置就是在apache主配置檔案中标簽内加入如下參數即可
01.
<< code="">
Directory
"/www/html">
02.
AllowOverride None
03.
Options None
04.
Require all granted
05.
ErrorDocument 404 /404.html
06.
ExpiresActive on
07.
ExpiresDefault "access plus 12 month"
08.
ExpiresByType text/html "access plus 12 months"
09.
ExpiresByType text/css "access plus 12 months"
10.
ExpiresByType p_w_picpath/gif "access plus 12 months"
11.
ExpiresByType p_w_picpath/jpeg "access plus12 12 months"
12.
ExpiresByType p_w_picpath/jpg "access plus 12 months"
13.
ExpiresByType p_w_picpath/png "access plus 12 months"
14.
EXpiresByType application/x-shockwave-flash "access plus 12 months"
15.
EXpiresByType application/x-javascript "access plus 12 months"
16.
ExpiresByType video/x-flv "access plus 12 months"
17.
Directory
>
c)對虛拟主機
對虛拟主機的配置就是在apache的虛拟主機配置檔案httpd-vhost.conf中添加如下參數即可
01.
<< code="">
VirtualHost
*:80>
02.
ServerAdmin [email protected]
03.
DocumentRoot "/www/html"
04.
ServerName www.sunsky.pw
05.
ServerAlias sunsky.pw
06.
CustomLog "|/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log" combined
07.
ErrorLog "|/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log"
08.
ExpiresActive on
09.
ExpiresDefault "access plus 12 month"
10.
ExpiresByType text/html "access plus 12 months"
11.
ExpiresByType text/css "access plus 12 months"
12.
ExpiresByType p_w_picpath/gif "access plus 12 months"
13.
ExpiresByType p_w_picpath/jpeg "access plus12 12 months"
14.
ExpiresByType p_w_picpath/jpg "access plus 12 months"
15.
ExpiresByType p_w_picpath/png "access plus 12 months"
16.
EXpiresByType application/x-shockwave-flash "access plus 12 months"
17.
EXpiresByType application/x-javascript "access plus 12 months"