0

我阅读了最新 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 自动管理?
4

1 回答 1

0

当文件更改时,我绝对需要我的缓存突然过期

T当您使用 mod_expires 发送 Expires 标头时,客户端不必确保文件是最新的并且您永远不能强制更改。

如果您删除 mod_expires,您的静态文件将有一个 ETAG 和一个最后修改时间,它允许浏览器确保文件没有更改(这些是 304 响应)。

您需要 a) 更仔细地检查 pagespeed 消息 B) 根据您的要求评估它们和 C) 查看访问日志 wrt 304 中的真实流量。

您不希望 mod_cache 用于静态文件。

于 2015-05-27T16:53:01.817 回答