Apache mod_expires 没有设置正确的到期日期时间

Apache mod_expires 没有设置正确的到期日期时间

我在使用 mod_expires 时遇到了问题。我只是设置了默认过期时间为 1 天,然后根据类型设置过期时间(针对图像和音频)。

例如,我将 ExpiresByType image/jpeg 设置为“访问时间加 1 个月”。问题是每个页面都有正确的 Expires DateTime,因此其有效期加 1 天,但图像和音频(image/jpeg、image/png、audio/mpeg)的有效期为 12 小时。这是我的配置:

<IfModule mod_cache_disk.c>  
CacheRoot /var/cache/apache2/mod_cache_disk  
 CacheDirLevels 2  
CacheDirLength 1
</IfModule>


....
    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie
    <Location />
        CacheEnable disk
        CacheHeader on

        CacheDefaultExpire 600
        CacheMaxExpire 86400
        CacheLastModifiedFactor 0.5

        ExpiresActive on
        ExpiresDefault "access plus 1 days"
        ExpiresByType image/jpeg "access plus 1 months"
        ExpiresByType image/png "access plus 1 months"
        ExpiresByType audio/mpeg "access plus 1 months"
        Header merge Cache-Control public
        FileETag All
    </Location>
....

然后我尝试添加另一个位置,并且不使用 ExpiresByType,但仍然没有成功。这是我尝试的:

<LocationMatch "(.png|.mp3|.jpg|.jpeg)">
         ExpiresActive on
         Header Set Cache-Control "max-age=1678400"
         ExpiresDefault "access plus 1 days"
         FileETag All
</LocationMatch>

Cache-Control 标头具有正确的最大年龄,但过期日期仍为 12 小时。

然后我尝试手动设置它,因此我尝试如下操作:

Header Set Expires "Thu, 1 Jan 2020 00:00:00 GMT"

嗯,这是可行的,但我需要将其设置为自上次访问起 1 个月/年。

Apache 仅对实际为当前应用程序提供服务的 gunicorn Web 服务器执行代理传递。

答案1

我遇到了同样的问题,我搞不清楚哪个模块将 Expires 标头设置为 12 小时。我决定根本不使用 mod_expires。(即使在我禁用 mod_expires 模块之后,显然另一个模块设置了 Expire 标头,我找不到哪个模块做了这件事)

因此,我处理这个问题的方式是:

Header unset Expires

# Activate browser-caching without the expires module.
Header merge Cache-Control max-age=604800
<FilesMatch "\.(js|css)$">
  Header merge Cache-Control max-age=86400
</FilesMatch>

可以根据需要设置任意数量的 FilesMatch 块。

相关内容