Обратный прокси Apache 2.4 предоставляет устаревший контент для бэкенда Tomcat / Confluence.

Вопрос или проблема

Окружение: 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 для более глубокого понимания ситуации.

Оцените материал
Добавить комментарий

Капча загружается...