如何在Apache / Ubuntu Linux上启用caching?

我有一个较大(几兆字节)的XML文件,更新频率较高(每10分钟或更less),并获得大量的stream量。 我想实施一些caching来减less带宽和服务器负载。 看看Apache文档,我看到一系列令人眼花缭乱的configuration选项,包括mod_expires,mod_headers和mod_cache(以及变体)的各种组合。 我最后跑了圈,结果不是我所期望的。

如果我有一些想法我应该改变,我很乐意编辑各种configuration文件。 但是现在我正在黑暗中徘徊,那永远不会是一种舒服的感觉。 所以,也许如果我描述我想要的东西,这里的某个人可以牵着我的手说:“这就是你需要做的。”

定期将此文件称为“stuff.xml”,并将新版本复制到目录中。 例如,外部url就是http://example.com/stuff.xml 。 了解,这部分工作。 每当我请求文件,我得到预期的结果。 但是文件很大,我想节省带宽,所以首先我想用If-Modified-Since头来实现条件GET语义。 我该怎么做呢? 我已经启用了mod_headers和mod_expired,并在我的httpd.conf中添加了<FilesMatching>部分,正如我在网上看到的无数例子中推荐的那样,但是这并没有改变有条件的GET请求时的行为。 我总是得到整个文件的状态200。 那么我怎么实现呢?

这将减less不必要的转移。 我也想限制传输的数据量。 看到这是XML,gzipping它应该节省我50%或更多。 我的下一步将是以某种方式gzip文件,如果不是太困难,将其存储在内存中。 这将减less每访问数据传输,并减less磁盘传输。 那么如何实现这种types的caching呢?

提前致谢。

我在<VirtualHost>定义中使用了mod_expires设置caching

 ExpiresActive on ExpiresByType text/xml "modified plus 5 minutes" 

您可以使用mod_deflate设置压缩

 SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/xml 

至于为什么If-Modified-Since不起作用,我想你应该发布你的configuration的相关部分(我假设你已经重新启动了Apache)。 您可能还想要快速parsing日志,以查看相同的IP(可能是同一个用户)多次获取该XML文件。 如果每次总是或大部分是新用户,则客户端caching无助于减less服务器的负载。

对于压缩,你想看看mod_deflate和/或mod_gzip 。 这是Linux Journal上的一个比较旧的比较。

对于内存caching,我认为如果它被访问的足够的值得caching的操作系统可能已经caching它。 如果你没有IO问题或文件上的延迟,我会相信操作系统来完成它的工作。