在 apache2.conf 中启用后 mod_expires 将不起作用

4 server apache2

阅读此处后,我将以下代码块放入我的apache2.conf

<ifmodule mod_expires.c>
<Filesmatch "\.(jpg|jpeg|png|gif|js|css|swf|ico|woff|mp3)$">
    ExpiresActive on
    ExpiresDefault "access plus 2 days"
</Filesmatch>
</ifmodule>
Run Code Online (Sandbox Code Playgroud)

然后我重新启动了 Apache 并刷新了所有 CMS 缓存,并运行了 GPI 测试,在其中我仍然收到以下错误,表明该模块不起作用:

利用浏览器缓存

在静态资源的 HTTP 标头中设置到期日期或最长期限会指示浏览器从本地磁盘而不是通过网络加载先前下载的资源。

我认为原因是它mod_cache没有打开,所以我做了a2enmod cache然后在我网站的 Vhost 中粘贴了以下代码并重新启动了 Apache。它也没有帮助,我仍然在 GPI 中遇到相同的错误:

    CacheQuickHandler off
    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5
    CacheIgnoreHeaders Set-Cookie
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我的问题是启用 mod_expires 可能缺少什么,为什么它不起作用?

Dan*_*Dan 7

expires模块需要的headers模块来工作。

sudo a2enmod headers
sudo service apache2 reload
Run Code Online (Sandbox Code Playgroud)

除此之外,您的配置看起来不错。

但是为了阻止 PageSpeed Insights 抱怨,您只需要将资源的到期时间从 2 天增加到大于或等于 7 天的值。

您只需要修改以下行:

ExpiresDefault "access plus 2 days"
Run Code Online (Sandbox Code Playgroud)

来自PageSpeed Insights 文档

对于静态资产或不经常更改的资产,我们建议最短缓存时间为一周,最好最长为一年。