使用 mod_cache 时,http 响应显示 Expires in 1981

使用 mod_cache 时,http 响应显示 Expires in 1981

我正在使用本文底部的配置在 CentOS 上设置 Apache 缓存,mod_cache但页面未被缓存。我包括了一些调试信息。mod_cache_diskCacheDetailHeader on

当我点击该页面时,HTTP 响应显示出来X-Cache-Detail: "Expires header already expired; not cacheable",并且 Expires 标头设置为 1981 年的某个日期,尽管该日期是正确的。

Date: Mon, 19 Aug 2019 23:39:03 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT

该测试使用 Chrome 隐身浏览器在公共 WordPress 页面上进行。

完整配置。CacheRoot 存在并且对 Apache 用户可写。

# The following line could be required or not depending on your Apache installation
LoadModule cache_module modules/mod_cache.so

<IfModule mod_cache.c>
    CacheQuickHandler off
    CacheDetailHeader on 

    CacheIgnoreNoLastMod On
    CacheDefaultExpire 7200

    CacheIgnoreCacheControl On
    CacheLastModifiedFactor 0.5
    CacheIgnoreHeaders Set-Cookie Cookie
    CacheHeader on
    CacheLock on
    CacheDisable /wp-admin
    CacheDisable /wp-login.php
    CacheDisable /wp-cron.php

    SetOutputFilter CACHE
    AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/rss+xml text/xml image/svg+xml

    # The following line could be required or not depending on your Apache installation
    LoadModule cache_disk_module modules/mod_cache_disk.so

    <IfModule mod_cache_disk.c>
        CacheRoot /var/cache/apache2/mod_cache_disk
        CacheEnable disk /
        CacheDirLevels 2
        CacheDirLength 1
        CacheMaxFileSize 2000000
    </IfModule>
</IfModule>

仅供参考 - 我使用 mod_cache 和 WP 的原因是这个项目基于基岩框架似乎与 WP Super Cache 和其他插件配合得不太好。他们建议使用Memcached、Nginx 或 Varnish,我无权安装其中任何一个。

更新

  • WP_CACHE被设定为true
  • 添加CacheMaxExpire 86400到配置中,X-Cache-Detail错误更改为s-maxage or max-age zero and no Last-Modified or EtagCache-Control标题现在是Cache-Control: private, proxy-revalidate, s-maxage=0
  • 添加mod_expires
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access 1 month"
...
</IfModule>

答案1

PHP 配置为在启动会话的页面上发送缓存禁用标头,包括您显示的 Expires: 标头。此日期对应于PHP 开发人员的生日谁实现了这个功能。

您可以通过设置来配置此行为session.cache_limiterphp.ini

如果您正在运行 WordPress,则无需将其默认设置为nocache,因为带有此标头的页面对应于发送给登录或已登录用户的页面,因此无论如何都不应被 Apache 缓存。不过,您可以将其更改为privateprivate_no_expire以允许登录用户的浏览器缓存页面。

要测试您的缓存,请使用隐身窗口并在注销后访问您的 WordPress 网站。

相关内容