Я пытаюсь заставить 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.
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
CacheDetailHeader on
CacheIgnoreCacheControl On
CacheIgnoreQueryString on
CacheIgnoreURLSessionIdentifiers jsessenionid
CacheLastModifiedFactor 0.99
CacheMinExpire 3600
Header unset Last-Modified
* Can also be used in htaccess
Это больше для отладки сначала, так как он не помещается в комментарий, но должен помочь Inc повысить кэширование любого объекта.