我已经在我的httpd.conf文件中添加了缓存指令,但是不知道如何验证它是否真正地缓存页面并提供服务。我该如何验证?
我在服务器配置级别(而不是使用VirtualHost)添加了缓存指令:
CacheEnable disk /
CacheRoot /var/cache
CacheDefaultExpire 3600
我已经在我的httpd.conf文件中添加了缓存指令,但是不知道如何验证它是否真正地缓存页面并提供服务。我该如何验证?
我在服务器配置级别(而不是使用VirtualHost)添加了缓存指令:
CacheEnable disk /
CacheRoot /var/cache
CacheDefaultExpire 3600
您可以确认以下几点,以确定您的Apache是否真正地缓存内容。
检查 /var/cache 目录的大小。当您的Apache被访问时,它应该会随着时间增长而增大。
您可以在日志中检查,响应代码应为302而不是200。
如果您满足这两个条件,则 mod_disk_cache 模块应该正常工作。
\"%{cache-status}e\"
,它将显示在访问日志文件中。您可以编写一个简单的 PHP 页面。如果您刷新该页面,则右上角的时间不应再增加 300 秒。
<?php
header("Cache-Control: must-revalidate, max-age=300");
header("Vary: Accept-Encoding");
echo time()."<br>";
?>
dynamic.php
使用您的代码,static.html
包含文本“hello world”。当我在浏览器中打开这些文件时,静态文件static.html
的缓存正常工作,但动态文件dynamic.php
的缓存却无法正常工作。然而,在这两种情况下,正确的文件都已经在服务器缓存磁盘上创建,但由于某种原因,Apache没有使用缓存。这意味着即使缓存已经在磁盘上正确创建,Apache也可能永远不会使用它,而只是不断刷新它。肯定还有其他设置缺失。在谷歌上研究这个问题非常困难! - Morgus Lethe在日志中出现的304并不意味着您的内容是从缓存中提供的。但是,查看/var/cache/mod_proxy文件夹,您可以看到其内容和大小在增长。
在httpd.conf中添加以下内容:
SetEnv CACHE_MISS 1
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{CACHE_MISS}e" combined
192.xx.xx.xx - - [29/Oct/2015:10:11:12 -0400] "GET /pathToResource/javascript/extjs/lib/extjs4/ext-all.js HTTP/1.1" 304 - "https://my-url" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36"
192.xx.xx.xx - - [29/Oct/2015:10:11:12 -0400] "GET /pathToResource/javascript/extjs/lib/extjs4/ext-all.js HTTP/1.1" 304 - "https://my-url" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36" 1
验证工作缓存的简单测试:
curl "http://mydomain/my/page?test_param"
htcacheclean -p /var/cache -A|grep 'test_param'
<IfModule mod_cache.c>
LoadModule cache_disk_module /usr/lib/apache2/modules/mod_cache_disk.so
<IfModule mod_disk_cache.c>
CacheDefaultExpire 3600
CacheEnable disk /
CacheRoot "/path/to/cache/folder/"
CacheDirLevels 2
CacheDirLength 1
</IfModule>
</IfModule>
CacheRoot "/var/cache/folder"
如果有权限错误,它将无法写入目录,请像下面这样给apache2授予权限以访问该目录。/var/log/apache2/error.log
mkdir -p /var/cache/folder/
chown root:www-data /var/cache/apache2/mod_cache_disk/ -R
chmod 775 /var/cache/apache2/mod_cache_disk/ -R
访问页面,检查文件夹中是否有目录结构出现,其中有两个文件,一个是标题文件,另一个是数据文件。如果它显示数据正在缓存,否则可能是配置问题,我已经配置好了,缓存页面也在我的日志中显示200状态。
我曾经遇到过同样的挑战,这里的答案和评论非常有帮助。
在测试时,我还发现另一个有用的选项是添加一个或多个Apache缓存头。
它们使得用基本的HTTP客户端(如curl)轻松测试和验证设置变得容易。