Кэширование · 2 min read · Jan 01, 2026
Кэширование с помощью mod_cache Apache на Debian Etch - Страница 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 не предоставляет никаких функций ведения журнала, что плохо, если вы хотите знать, работает ли ведение журнала. Поэтому я создаю небольшой тестовый файл PHP, /var/www/cachetest.php, который отправляет HTTP-заголовки, которые говорят mod_cache, что он должен кэшировать файл в течение 300 секунд, и просто выводит временную метку:
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: страница не будет кэшироваться, если установлен 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) и одну несжатую, чтобы он мог предоставить правильную версию в зависимости от возможностей user-agent/браузера. Некоторые user-agents не понимают сжатие gzip, поэтому они должны получать несжатую версию.
Итак, вот резюме: используйте следующие два заголовка, если вы хотите, чтобы mod_cache кэшировал:
“Cache-Control: must-revalidate, max-age=300”
“Vary: Accept-Encoding”
и убедитесь, что не отправляются заголовки Expires с датой в прошлом, cookies и т.д.
Если ваше приложение написано на PHP, вы можете использовать функцию header() PHP для отправки 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/
Get new posts in your inbox
No spam. Unsubscribe anytime.