mod_cache 不工作

mod_cache 不工作

我有一个 PHP 网站,其中包含许多动态生成的页面。我尝试使用 mod_cache 来帮助提高性能,因为在大多数情况下,内容在一天内不会发生变化。

我已经尽可能地配置了 mod_cache,遵循了网上的示例,包括apache.org 上的 mod_cache 页面。当我设置时LogLevel debug,我会看到一些有关缓存的信息,缓存并未发生。有很多这样的行对:

[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(141): Adding CACHE_SAVE filter for /foo/bar
[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(148): Adding CACHE_REMOVE_URL filter for /foo/bar

这很好,因为我已设置CacheEnable disk /foo,以表明我希望缓存 /foo 下的所有内容。我是 mod_cache 的新手,但我对这些行的理解是,它只是意味着 mod_cache 已确认 URL 应该被缓存,但应该有更多行表明它正在将数据保存到缓存中,然后在后续访问同一 URL 时检索它们。

我可以一直点击同一个 URL,直到脸色发青,无论是否使用 F5 刷新,无论使用什么浏览器,无论使用什么计算机。日志中总是显示那两行,没有其他内容。

当我设置时CacheEnable disk /,我会看到更多活动。但我不想缓存整个网站,而且该网站有许多不同的子路径,所以我不想修改代码以no-cache在所有必要的位置设置标头。

我会提到这里使用了 mod_rewrite,将 /foo/bar 重写为类似的内容index.php?baz=/foo/bar,但我的理解是 mod_cache 使用的是重写前的 URL,而不是重写后的 URL。

据我所知,我的响应标头不会妨碍缓存。以下是一次命中的示例:

Cache-Control:must-revalidate, max-age=3600
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:16790
Content-Type:text/html
Date:Fri, 01 Jun 2012 21:43:09 GMT
Expires:Fri,  1 Jun 2012 18:43:09 -0400
Keep-Alive:timeout=15, max=100
Pragma:
Server:Apache
Vary:Accept-Encoding

mod_cache配置如下:

CacheRoot   /var/cache/apache2/
CacheDirLevels 3
CacheDirLength 2
CacheEnable disk /foo

什么阻碍了 mod_cache 完成其缓存工作?

答案1

这是我的配置并且运行良好:

<IfModule mod_disk_cache.c>
    CacheEnable disk /
    CacheRoot /var/cache/apache2/mod_disk_cache
    CacheIgnoreCacheControl On
    CacheMaxFileSize 2500000
    CacheIgnoreURLSessionIdentifiers jsessionid
    CacheIgnoreHeaders Set-Cookie
</IfModule>

您需要有适合您需求的 CacheIgnoreURLSessionIdentifiers,因此在 PHP 上您可能需要

CacheIgnoreURLSessionIdentifiers PHPSESSID

问候 Janning

答案2

我在尝试映射时遇到了同样的问题

CacheEnable Disk /api

唯一有效的映射是

CacheEnable Disk / 

它缓存了所有内容。

尽管文档说 mod_cache 在 url-rewrite 之后运行,但实际上并没有。为了让它正常工作,我将其更改为

CacheEnable Disk /index.php/api

相关内容