您的位置:首页 > 运维架构 > Apache

Apache模块 mod_expires

2015-09-27 12:44 489 查看
做笔记,上来就直接干了
当直接在浏览器中输入一个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资源设置
Expires
Cache-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 还是后请求源服务器,因为浏览器会发起 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  expires apache squid