Кэширование Apache отключено, когда клиент отправляет заголовок If-Modified-Since

Я пытаюсь заставить Apache кэшировать результаты выполнения дорогостоящего PHP-скрипта (он обращается к стороннему серверу с ограничением скорости), но кажется, если клиент отправляет If-Modified -С момента заголовка кеш обходится.

CacheEnable disk /script.php
CacheLock on
CacheLockMaxAge 60
CacheIgnoreHeaders Set-Cookie
# prevent client explicitly requesting un-cached content
CacheIgnoreCacheControl on
CacheDetailHeader on

Скрипт php устанавливает следующие заголовки в своем ответе:

  • Last-Modified установлен на текущее время, например Вс, 20 июня 2021 г., 11:30:20 GMT
  • Истекает установлено текущее время плюс 60 секунд, например Вс, 20 июня 2021 г., 11:31:20 GMT

Если я сделаю следующий запрос:

GET /script.php HTTP/1.1
Host: example.com
Connection: close

Тогда кеширование работает правильно, и скрипт php запускается только раз в минуту, а другие запросы обслуживаются из кеша .

Однако выдача следующего запроса:

GET /script.php HTTP/1.1
Host: example.com
Connection: close
If-Modified-Since: Sun, 20 Jun 2021 11:30:30 GMT

Запускает php-скрипт каждый раз с:

X-Cache-Detail: "cache miss: attempting entity save" from example.com

в ответе.

Я использую Apache 2.4.29 в Ubuntu 18.04.

0
задан 20 June 2021 в 11:42
1 ответ

Mod-Cache Manual from Apache.org

https://httpd.apache.org/ docs/2.4/mod/mod_cache.html

Использование пользовательских журналов для выявления проблемы

CustomLog "cached-requests.log" common env=cache-hit
CustomLog "uncached-requests.log" common env=cache-miss
CustomLog "revalidated-requests.log" common env=cache-revalidate
CustomLog "invalidated-requests.log" common env=cache-invalidate

Включить заголовок X-Cache-Detail

CacheDetailHeader on

Установить значение «Игнорировать строки управления кэшем запросов»

CacheIgnoreCacheControl On
CacheIgnoreQueryString on

Использование Токен сеанса, такой как url.com/my.php?jsessionid=123, не должен кэшироваться или даже отдельно

CacheIgnoreURLSessionIdentifiers jsessenionid

Используйте МИНИМАЛЬНЫЙ измененный коэффициент, чтобы некэшированный запрос был доставлен 0,0 = 0% или 1,0 = 100%

CacheLastModifiedFactor 0.99

Установите минимальное время для действительного кэширования (по умолчанию 0)

CacheMinExpire 3600

Удалите заголовок if-Modfied, прежде чем он примет меры

Header unset Last-Modified 
* Can also be used in htaccess

Это больше для отладки сначала, так как он не помещается в комментарий, но должен помочь Inc повысить кэширование любого объекта.

0
ответ дан 25 June 2021 в 09:29

Теги

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