Apache 2.4 mod_cache + mod_cache_disk + modjk: 304 не изменен, но длина содержимого изменена
Я схожу с ума от mod_cache!
Моя текущая настройка:
Apache 2.4 на Ubuntu с:
- mpm_worker
- mod_jk
- mod_cache
- mod_cache_disk
- mod_expires
- mod_deflate
HTTP и HTTPS-запросы уравновешиваются modjk до 5 Tomcat AppServers. Я хочу кешировать медиаресурсы, обслуживаемые экземплярами Tomcat, но у меня возникают проблемы с mod_cache.
Моя текущая конфигурация кеша:
CacheRoot /srv/volatile/cache
CacheDirLevels 3
CacheDirLength 2
CacheEnable disk /medias
# Currently active:
CacheQuickHandler off
CacheLock on
CacheLockPath /tmp/mod_cache-lock
CacheLockMaxAge 5
CacheIgnoreHeaders Set-Cookie
# This is another configuration i tried:
#CacheIgnoreNoLastMod On
#CacheIgnoreCacheControl On
#CacheIgnoreQueryString On
#CacheIgnoreHeaders Set-Cookie
Я проверил много учебников и руководств, но безуспешно.
Apache получает первый запрос в порядке, следующий запрос завершается ошибкой со странными ошибками:
Recalled cached URL info header https://...
Recalled headers for URL https://...
Adding CACHE_SAVE filter for /medias...
Adding CACHE_REMOVE_URL filter for /medias...
cache: /media... responded with an uncacheable 304, retrying the request. Reason: contradiction: 304 Not Modified, but Content-Length modified
cache: Removing url https://
Deleting /srv/volatile/cache/.../.header from cache.
Deleting /srv/volatile/cache/.../.data from cache.
Deleting directory /srv/volatile/cache/.../7n from cache.
URL https://... failed the size check (0 < 1)
Я подумал, что это может быть проблема с балансировкой нагрузки из-за обхода нескольких узлов или чего-то в этом роде, но поведение не является детерминированным. Тесты с использованием apache-bench & jmeter показали, что 60-70% запросов были неудачными, так что не каждый X-запрос не удался.
Если установлена опция CacheIgnoreCacheControl On, запросы бросили jmeter и apache-bench не удалось, но доступ через браузер не прошел.
У кого-нибудь есть идеи?
Спасибо таулант
2 ответа
Я думаю, что это покрыто ошибкой mod_cache 56881, которая исправлена в Apache 2.4.11.
Причина этого находится за этой линией:
responded with an uncacheable 304, retrying the request. Reason: contradiction: 304 Not Modified, but Content-Length modified
Ваш сервер правильно отвечает на ответ 304, но неправильно отвечает на заголовок Content-Length, возможно, с нулевым значением.