我有一个运行 Apache 的网络服务器。它通过 启用了缓存cache_disk_module
。
CacheRoot "/var/cache/httpd/mod_cache"
CacheDirLevels 1
CacheDirLength 1
我想列出缓存中对象的 URL。如果我使用htcacheclean
带有标志的捆绑命令-A
来查询缓存,它只返回 64 个对象:
htcacheclean -A -p/var/cache/httpd/mod_cache
输出:64 行,每行如下例所示:
http://<ACTUAL-URL-HERE> 823 102014 200 0 1603846099818215 1603849699818215 1603846099807137 1603846099818215 1 0
条目其中做获取输出,看起来正确,并包含预期的 URL。
然而,如果我运行“find”命令来计算文件数量.header
,我得到的文件数量远远超过 64 个:
# find /var/cache/httpd/mod_cache -name '*.header' | wc -l
30440
#
Apache 版本是 CentOS 7.8 发行版当前提供的版本:版本 2.4.6,带有各种向后移植的补丁。
从手册页:
-A List the URLs currently stored in the cache, along with their
attributes in the following order: url, header size, body size, status,
entity version, date, expiry, request time, response time, body
present, head request.
...
LISTING URLS IN THE CACHE
By passing the -a or -A options to htcacheclean, the URLs within the
cache will be listed as they are found, one URL per line. The -A option
dumps the full cache entry after the URL, with fields in the following
order:
...
任何人都可以提供有关正在发生的事情的线索吗?如何使用转储缓存对象 URL 的完整列表htcacheclean
?
答案1
htcacheclean 对 URL 进行编码的哈希表示形式是字母数字加 @ 和 _,或者 64 个可能的字符。设置CacheDirLength 1
为CacheDirLevels 1
将为您提供 64 个目录,所有站点 URL 的缓存将被划分到这些目录中。
在子目录名称的末尾,由散列的其余部分(目录名称中未使用的散列字符)组成,后跟 .header,您还可能会看到 .vary。在大多数情况下,您的服务器配置将允许
Header set Vary "Accept-Encoding"
可能还有另一个或多个标头,它们可以触发针对给定 URL 缓存不同版本的数据。一个常见的漏掉的是 User-Agent,它有很多可能的值。如果是这样,如果许多不同的浏览器访问相同的 URL,则可能会在任何这些目录下缓存大量头文件。
除非您需要返回的所有详细信息htcacheclean -A
,否则请尝试使用htcacheclean -a
。 URL 相同,但格式更易于解析。
最后,您提到您的缓存目录是/var/cache/httpd/mod_cache
而不是默认的/var/cache/[httpd or apache2]/mod_cache_disk
.移动它没有什么坏处,但要确保该目录与/etc/default/apache-htcacheclean
配置文件中的内容一致。