我阅读了最新 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
显然,我已经启用了 expires、headers、cache 模块。
当我尝试访问图像、css 或 js 文件时,我第一次看到 200 OK,接下来看到 304。所以,我认为我是对的......但谷歌 Pagespeed(例如)仍然抱怨没有缓存的文件。
实际上,我有一些怀疑我遗漏了一些东西:
- 我没有激活 mod_cache 或 mod_cache_disk。我是不是该?这样做的基本规则是什么?
- 为什么需要禁用 ETag?
- 当文件更改时,我绝对需要我的缓存突然过期:理想情况下,过期时间(对于 css,js)可能很长,比如说,两周,但如果文件在一小时后更改,用户应该强制获取更新的文件!该行为是否由 Apache 自动管理?