Drupal 9 за БН amazon cloudfront

Типичная проблема сайта, когда тот оказывается за балансировщиком нагрузки (load balancer), это несоответствие части заголовков запроса клиента и тех заголовков, которые передаются балансировщиком серверу. Чаще всего мы сталкиваемся с этим при запуске сайта на продакшн, где сайт впервые оказывается на HTTPS.

В Drupal 6/7 была возможность установить значение $base_url, что решало все возможные проблемы. В 8ке эту настройку отправили в утиль.

Если cформированы верно заголовки балансировщика:

  • X_FORWARDED_HOST
  • X_FORWARDED_PORT
  • X_FORWARDED_PROTO
  • X_FORWARDED_FOR

И настройки в файле settings.php также верно указывают на прокси сервера:

То никаких проблем не возникает.

Но aws cloudfront определяет собственные заголовки FORWARDED —

Что приводит к неправильному формированию ссылок. К примеру, canonical и shortlink содержат не правильный протокол — http вместо https.

Здесь проблема заключается в том, что значение $_SERVER[‘HTTP_CLOUDFRONT_FORWARDED_PROTO’] должно быть в $_SERVER[‘HTTP_X_FORWARDED_PROTO’].

Первая мысль — это переопределить значение $_SERVER[‘HTTP_X_FORWARDED_PROTO’] в файле settings.php. Но это бесполезно, т.к. верное значение переменной должно быть установлено до операции (это в index.php):

Потому правильное решение — это установить значение заголовка в настройках вашего сервера или (если это возможно) поправить настройки cloudfront.

Есть и универсальное решение (хоть и не кононичное) — добавить переопределение в index.php:

Мало букафф? Читайте есчо !

Превышение лимитов памяти при запросе перевода в модуле tmgmt

Октябрь 1, 2024 г.

Это проблема рекурсии при сборе информации о статье. Модуль сканирует ссылочные поля (reference entity fields) и может попасть в своеобразную рекурсивную петлю. К примеру, статья ссылается на параграф, а тот ссылается на эту же статью. Т.к. глубина ...

Читать

Вывод всех локальных переменных в twig

Июнь 3, 2024 г.

Все видимые переменные шаблона можно посмотреть в переменной _context. Вывести их имена, используя перебор циклом for: [crayon-69e8598461a3f913855725/] В Drupal, если вы используете модуль devel, в twig будет доступна функция dpm: [crayon-69e8598461a49511015129/]

Читать

Подготовка строки для использования в качестве имени html класса

Январь 18, 2022 г.

То, что в семерке выполняется функцией drupal_html_class(), в Drupal 8 реализовано в виде статического метода\Drupal\Component\Utility\Html::getClass($str). Данная функция также востребована в шаблонах (twig). Здесь вы можете использовать фильтр ...

Читать

Устанавливаем флажок FILE_STATUS_PERMANENT для файла в DRUPAL 9

Август 7, 2021 г.

Если файл загружен через поле, созданное в конструкторе полей какого либо entity Drupal, то соответствующий модуль, предоставляющий функционал загрузки файла, сам обеспечит установку необходимого статуса. Что если поле было создано программно, и требуется ...

Читать
 

Комментарии к «Drupal 9 за БН amazon cloudfront»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: