캐싱 · 2 min read · Jan 01, 2026
Debian Etch에서 Apache의 mod_cache로 캐싱 - 2페이지
2.2 mod_mem_cache
mod_mem_cache 구성은 /etc/apache2/mods-available/mem_cache.conf에 있습니다:
vi /etc/apache2/mods-available/mem_cache.conf | |
이것은 기본 구성입니다 - 원하시면 수정할 수 있습니다. mod_mem_cache에 대한 구성 지시어 목록은 여기에서 확인할 수 있습니다: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html
이제 mod_cache와 mod_mem_cache를 다음과 같이 활성화합시다:
a2enmod cache
a2enmod mem_cache
/etc/init.d/apache2 force-reload벌써 끝났습니다! mod_mem_cache를 사용하면 캐시 디렉토리를 정리할 필요가 없습니다.
3 테스트
불행히도 mod_cache는 로깅 기능을 제공하지 않기 때문에 로깅이 작동하는지 알고 싶다면 좋지 않습니다. 따라서 mod_cache가 파일을 300초 동안 캐시해야 한다고 알려주는 HTTP 헤더를 전송하고 단순히 타임스탬프를 출력하는 작은 PHP 테스트 파일인 /var/www/cachetest.php를 생성합니다:
vi /var/www/cachetest.php| "; ?> |
이제 브라우저에서 해당 파일을 호출하십시오 - 현재 타임스탬프가 표시되어야 합니다. 그런 다음 브라우저의 주소 표시줄을 클릭하고 ENTER를 눌러 페이지가 다시 로드되도록 합니다(새로 고침 버튼이나 F5를 누르지 마십시오 - 이는 항상 서버에서 새 복사본을 가져옵니다!). 모든 것이 잘 진행되면 여전히 이전의 캐시된 타임스탬프가 표시되어야 합니다. 300초를 기다리면 캐시 대신 서버에서 새 복사본을 가져와야 합니다.
4 HTTP 헤더
캐싱은 즉시 작동하지 않습니다 - 캐싱이 작동할 수 있도록 웹 애플리케이션을 수정해야 합니다(귀하의 웹 애플리케이션이 이미 캐싱을 지원할 수 있습니다 - 확인하려면 애플리케이션 문서를 참조하십시오). mod_cache는 웹 애플리케이션에서 전송된 HTTP 헤더가 그렇게 하도록 지시하는 경우에만 웹 페이지를 캐시합니다.
다음은 mod_cache에 캐시하지 말라고 지시하는 헤더의 몇 가지 예입니다:
- 과거 날짜가 있는 Expires 헤더: “Expires: Sun, 19 Nov 1978 05:00:00 GMT”
- 특정 Cache-Control 헤더: “Cache-Control: no-store, no-cache, must-revalidate” 또는 “Cache-Control: must-revalidate, max-age=0”
- Set-Cookie 헤더: 쿠키가 설정된 경우 페이지는 캐시되지 않습니다.
따라서 mod_cache가 페이지를 캐시하도록 하려면 애플리케이션을 수정하여 이러한 헤더를 전송하지 않도록 해야 합니다.
mod_cache가 페이지를 캐시하도록 하려면 미래의 날짜가 있는 Expires 헤더를 설정할 수 있지만, 권장되는 방법은 max-age를 사용하는 것입니다:
"Cache-Control: must-revalidate, max-age=300"이것은 mod_cache에 페이지를 300초 동안 캐시하도록 지시합니다( max-age) - 불행히도 mod_cache는 s-maxage 옵션을 알지 못합니다(자세한 내용은 http://www.mnot.net/cache_docs/#CACHE-CONTROL 참조), 그래서 우리는 max-age 옵션을 사용해야 합니다(이는 브라우저에도 캐시하라고 지시합니다 - 예기치 않은 결과가 발생하면 이 점을 명심하십시오!). mod_cache가 s-maxage 옵션을 알고 있다면 “Cache-Control: must-revalidate, max-age=0, s-maxage=300”를 사용할 수 있었을 것입니다. 이는 mod_cache에 페이지를 캐시하라고 지시하지만 브라우저에는 그렇지 않도록 지시합니다.
물론, 위에서 언급한 비캐싱 헤더(과거의 Expires, Set-Cookie 등)를 동시에 전송하면 이 헤더는 쓸모가 없습니다!
캐싱을 위한 또 다른 매우 중요한 헤더는 다음과 같습니다:
"Vary: Accept-Encoding"이것은 mod_cache가 각 캐시된 페이지의 두 개의 복사본을 유지하게 하며, 하나는 압축된(gzip) 버전이고 다른 하나는 압축되지 않은 버전입니다. 이는 사용자 에이전트/브라우저의 기능에 따라 올바른 버전을 제공할 수 있도록 합니다. 일부 사용자 에이전트는 gzip 압축을 이해하지 못하므로 압축되지 않은 버전을 받아야 합니다.
따라서 요약하자면, mod_cache가 캐시하도록 하려면 다음 두 헤더를 사용하십시오:
“Cache-Control: must-revalidate, max-age=300”
“Vary: Accept-Encoding”
그리고 과거 날짜의 Expires, 쿠키 등이 전송되지 않도록 하십시오.
귀하의 애플리케이션이 PHP로 작성된 경우, PHP의 header() 함수를 사용하여 HTTP 헤더를 전송할 수 있습니다. 예를 들어 다음과 같이:
header(“Cache-Control: must-revalidate, max-age=300”);
header(“Vary: Accept-Encoding”);
HTTP 헤더와 캐싱에 대해 더 알고 싶다면 이 페이지는 필독입니다: http://www.mnot.net/cache_docs/
5 링크
- Apache: http://httpd.apache.org/
- mod_cache: http://httpd.apache.org/docs/2.2/mod/mod_cache.html
- mod_disk_cache: http://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html
- mod_mem_cache: http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html
- Apache 캐싱 가이드: http://httpd.apache.org/docs/2.2/caching.html
- 캐싱 튜토리얼: http://www.mnot.net/cache_docs/
- Debian: http://www.debian.org/
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.