1. 程式人生 > >apache 設定快取

apache 設定快取

Apache如何實現靜態快取可以啟用mod_expires&mod_headers

一.瀏覽器快取原理

將該行前面的”#”字號刪除,然後將”httpd.conf”設定檔儲存後,重新啟動Apache來使這個更新生效.

當然如果我們是租用虛擬主機的話,”httpd.conf”設定檔我們一般使用者是接觸不到的,而在網站根目錄裡寫個”.htaccess”設定檔, 我想在運用上相對是較靈活的.”mod_expires”的設定資料除了可以寫在Apache的”httpd.conf”設定檔中,也可以寫 在”.htaccess”設定檔裡.

我們知道在使用瀏覽器瀏覽網頁時,瀏覽器會把網頁資料快取(Cache)下來儲存在本機端,用以加快下回瀏覽相同網頁時不必再重新由網站上下載,進 而有加速的效果.使用mod_expires模組來加速網頁瀏覽,這裡所謂的”加速”,其實是利用”mod_expires”的功能,來設定網頁檔案的過 期時間,加長網頁檔案被瀏覽器快取(Cache)儲存的時間.如此一來,只要網頁檔案的過期時間未到,瀏覽器就會引用快取的資料,而不用花時間再去下載網 站上的資料.另一方面帶給站長的好處是,可以減少瀏覽者對網站的流量耗用(例如有些虛擬主機有限制網站可使用的流量).

二.mod_expires實現頁面快取
LoadModule expires_module modules/mod_expires.so
mod_expires預設快取指令是ExpiresDefault,這個可以對所有檔案進行快取,我們如果想設定預設快取,選用以下方式

<IfModule expires_module>
ExpiresActive On
#訪問之後的一個月不再更新
ExpiresDefault "access plus 1 month"
#訪問之後的4周不再更新
#ExpiresDefault "access plus 4 weeks"
#訪問之後的30天不再更新
#ExpiresDefault "access plus 30 days"
</IfModule>
2.1 ExpiresDefault指令

按照Apache Server的介紹,ExpiresDefault的格式如下

ExpiresDefault "<base> [plus] {<num> <type>}*"

其中,base取值如下

access                    #訪問之後,從當前時間計算
now(等價於access) #訪問之後,從當前時間計算
modification         #修改之後,從伺服器檔案修改後計算
plus是關鍵字,這個是系統指定的寫法

<num>表示計數,單位為秒

<type> 表示日期單位,後者取值如下
years
months
weeks
days
hours
minutes
seconds
2.2 ExpiresByType 指令

實際上,ExpiresDefault指令有非常嚴重的快取問題,我們應該知道,所有資源被快取,導致網站會出現更新問題,我們更應該少用ExpiresDefault而多用ExpiresByType,此外ExpiresDefault設定的時間要儘可能短。

ExpiresByType 指令規則如下
ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"
其中base,num,type和 ExpiresDefault 類似。
當然,在Apache Http Server中,指令還可以使用簡寫方式

ExpiresDefault type/encoding  [ufrist(base)][seconds]
ExpiresByType type/encoding   [ufrist(base)][seconds]
 

ufrist(base) 表示 base的首字母大寫, seconds表示過期時間,單位為秒

<IfModule expires_module>
  # Axxxx - Access seconds ,表示訪問之後經過多少秒
  # Mxxxx - Modifyed seconds ,表示修改之後經過多少秒(推薦)
  ExpiresActive On
  ExpiresDefault A3600 #表示一小時後更新
  ExpiresByType image/x-icon A86400  #表示1天后更新
  #指令碼檔案和css樣式,我們最好使用 Modification
  ExpiresByType application/javascript M604800 #表示修改完之後,更新之後的1周以後更新
  ExpiresByType text/css M2592000
  #表示修改後如果沒有再次修改,那麼經過一個星期才允許更新快取 
  ExpiresByType image/gif M604800
  ExpiresByType image/png A604800
  ExpiresByType image/jpeg M604800
  ExpiresByType text/plain A604800
  ExpiresByType application/x-shockwave-flash A604800
  ExpiresByType video/x-flv A604800
  ExpiresByType application/pdf A604800
  ExpiresByType text/html A900
</IfModule>
此外,以上寫法可讀性好,但是如果要更方便一些,不妨試試如下寫法

<IfModule expires_module>
ExpiresActive On
ExpiresDefault A3600
# 1 年
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
ExpiresDefault A9030400
</FilesMatch>
# 1 星期
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
ExpiresDefault A604800
</FilesMatch>
# 3 小時
<FilesMatch "\.(txt|xml|js|css)$">
ExpiresDefault M10800
</FilesMatch>
</IfModule>