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
모든 사이트 URL의 캐시가 나누어지는 64개의 디렉토리가 제공됩니다.
나머지 해시(디렉터리 이름에 사용되지 않는 해시 문자)와 .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
구성 파일의 내용과 일치하는지 확인하세요.