Apache啟用mod_expires&mod_headers實現(xiàn)靜態(tài)緩存

一.瀏覽器緩存原理

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

創(chuàng)新互聯(lián)公司專注于東風網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供東風營銷型網(wǎng)站建設,東風網(wǎng)站制作、東風網(wǎng)頁設計、東風網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務,打造東風網(wǎng)絡公司原創(chuàng)品牌,更為您提供東風網(wǎng)站排名全網(wǎng)營銷落地服務。

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

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

二.mod_expires實現(xiàn)頁面緩存

LoadModule expires_module modules/mod_expires.so

mod_expires默認緩存指令是ExpiresDefault,這個可以對所有文件進行緩存,我們?nèi)绻朐O置默認緩存,選用以方式

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

2.1ExpiresDefault指令

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

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

其中,base取值如下

access #訪問之后,從當前時間計算 now(等價于access)#訪問之后,從當前時間計算 modification #修改之后,從服務器文件修改后計算

plus是關鍵字,這個是系統(tǒng)指定的寫法

<num>表示計數(shù),單位為秒

<type> 表示日期單位,后者取值如下

years months weeks days hours minutes seconds

2.2ExpiresByType 指令

實際上,ExpiresDefault指令有非常嚴重的緩存問題,我們應該知道,所有資源被緩存,導致網(wǎng)站會出現(xiàn)更新問題,我們更應該少用ExpiresDefault而多用ExpiresByType,此外ExpiresDefault設置的時間要盡可能短。

ExpiresByType 指令規(guī)則如下

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 ,表示訪問之后經(jīng)過多少秒 # Mxxxx - Modifyed seconds ,表示修改之后經(jīng)過多少秒(推薦) ExpiresActive On ExpiresDefault A3600 #表示一小時后更新 ExpiresByType image/x-icon A86400 #表示1天后更新 #腳本文件和css樣式,我們最好使用 Modification ExpiresByType application/javascript M604800 #表示修改完之后,更新之后的1周以后更新 ExpiresByType text/css M2592000 #表示修改后如果沒有再次修改,那么經(jīng)過一個星期才允許更新緩存 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>

三.mod_headers緩存實現(xiàn)

1.關于mod_headers

Apache HTTP server官網(wǎng)關于mod_headers的描述是自定義一個Request Header和Response Header

2.mod_headers用法

加載模塊

簡單例子

<IfModuleheaders_module> Header set MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request." </IfModule>

當然,既然允許自定義,我們不妨可以通過添加Cache-Control來增強緩存

<IfModule headers_module> # htm,html,txt類的文件緩存一個小時 <filesmatch ".(html|htm|txt)$"> header set cache-control "max-age=3600" </filesmatch> # css, js, swf類的文件緩存一個星期 <filesmatch ".(css|js|swf)$"> header set cache-control "max-age=604800" </filesmatch> </IfModule>

3.資源更新問題

不像mod_expires模塊具有Modification指令,那么資源更新了就會出現(xiàn)問題,對于這些問題如何處理?

Cache-Control加入HTTP/1.1是為了解決時間精度問題,當然,他有好幾個搭檔,Etag,If-Range,Last-Modified,這幾個選項Apache服務器本身就實現(xiàn)了,當然,我們還要注意,http.conf和.htaccess不能出現(xiàn)如下 Header unset Etag和Header unset Last-Modifie,否則更新緩存將成為大問題,導致網(wǎng)站更新UI失敗,數(shù)據(jù)提交出錯,斷點續(xù)傳失敗等問題。

解決上述問題,最好不要出現(xiàn)如下配置

<IfModule mod_headers> Header unset Last-Modified Header unset Etag </IfModule>

注意:Etag在分布式跨服務器請求時會可能遇到校驗失敗的問題,導致緩存實效,從而也會引發(fā)更新UI失敗,數(shù)據(jù)提交出錯,斷點續(xù)傳失敗等問題。因此,如果你是分布式系統(tǒng),建議還是Header unset Etag或者FileETag None。

本文名稱:Apache啟用mod_expires&mod_headers實現(xiàn)靜態(tài)緩存
網(wǎng)站地址:http://www.muchs.cn/article44/cjhphe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設網(wǎng)站營銷、網(wǎng)站收錄品牌網(wǎng)站制作、動態(tài)網(wǎng)站小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名