Apache 缓存有时才有效

Apache 缓存有时才有效

我正在尝试在我的 Apache 网站上设置缓存,从基本配置开始,以便我可以使用浏览器测试 PHP 脚本:

CacheEnable disk /
CacheRoot /var/www/cache
CacheDefaultExpire 3600
CacheMinExpire 3600
CacheIgnoreNoLastMod On
CacheIgnoreCacheControl On

但是,只有当页面未以某种方式“重定向”时,它才有效。例如,我在根目录中测试这个名为“test.php”的简单 PHP 脚本:

<?php
    echo date('h:i:s');
?>

如果我在浏览器中转到“.../test.php”,它就会起作用:第一次访问后输出时间不会改变。

如果我转到“.../test”,它不起作用:输出总是改变为当前时间。

两点说明:

  1. 当它正常工作时,我可以在缓存响应中看到一个“age”字段,其中包含自首次提供该页面以来的更新秒数。当它不工作时,响应中没有“age”字段。
  2. 我在根目录中没有 .htaccess 文件,而且我无法找到 Apache 知道在哪里提供没有“php”扩展名的脚本。当我使用带有 RewriteRule 的 .htaccess 文件进行测试时,它不会在匹配时缓存响应。不确定这是否重要。

有什么想法吗?谢谢!

答案1

通常,您需要正确设置缓存标头才能使页面缓存正常工作。有一篇很好的文章这里和 Apache 文档这里

总结一下这篇文章,您需要设置 Cache-Control 标头。您可以设置 etag,但其余的像 pragma 这样的就不必费心了。

Cache-Control: max-age=86400

在 Apache 中,这是通过mod_expires,其配置如下。

# enable expirations
ExpiresActive On
# expire GIF images after a month in the client's cache
ExpiresByType image/gif A2592000
# HTML documents are good for a week from the
# time they were changed
ExpiresByType text/html M604800

相关内容