Что означает «Предоставленное имя хоста недействительно для этого сервера»?

Я запускаю сайт Drupal 8, и когда я просматриваю любую страницу, я получаю простую белую страницу со следующим сообщением об ошибке.

  

Предоставленное имя хоста недействительно для этого сервера.

Что это значит? Как это исправить?

8
50 голосов | спросил 4 revs, 2 users 81%
mpdonadio
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

4 ответа


54

Это сообщение об ошибке появляется из функции , которая была добавлена ​​в Drupal 8 до защищать от атак HTTP Host Host . Эта функция также описана в записи изменений , которая была сгенерирована для патча.

По существу, можно было обмануть заголовок хоста HTTP для гнусных целей и трюк Drupal в использовании другого имени домена в нескольких подсистемах (в частности, генерация ссылок). Другими словами, заголовок HTTP Host должен считаться пользователем, а не доверенным.

Чтобы бороться с этим, в Drupal 8 был добавлен новый параметр, $settings['trusted_host_patterns'], чтобы настроить список «доверенных» имен хостов, с которых может работать сайт. Этот параметр должен быть массивом шаблонов регулярных выражений без разделителей, представляющих имена хостов, от которых вы хотите разрешить запуск.

Например, если вы используете свой сайт с одного имени хоста «www.example.com», вы должны добавить его к своим настройкам (обычно это находится в ./sites/default/settings.php):

$settings['trusted_host_patterns'] = array(
  '^www\.example\.com$',
);

Обратите внимание на ^, \. и $. Это Синтаксис PCRE . Это просто означает, что вы хотите точно сопоставить «www.example.com», ничего лишнего в начале и конце, и что точки должны обрабатываться как точки, а не подстановочные знаки.

Если вы используете «example.com», просто используйте:

$settings['trusted_host_patterns'] = array(
  '^example\.com$',
);

Если вам нужно запустить сайт из нескольких доменов и /или поддоменов и не выполнять каноническое перенаправление URL-адресов, то ваша настройка будет выглядеть примерно так:

$settings['trusted_host_patterns'] = array(
  '^example\.com$',
  '^.+\.example\.com$',
  '^example\.org',
  '^.+\.example\.org',
);

Это позволяет сайту сбежать от всех вариантов example.com и example.org, включая все поддомены.

Как только вы настроите $settings['trusted_host_patterns'] на правильное значение, вы сможете снова перейти на свой сайт.

Вы также можете проверить статус ваших настроек доверенного хоста на странице отчета о состоянии, которая находится в папке admin /reports /status

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

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

ответил Johann 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 11 Sep 2016 22:35:38 +0300 2016, 22:35:38
4

для установки localhost вы можете использовать следующий код в файле settings.php

$settings['trusted_host_patterns'] = array(
   '^localhost$','^YOUR_IP_ADDRESS$'
 );
ответил Johann 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 11 Sep 2016 22:35:38 +0300 2016, 22:35:38
1

Это происходит из-за переменной trusted_host_patterns в файле настроек. Если вы работаете в локальной среде и хотите переопределить это, определите следующий раздел в файле settings.local.php:

/*
 * Drupal Trusted Host Patterns
 */
$settings['trusted_host_patterns'] = [];

Или более общий шаблон :

$settings['trusted_host_patterns'] = [ '.*' ];

Или более для локальных сред :

$settings['trusted_host_patterns'] = array(
  '^172\.20.\0.\3$',
  '^localhost$',
);

Это самое простое решение, но не рекомендуется, так как вы должны установить правильные значения, чтобы избежать подделки заголовка HTTP Host для гнусных целей. Если ваш сайт работает только на вашем локальном компьютере, тогда вам все будет в порядке.

Смотрите: Новый параметр для конфигурации доверенного имени хоста .

ответил Johann 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 11 Sep 2016 22:35:38 +0300 2016, 22:35:38
0

Это связано с доверительной настройкой хоста serveur. Он может появиться при изменении имени домена или 'trusted_host_patterns'. Чтобы устранить проблему, добавьте свой новый домен в DRUPAL_ROOT/sites/SITE_FOLDER/settings.php (Пример: sites/defaults/settings.php)

Пример: имя домена = newdomain.com

$settings['trusted_host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
ответил Johann 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 11 Sep 2016 22:35:38 +0300 2016, 22:35:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132