Назад | Перейти на главную страницу

Кеширование Apache работает только иногда

Я пытаюсь настроить кеширование на своем сайте Apache, начиная с базовой конфигурации, с помощью которой я могу протестировать PHP-скрипт в браузере:

CacheEnable disk /
CacheRoot /var/www/cache
CacheDefaultExpire 3600
CacheMinExpire 3600
CacheIgnoreNoLastMod On
CacheIgnoreCacheControl On

Однако это работает только в том случае, если страница каким-либо образом не «перенаправлена». Например, я тестирую этот простой скрипт PHP в корневом каталоге под названием «test.php»:

<?php
    echo date('h:i:s');
?>

Если я перейду к «... / test.php» в моем браузере, это сработает: время вывода не изменится после первого посещения.

Если я перейду к «... / test», это не сработает: вывод всегда меняется на текущее время.

Два примечания:

  1. Когда это работает, я вижу поле «возраст» в кешированном ответе с обновленным количеством секунд с момента первого обслуживания страницы. Когда это не сработает, в ответе нет поля «возраст».
  2. У меня нет файла .htaccess в корневом каталоге, и я не смог найти, где Apache знает, как обслуживать скрипт без расширения «php». Когда я тестирую файл .htaccess с RewriteRule, он не кэширует ответ, когда он совпадает. Не уверен, имеет ли это значение.

Любые идеи? Спасибо!

Обычно вам необходимо правильно настроить заголовки кеширования, чтобы кеширование страниц работало. Есть хорошая статья Вот, и документы Apache Вот.

Подводя итог этой статьи, вы хотите установить заголовок Cache-Control. Вы можете установить etag, но с остальным, как с прагмой, не стоит возиться.

Cache-Control: max-age=86400

В Apache это делается с помощью mod_expires, который был бы настроен примерно так.

# enable expirations
ExpiresActive On
# expire GIF images after a month in the client's cache
ExpiresByType image/gif A2592000
# HTML documents are good for a week from the
# time they were changed
ExpiresByType text/html M604800