Apache 不缓存静态内容

Apache not caching static content

我阅读了最新 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

显然,我已经启用过期,headers,缓存模块。

当我尝试访问图像、css 或 js 文件时,我第一次看到 200 OK,然后是 304。所以,我认为我是对的...但是 Google Pagespeed(例如)仍然抱怨未缓存的文件。

实际上,我怀疑我遗漏了什么:

I absolutely need my cache to expire suddenly when the file is changed

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

如果你删除 mod_expires,你的静态文件将有一个 ETAG 和一个 last-modified-time 允许浏览器确保文件没有改变(这些是 304 响应)。

您需要 a) 更仔细地检查 pagespeed 消息 B) 根据您的要求对其进行评估以及 C) 查看访问日志中的真实世界流量 wrt 304s。

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