AXAMIT logo
Домашняя Страница Блог 2016 AEM Dispatcher. Часть 3: Настройки рабочей среды для включения кэширования

AEM Dispatcher. Часть 3: Настройки рабочей среды для включения кэширования

AEM Dispatcher. Часть 3: Настройки рабочей среды для включения кэширования

Предыдущие части:


Кэширование - это ключевой фактор производительности, а также источник проблем в случае его некорректной настройки. В этой части вы узнаете про корректную настройку кэширования на локальном окружении, а также где хранятся кешированные файлы.

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

  • в HTTP запросе используется метод GET;
  • у запрашиваемого URL есть расширение (например, html или xml);
  • у запрашиваемого URL нет параметров после расширения;
  • если в настройках диспетчера AllowAuthorized не равно 1, то у запроса нет заголовка авторизации (Authorization).

Настройки устанавливаются в конфигурационном файле диспетчера. В нашем демонстрационном примере это файл conf/dispatcher.any. Конфигурационный файл содержит множество однозначных или многозначных свойств, которые управляют поведением диспетчера:

  • названия свойств начинаются с символа прямого слэша '/';
  • многозначные свойства содержат элементы внутри фигурных скобок '{' и '}';
  • комментарии начинаются с символа решётки '#'.

Рендеры (renders)

Сперва для диспетчера следует указать рендеры. Рендер (render) - это AEM-сервер, от которого диспетчер получает контент, который можно кэшировать. Если вы укажете более одного рендера в конфигурационном файле, тогда диспетчер будет применять балансировку нагрузки между этими AEM-серверами. В нашем примере мы должны указать только один рендер, которым является наш публичный AEM-сервер.

    /renders
      {
      /rend01
        {
        /hostname "localhost"
        /port "4503"
        }
      }

Теперь можете перезапустить httpd-сервер и проверить, что диспетчер способен запрашивать ресурсы от публичного AEM-сервера. Например, если у вас есть работающая страница http://localhost:4503/content/geometrixx/en.html, значит диспетчер должен работать на странице http://localhost/content/geometrixx/en.html. Заметьте, что мы не указываем порт url-запроса, потому что диспетчер (более точно, httpd-сервер) работает на порте 80, который в браузерах используется по умолчанию.

Фильтры

Секцией фильтров (/filter) можно пользоваться для установки допустимых для диспетчера HTTP-запросов. Все остальные запросы возвращаются веб-серверу с кодом ошибки 404 (страница не найдена). Давайте откроем доступ ко всем ресурсам для нашего примера.

    /filter
      {
      /0001 { /type "allow" /glob "*" }
      }

Типы (/type) фильтров: “allow” (разрешить) или “deny” (запретить).

Глобальное выражение (/glob) будет сравниваться с входящей строкой запроса, например:

/0001 { /type "allow" /glob "* /index.html *" }

Это глобальное выражение соответствует запросу “GET /index.html HTTP/1.1”, но не соответствует “GET /index.html?a=b HTTP/1.1”.

Кроме глобальных выражений можно фильтровать отдельно "url", "method", "protocol", "extension". Также вместо "url" можно применять "path", "selectors", "extension", "suffix".

Когда к запросу применяется много шаблонов фильтров, тогда срабатывает последний подходящий.

После установки вышеуказанного фильтра вы можете перезапустить httpd-сервер и убедиться, что теперь у диспетчера есть доступ ко всем ресурсам публичного AEM-сервера. Конечно в настоящей промышленной рабочей среде вам следует запретить доступ к некоторым ресурсам в целях безопасности, но в нашем демонстрационном примере мы просто открыли доступ ко всем ресурсам.

Кэш

Секция кэширования определяет ресурсы, которые будут кэшироваться диспетчером. В этой секции находится блок правил, которые очень похожи на правила фильтров. Кроме правил секция кэширования включает некоторые дополнительные настройки. Например, /docroot определяет местонахождение папки, в которой сохраняются кэшируемые файлы. Значение должно быть точно таким, как у корневой папки с документам (document root) веб-сервера для того, чтобы диспетчер и веб-сервер работали с одинаковыми файлами.

В целях демонстрации давайте установим /docroot для хранения кэша и разрешим кэширование всех ресурсов, получаемых от нашего рендера (публичного AEM-сервера).

    /cache
      {
      /docroot "/Apache22/htdocs"
      /rules
        {
        /0000
          {
          /glob "*"
          /type "allow"
          }
        }
      }

После этих изменений вы можете перезапустить httpd-сервер, открыть новое приватное окно браузера для неавторизованного доступа, не использующего заголовок авторизации (в браузере chrome нажмите ctrl+shift+n, в браузере firefox нажмите ctrl+shift+p), и посетить следующую страницу: http://localhost/content/geometrixx/en/products.html. Кэшированные ресурсы должны появиться внутри папки htdocs. Ресурсы хранятся в иерархии, соответствующей их url-адресам: папки формируют пути к ресурсам, а статические html-файлы содержат сгенерированный контент ресурса.

Заголовки

Вы видели, что в кэшированных html-файлах содержится только html-контент. Но что нам тогда надо делать, если мы хотим кэшировать заголовки ответов, получаемых от рендеров? Например, если ответ от рендера содержит заголовок "Content-Type", который определяет кодировку, тогда html-контент без этого заголовка может отображаться неправильно без точных настроек кодировки. Для этого в конфигурационном файле диспетчера есть блок заголовков /headers, лежащий внутри секции кэширования /cache. Давайте установим кэширование некоторых популярных и полезных заголовков.

/cache
{
      /headers
        {
        "Cache-Control"
        "Content-Disposition"
        "Content-Type"
        "Expires"
        "Last-Modified"
        "X-Content-Type-Options"
        }
}

После изменения заголовков в конфигурационном файле диспетчера удалите весь кэш из папки htdocs и перезапустите httpd-сервер, а затем снова зайдите на страницу http://localhost/content/geometrixx/en/products.html. В итоге в папке htdocs/content/geometrixx/en вы можете обнаружить не только закэшированный html-файл products.html, но и файл products.html.h рядом с исходным html-файлом products.html. Этот *.h файл содержит заголовки для соответствующего кэшированного html-файла.

Резюме

Вы можете быстро включить кэширование с помощью следующих начальных настроек в конфигурационном файле диспетчера:

  1. установите рендеры:
  2. установите фильтры:
  3. установите htdocs и правила в секции кэширования;
  4. установите заголовки для хранения http-заголовков.

Подробная и полезная документация доступна на странице: https://docs.adobe.com/docs/en/dispatcher/disp-config.html

Автор: Виталий Киселев, AEM Разработчик

Автор

Виталий Киселев
  • Виталий Киселев
  • Certified AEM Developer