Я запускаю веб-сайт Drupal 8, і коли переглядаю будь-яку сторінку, я отримую звичайну білу сторінку із наступним повідомленням про помилку.
Наведене ім'я хоста недійсне для цього сервера.
Що це значить? Як це виправити?
Я запускаю веб-сайт Drupal 8, і коли переглядаю будь-яку сторінку, я отримую звичайну білу сторінку із наступним повідомленням про помилку.
Наведене ім'я хоста недійсне для цього сервера.
Що це значить? Як це виправити?
Відповіді:
Це повідомлення про помилку надходить із функції, яка була додана в 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.
Якщо ви налаштували це налаштування і бачите це повідомлення, то це, ймовірно, означає, що ви зіпсували синтаксис регулярного виразу. У цьому випадку візьміть перший приклад і скопіюйте / вставте у свої налаштування, а потім відредагуйте його, щоб відобразити ім'я хоста, з якого працює ваш сайт.
для установки localhost ви можете використовувати наступний код у вашому файлі settings.php
$settings['trusted_host_patterns'] = array(
'^localhost$','^YOUR_IP_ADDRESS$'
);
Це відбувається тому, що 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 для нечесних цілей. Якщо ваш веб-сайт працює лише у вашому локальному регіоні, то вам слід добре.
Див.: Нове налаштування для конфігурації довіреного імені хоста .
Це питання також виникне, якщо у вас є
<VirtualHost *:443>
коли ти повинен був
<VirtualHost *:80>
налаштуйте в не-ssl налаштування (наприклад, для середовищ розробки / тестування) і спробуйте отримати доступ до сайту на порту 80
Це пов'язано з надійною конфігурацією хосту сервера. Він може створюватись при зміні доменного імені або '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$',
);