Кэширование 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» в моем браузере, он сработает: время вывода не работает. t изменится после первого посещения.

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

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

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

Есть идеи? Спасибо!

1
задан 30 December 2017 в 22:59
1 ответ

Обычно вам нужно правильно настроить заголовки кеширования, чтобы кэширование страниц работало. Здесь есть хорошая статья и документы 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
4
ответ дан 3 December 2019 в 17:34

Теги

Похожие вопросы