![mod_mem_cache 提供错误的内容!](https://linux22.com/image/487793/mod_mem_cache%20%E6%8F%90%E4%BE%9B%E9%94%99%E8%AF%AF%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%81.png)
我刚刚mod_mem_cache
在运行自定义应用程序的 Apache2/PHP5 服务器上启用了此功能,结果让我大吃一惊。突然间,错误的图像被提供,我注意到有一次对 HTML 页面的请求反而提供了一个 CSS 页面!这可能是什么原因造成的?配置如下:
CacheEnable 内存 / 缓存大小 204800 CacheDefaultExpire 3600 CacheIgnoreHeaders 设置 Cookie MCacheMinObjectSize 100 MCacheMaxObjectSize 5242880 MCacheRemovalAlgorithm LRU
答案1
在 mod_cache 和 mod_*_cache 内部,查找键是相当长的校验和,包括规范 URI 和任何 Vary: 参数(用于协商内容)。这些查找键发生冲突的可能性极小,因此如果您收到上述配置的错误响应,则似乎是错误。
我是缓存模块的作者之一,如果你能将请求的详细信息邮寄给我([电子邮件保护]) 和[电子邮件保护]或者提交错误报告并提供一些我们可以用来重现的细节 -http://httpd.apache.org/bug_report.html- 我们可以上去。
或者欢迎将它们发布在这里,我们会解决该问题。
答案2
我找到了问题所在。我使用 mod_rewrite 将不存在的文件 URL 重写为 PHP 脚本,该脚本会将这些 URL 分发给正确的模块。由于所有这些虚拟 URL 都被重写为同一个 URL,因此 mod_cache 会感到困惑。为了解决这个问题,我更改了 Apache 配置的以下部分:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /dispatch.php
到:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /dispatch.php/$1
现在缓存似乎运行完美!