Що означає "Наведене ім'я хоста недійсне для цього сервера"?


64

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

Наведене ім'я хоста недійсне для цього сервера.

Що це значить? Як це виправити?


2
Якщо у вас виникли проблеми з налаштуванням локального середовища розробки, перегляньте рішення, викладене тут.
Патрік Кенні

Відповіді:


78

Це повідомлення про помилку надходить із функції, яка була додана в Drupal 8 для захисту від атак заголовка HTTP Host . Ця характеристика також описана в записі змін, який був створений для виправлення.

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

Для боротьби з цим $settings['trusted_host_patterns']до Drupal 8 було додано нове налаштування для налаштування списку "довірених" імен хостів, з яких може працювати веб-сайт. Налаштування має бути масивом регулярних виразів виразів без роздільників, що представляють імена хостів, з яких ви хочете дозволити запускати.

Наприклад, якщо ви керуєте своїм сайтом з одного імені хоста "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']потрібного значення ви зможете знову перейти на свій сайт.

Ви також можете перевірити стан надійних налаштувань хоста на сторінці звіту про стан, що знаходиться у адміністратора / звітів / статусу

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

Якщо ви налаштували це налаштування і бачите це повідомлення, то це, ймовірно, означає, що ви зіпсували синтаксис регулярного виразу. У цьому випадку візьміть перший приклад і скопіюйте / вставте у свої налаштування, а потім відредагуйте його, щоб відобразити ім'я хоста, з якого працює ваш сайт.


5
Я один з авторів патча, а також написав оригінальний проект Запису про зміну патча (звідки походить багато тексту вище). Це питання та відповідь - дати повідомлення про помилку "високої губності", якщо хтось із цим стикається. Будь ласка, не соромтесь додати свою відповідь, якщо ви думаєте, що можете пояснити цю установку краще. Ми можемо також зробити це CW.
mpdonadio

Існує базовий мільйон конфігурацій, коли сервер Drupal недоступний безпосередньо, але стоїть за зворотним проксі, і це лише неприємність. Повинен бути чистий механізм відмови.

Я вважаю, що це зараз, були зусилля, щоб автоматично встановити його в інсталяторі, але це знову було видалено. Перевірка не відбувається, якщо ви не встановите її довірених імен хостів. Також я лише щойно зробив зв'язок між mpdonadio та MPD :)
Бердір,

Так, автоматична конфігурація була вилучена із зробленого патчу. Наразі це "вибір, але ми попередимо вас, якщо він не встановлений". Існує подальший засіб, drupal.org/node/2404259 , щоб встановити його в інсталяторі. @Berdir, у мене був деякий час криза ідентичності в Інтернеті, і коли я став модом тут, я не хотів змінювати прізвисько :) Моє ім'я для git, якщо воно теж інше ...
mpdonadio

Коли я використовую '^ theming \ .dev $', у мене є така помилка: Повідомлення про помилку UnexpectedValueException: Ненадійний хост "localhost" в Symfony \ Component \ HttpFoundation \ Request-> getHost () (рядок 1221 core / vendor / symfony / http -Foundation / Symfony / Component / HttpFoundation / Request.php).
Аксель Бріче

6

для установки localhost ви можете використовувати наступний код у вашому файлі settings.php

$settings['trusted_host_patterns'] = array(
   '^localhost$','^YOUR_IP_ADDRESS$'
 );

3

Це відбувається тому, що 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 для нечесних цілей. Якщо ваш веб-сайт працює лише у вашому локальному регіоні, то вам слід добре.

Див.: Нове налаштування для конфігурації довіреного імені хоста .


1
У вас повинно бути більше грошей на цю відповідь, оскільки вона визначає правильне використання файла settings.local.php. Ці параметри, ймовірно, не слід визначати в settings.php, це перешкоджає призначенню іншого файлу налаштувань для вашого локального середовища, який можна включати / вимикати 3 # символами. Посилання або якась інформація про локальну програму може заробити більше голосів.
dimmech

2

Це питання також виникне, якщо у вас є

<VirtualHost *:443>

коли ти повинен був

<VirtualHost *:80>

налаштуйте в не-ssl налаштування (наприклад, для середовищ розробки / тестування) і спробуйте отримати доступ до сайту на порту 80


0

Це пов'язано з надійною конфігурацією хосту сервера. Він може створюватись при зміні доменного імені або 'trusted_host_patterns'. Для вирішення problème, додати новий домен до DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(Ex: sites/defaults/settings.php)

Приклад: ім'я домену = newdomain.com

$settings['trusted_host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.