【发布时间】:2015-08-07 16:52:29
【问题描述】:
我阅读了最新 Apache httpd 版本的官方缓存指南,但不明白如何获得静态内容的最小缓存设置。
四处搜索,我终于将这些规则添加到我的 /etc/apache2/apache2.conf 中(我使用的是 Ubuntu):
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 5 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 216000 seconds"
ExpiresByType application/javascript "access plus 216000 seconds"
ExpiresByType application/x-javascript "access plus 216000 seconds"
</IfModule>
<IfModule mod_headers.c>
Header set Cache-Control "public"
</IfModule>
FileETag None
显然,我已经启用了过期、标头、缓存模块。
当我尝试访问图像、css 或 js 文件时,我第一次看到 200 OK,接下来看到 304。所以,我认为我是对的......但 Google Pagespeed(例如)仍然抱怨没有缓存的文件。
实际上,我有些怀疑我遗漏了一些东西:
- 我没有激活 mod_cache 或 mod_cache_disk。我是不是该?这样做的基本规则是什么?
- 为什么需要禁用 ETag?
- 我绝对需要我的缓存在文件更改时突然过期:理想情况下,过期时间(对于 css、js)可能会很长,比如说两周,但如果文件在一周后更改小时,用户应该强制获取更新的文件!该行为是否由 Apache 自动管理?
【问题讨论】:
-
编辑了我的问题,缓存控制始终公开。仍未缓存在 Google pagespeed 或网页测试工具中
-
如果删除块周围的
<IfModule标签,是否会出现内部服务器错误? -
不。它仍然有效
-
Google pagespeed 通常会将自己的结果缓存一段时间。
标签: apache caching static-content mod-expires