Apache模塊 mod_expires

做筆記,上來就直接幹了

當直接在瀏覽器中輸入一個URL,或者點擊一個鏈接的時候,那麼瀏覽器緩存就會起作用,如果緩存沒有過期,那麼瀏覽器會從本地讀取資源,不會發起HTTP請求,如果緩存過期,那麼瀏覽器會發起新的瀏覽器請求。按ctrl+F5,瀏覽器會清空本地緩存,重新請求資源。 
Expires是HTTP/1.0的緩存頭, Cache-Control: max-age是HTTP/1.1是用來進行HTTP緩存的頭。 
Expires指定了資源過期的絕對時間,GMT格式,Cache-Control: max-age指定了資源過期的相對時間,單位是秒。 
在支持HTTP/1.1的瀏覽器上,如果發送兩個頭,那麼Cache-Control: max-age會覆蓋掉Expires; 
在支持HTTP/1.0的瀏覽器上,即使發送了兩個頭,但是隻有Expires會起作用,所以爲了兼容老的瀏覽器,還是要同時發送這兩個頭。

設置HTTP緩存,需要安裝expires_module,其會發送Expires和Cache-Control: max-age兩個HTTP頭。配置如下:

<IfModule expires_module>
    ExpiresActive On
    ExpiresByType application/x-javascript  "access plus 30 days"
    ExpiresByType text/css  "access plus 30 days"
    ExpiresByType image/gif  "access plus 30 days"
    ExpiresByType image/jpeg  "access plus 30 days"
    ExpiresByType image/png  "access plus 30 days"
</IfModule>



# HTML文檔的有效期是最後修改時刻後的一星期

ExpiresByType text/html M604800


A86400意指瀏覽時起算1天.格式是代碼加上秒數.代碼有分兩種,”A”等同”access”,意指瀏覽時起算過期時間.使用代碼”A”比較適合應用 在不常變動的網頁文件類型,例如圖片.另外一種代碼是”M”,其意義等同於”modification”,指的是網頁文件的”最後編輯時間”


下面兩種寫法一個意思

ExpiresByType image/gif A2592000

ExpiresByType application/x-javascript "access plus 30 days"表示對js資源設置ExpiresCache-Control: max-age頭,其中Expires的值是以客戶端訪問資源的時間爲基準的後30天Cache-Control: max-age的值是3600x24x30秒。


兩種寫法是有區別的,在前面用squid 緩存的時候

修改時間如果短很容易過期,過期後squid會一直請求後端apache

比如

squid的日誌

[27/Sep/2015:10:51:12 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:10:57:00 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:10:58:03 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:00:34 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:00:52 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:01:13 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:04:13 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:06:29 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:06:39 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:07:09 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:08:27 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

[27/Sep/2015:11:12:34 TCP_REFRESH_UNMODIFIED:ROUNDROBIN_PARENT

修改後

[27/Sep/2015:11:14:53 TCP_IMS_HIT:HIER_NONE

[27/Sep/2015:11:16:47 TCP_IMS_HIT:HIER_NONE

[27/Sep/2015:11:19:44 TCP_IMS_HIT:HIER_NONE

[27/Sep/2015:11:24:48 TCP_IMS_HIT:HIER_NONE

[27/Sep/2015:11:26:09 TCP_IMS_HIT:HIER_NONE

[27/Sep/2015:11:27:36 TCP_IMS_HIT:HIER_NONE


後端apache幾乎沒有日誌,以前一直304


2  當瀏覽器刷新的時候 squuid 還是後請求源服務器,因爲瀏覽器會發起 

  1. If-Modified-Since:

    但是對於圖片基本沒必要回源,所以可以配置squid忽略

refresh_pattern -i .gif$         0     50%     4320 ignore-reload

refresh_pattern -i .bmp$         0     50%     4320 ignore-reload

refresh_pattern -i .jpg$         0     50%     4320 ignore-reload

refresh_pattern -i .png$         0     50%     4320 ignore-reload

refresh_pattern -i .swf$         0     50%     4320 ignore-reload

refresh_pattern -i .mp3$         0     50%     4320 ignore-reload

refresh_pattern -i .wmv$         0     50%     4320 ignore-reload

refresh_pattern -i .rm$          0     50%     4320 ignore-reload

refresh_pattern -i .mpeg$        0     50%     4320 ignore-reload

refresh_pattern -i .wma$         0     50%     4320 ignore-reload

refresh_pattern -i .exe$         0     50%     4320 ignore-reload

refresh_pattern .               0       20%     4320




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