RedHat 6.3 上的 Apache 2.2。我有一个虚拟主机,其设置如下:
<VirtualHost xxx.xxx.xxx.xxx:80>
ServerAdmin [email protected]
DocumentRoot /home/xxxxx/Sites/xxxxxxx.com/htdocs
ServerName xxxxxxx.com
ServerAlias xxxxxxxx.com
SuexecUserGroup xxxx xxxx
suPHP_UserGroup xxxx xxxx
## a cache hit will log -, while a cache miss will log 1.
SetEnv CACHE_MISS 1
LogFormat "%h %l %u %t \"%r\" %>s %b %{CACHE_MISS}e" common-cache
CustomLog /var/log/cache.log common-cache
<IfModule mod_mime_magic.c>
# MIMEMagicFile /usr/share/magic.mime
MIMEMagicFile conf/magic
</IfModule>
<IfModule mod_cache.c>
<IfModule mod_disk_cache.c>
CacheRoot "/var/www/cache"
CacheDefaultExpire 3600
CacheIgnoreCacheControl On
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
CacheMaxFileSize 1000000
</IfModule>
</IfModule>
# support perl + cgi
ScriptAlias /cgi-bin/ /home/ls414-100/Sites/xxxx.com/htdocs/cgi-bin/
<Directory /home/xxxx/Sites/xxxxx.com/htdocs/cgi-bin/>
Options ExecCGI -Indexes -MultiViews
AddHandler cgi-script cgi pl
</Directory>
</VirtualHost>
但它不会记录缓存命中。
[25/Sep/2013:15:24:22 -0400] "GET /icons/stuff5.jpg HTTP/1.1" 304 - 1
请注意末尾的“1”,它表示它没有缓存。
任何帮助将不胜感激。
答案1
我看到的只是你强制 CACHE_MISS 的值为 1
SetEnv CACHE_MISS 1
因此,它在日志输出中始终为 1。查看 304 响应代码。这意味着请求的文件未被修改,因此可以由浏览器缓存提供。
答案2
我有一个非常类似的设置来在日志中记录缓存命中。根据我的经验,您无法看到缓存命中的最可能原因是:
- 缓存目录的权限不正确。
- 缓存文件系统中的空间
df -h
或 inode不足df -ih
我建议您重新考虑使用 Apache httpd 作为缓存的决定;过去我遇到过很多这方面的问题,包括奇怪的错误、不完整的图像,真正糟糕的缓存维护工具是 htcacheclean(您正在运行它,对吗?),我最近最沮丧的是(这触发了重新架构)它不会缓存 206 个响应(MP4、PDF)。
有很多方法可以减少要求 httpd 为您缓存的对象数量;禁用 User-Agent 的 Vary 是一大优势。您还可以重写与压缩相关的请求标头,这有助于大幅减少最终缓存的无用变体数量。