Вопрос или проблема
Окружение: Apache 2.4 в режиме обратного прокси на Windows Server 2019 перед Tomcat 8.9.x / Confluence. (Пожалуйста, без советов по смене ОС, это невозможно). Прокси в целом работает хорошо.
Доставка веб-страниц из Confluence работает медленно (доставка содержимого DOM ~ 6s, общее содержимое 7-12s).
Желаемое улучшение: Использование обратного прокси с кэшем на диске для улучшения пользовательского опыта.
Я использовал этот пример конфигурации Confluence (естественно, адаптированный под Windows). Я не использую “Header unset Set-Cookie” или “RequestHeader unset Cookie”, так как это приводит к перенаправлению на страницу входа.
Я намерен не только кэшировать статическое содержимое (путь “/s” для Confluence), но и как можно больше (т.е. корневой путь “/”, кроме “/rest”), так как кэширование только пути “/s” все равно приводит к плохой производительности для большинства страниц.
Текущая конфигурация в целом достигает этой цели (DOM ~ 1,5s).
Проблема: Диск-кэш временно предоставляет устаревшее содержимое после редактирования страниц. Например: объект draw.io получает новый текст “test10”. Сохранено. Через несколько секунд появляется всплывающее окно с сообщением “Эта страница была отредактирована”. Клик приводит к получению старой версии с “test9” (то же самое касается F5). Только если я перехожу на другую страницу и возвращаюсь обратно, будет отображено последнее содержимое.
Текущая конфигурация:
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://localhost:8090/
ProxyPassReverse / http://localhost:8090/
CacheRoot "D:\Apache24\cache"
CacheQuickHandler OFF
<!-- согласно [этой конфигурации][2] -->
CacheIgnoreCacheControl On
CacheDirLevels 2
CacheDirLength 1
<Location "/">
CacheEnable disk
Header set Cache-Control "max-age=2592000, public, must-revalidate"
CacheHeader on
CacheDetailHeader on
</Location>
<Location "/rest">
CacheDisable on
</Location>
Между тем я удалил “CacheLock on” / “CacheLockPath” / “CacheLockMaxAge”, чтобы избежать любых шансов на получение устаревшего содержимого (даже с риском множества запросов на бэкенд).
Ответ или решение
Ваш вопрос о конфигурации обратного прокси Apache 2.4 для Tomcat/Confluence и проблемах с устаревшим контентом, полученным из кэша, является важным и требует комплексного подхода для оптимизации работы и повышения пользовательского опыта.
Анализ проблемы
Вы упомянули, что после редактирования страниц пользователи видят устаревшее содержимое, что указывает на неправильное управление кэшированием. Кэширование является мощным инструментом для оптимизации работы веб-приложений, но требует тщательной настройки, особенно для динамически изменяемого контента.
Рекомендованная конфигурация
1. Настройка заголовков кэширования
Во-первых, необходимо убедиться, что заголовки кэширования на уровне приложения (в вашем случае Confluence) и на уровне прокси (Apache) правильно настроены. В случае, если страница была изменена, Apache должен отказывать в обслуживании кэшированной версии. Для этого можно использовать заголовок Cache-Control
.
2. Конфигурация Apache
Попробуйте следующую конфигурацию для вашего Apache:
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://localhost:8090/
ProxyPassReverse / http://localhost:8090/
CacheRoot "D:\Apache24\cache"
CacheQuickHandler Off
CacheIgnoreCacheControl On
CacheDirLevels 2
CacheDirLength 1
<Location "/">
CacheEnable disk
Header set Cache-Control "max-age=0, no-cache, must-revalidate, private"
Header set Pragma "no-cache"
Header set Expires "Thu, 01 Jan 1970 00:00:00 GMT"
CacheHeader on
CacheDetailHeader on
</Location>
<Location "/rest">
CacheDisable on
</Location>
3. Устранение проблемы со старыми кэшированными страницами
Изменение заголовков кэширования на max-age=0, no-cache, must-revalidate
в секции <Location "/">
заставит браузер и прокси постоянно проверять, не изменился ли контент, прежде чем отдавать кэшированную версию. Также удаления тегов Expires
и Pragma
помогут избежать кэширования.
4. Тестирование и мониторинг
После внесения изменений в конфигурацию, протестируйте производительность и убедитесь, что новые настройки действительно устраняют проблему с устаревшим контентом. Используйте инструменты мониторинга для проверки времени ответа и кэширования.
5. Оптимизация Confluence
Также рассмотрите возможность оптимизации самой Confluence. Это может включать в себя увеличение выделенных ресурсов (памяти, процессора) для Tomcat, обновление конфигураций кэша в самих настройках Confluence или оптимизацию структуры данных для использования в приложении.
Итог
Ваша конфигурация Apache имеет потенциал для значительного улучшения скорости загрузки страниц, однако необходимо уделить внимание правильной настройке заголовков кэширования. Применение предложенных изменений должно помочь вам решить текущую проблему с устаревшим контентом и оптимизировать пользовательский опыт. Продолжайте экспериментировать с параметрами кэша и следите за изменениями в производительности и кэшировании. Если проблемы сохраняются, может потребоваться дальнейшая отладка и анализ журнала Apache для более глубокого понимания ситуации.