Кэширование строк запроса в прокси-сервере Apache

Кэширование строк запроса в прокси-сервере Apache

У меня были проблемы с запуском disk_cache, и я не мог понять, почему. Это был соответствующий раздел из моей конфигурации

# Caching
CacheRoot   "/var/cache/apache2/"
CacheEnable disk /

Я засекала время для запроса, подобного следующему, но кэширование, похоже, не дало эффекта, поскольку ответ в любом случае занимал 7 секунд.

time curl -k https://customer1.myhosts.com/appserver/slow_request?param1=fooBar

После включения ведения журнала отладки я обнаружил в журналах следующее утверждение, объясняющее, почему не выполнялось кэширование:

[Пт авг 24 17:22:01 2012] [debug] mod_cache.c(552): кэш: не кэшируется. Причина: строка запроса присутствует, но нет явного времени истечения срока действия

Оказывается, об этом упоминается в руководстве по кэшированию Apache:

Если URL-адрес включает строку запроса (например, из метода GET HTML-формы), он не будет кэшироваться, если только в ответе не указан явный срок действия путем включения заголовка «Expires:» или директивы max-age или s-maxage заголовка «Cache-Control:» в соответствии с разделами 13.9 и 13.2.1 RFC2616.

Хорошо, поэтому я добавлю следующее (взято изЭта статья) в Apache

Header set Cache-Control "max-age=290304000"

Это все еще не работает, на этот раз я получаю сообщение

"... не кэшировано. Причина: отсутствуют заголовки Last-Modified, Etag или Expires"

Теперь это уже другая история. Как мне решить эту проблему, не трогая код сервера приложений?

решение1

Единственный способ заставить Apache кэшировать ответы от сервера приложений — это добавить заголовки, которые Apache запрашивал в журнале, к ответам. Это оказалось довольно просто, если создать фильтр JAX-RS.

Поэтому после добавления Last-Modified и заголовка Expires единственное, что нужно было сделать, это добавить следующие две строки в конфигурацию Apache.

CacheRoot   "/var/cache/apache2/"
CacheEnable disk / 

решение2

Связанный контент