天天看點

Apache子產品 mod_expires

做筆記,上來就直接幹了

當直接在浏覽器中輸入一個URL,或者點選一個連結的時候,那麼浏覽器緩存就會起作用,如果緩存沒有過期,那麼浏覽器會從本地讀取資源,不會發起HTTP請求,如果緩存過期,那麼浏覽器會發起新的浏覽器請求。按<code>ctrl+F5</code>,浏覽器會清空本地緩存,重新請求資源。 

<code>Expires</code>是HTTP/1.0的緩存頭, <code>Cache-Control: max-age</code>是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頭。配置如下:

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

ExpiresByType text/html M604800

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

下面兩種寫法一個意思

ExpiresByType p_w_picpath/gif A2592000

<code>ExpiresByType application/x-javascript "access plus 30 days"</code>表示對js資源設定<code>Expires</code>和<code>Cache-Control: max-age</code>頭,其中<code>Expires</code>的值是以用戶端通路資源的時間為基準的後30天,<code>Cache-Control: max-age</code>的值是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 還是後請求源伺服器,因為浏覽器會發起 

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