带有“-A”标志的 htcacheclean 仅列出 64 个缓存条目,其余的在哪里?

带有“-A”标志的 htcacheclean 仅列出 64 个缓存条目,其余的在哪里?

我有一个运行 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 1CacheDirLevels 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配置文件中的内容一致。

相关内容