Co oznacza „Podana nazwa hosta jest niepoprawna dla tego serwera”?


64

Prowadzę witrynę Drupal 8, a kiedy przeglądam dowolną stronę, otrzymuję zwykłą białą stronę z następującym komunikatem o błędzie.

Podana nazwa hosta jest nieprawidłowa dla tego serwera.

Co to znaczy? Jak to naprawić?


2
Jeśli masz problem z konfiguracją lokalnego środowiska programistycznego, zapoznaj się z rozwiązaniem przedstawionym tutaj.
— Patrick Kenny

Odpowiedzi:


78

Ten komunikat o błędzie pochodzi z funkcji, która została dodana do Drupala 8 w celu ochrony przed atakami nagłówka hosta HTTP . Ta funkcja jest również opisana w rekordzie zmian wygenerowanym dla łatki.

Zasadniczo można było sfałszować nagłówek hosta HTTP w niecnych celach i oszukać Drupala, aby używał innej nazwy domeny w kilku podsystemach (szczególnie w generowaniu linków). Innymi słowy, nagłówek hosta HTTP należy traktować jako dane wejściowe użytkownika i nie można mu ufać.

Aby temu zaradzić, $settings['trusted_host_patterns']do Drupala 8 dodano nowe ustawienie, aby skonfigurować listę „zaufanych” nazw hostów, z których witryna może działać. Ustawienie musi być tablicą wzorców wyrażeń regularnych, bez ograniczników, reprezentujących nazwy hostów, z których chcesz zezwolić na uruchamianie.

Na przykład, jeśli prowadzisz witrynę z pojedynczą nazwą hosta „www.example.com”, powinieneś dodać ją do swoich ustawień (zwykle dostępnych pod adresem ./sites/default/settings.php):

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

Zauważ, że ^, \.i $. Są to składnia PCRE . Oznacza to po prostu, że chcesz dokładnie dopasować „www.example.com”, bez żadnych dodatkowych elementów na początku i na końcu, i że kropki należy traktować jak kropki, a nie znaki wieloznaczne.

Jeśli korzystasz z „example.com”, po prostu użyj:

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

Jeśli potrzebujesz uruchomić witrynę z wieloma domenami i / lub subdomenami i nie dokonujesz kanonicznego przekierowania adresu URL, Twoje ustawienie wyglądałoby mniej więcej tak:

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

Pozwala to na uruchomienie witryny ze wszystkich wariantów example.com i example.org, z uwzględnieniem wszystkich subdomen.

Po ustawieniu $settings['trusted_host_patterns']właściwej wartości powinieneś ponownie móc przejść do swojej witryny.

Możesz także sprawdzić stan ustawień swojego zaufanego hosta na stronie raportu o stanie, która znajduje się na stronie admin / raporty / status

Jeśli usuniesz to ustawienie całkowicie, mechanizm zaufanego hosta nie będzie używany, a na stronie raportu o stanie pojawi się błąd. Ponadto witryna może być narażona na ataki na nagłówki hosta HTTP.

Jeśli masz skonfigurowane to ustawienie i widzisz ten komunikat, oznacza to prawdopodobnie, że zmieniłeś składnię wyrażeń regularnych. W takim przypadku weź pierwszy przykład i skopiuj / wklej do swoich ustawień, a następnie edytuj go, aby odzwierciedlał nazwę hosta, z którego działa witryna.


5
Jestem jednym z autorów łaty, a także napisałem oryginalny projekt Zmiany Rekordu dla łatki (stąd pochodzi duża część powyższego tekstu). To pytanie i odpowiedź ma na celu nadanie komunikatowi o błędzie „wysokiej googlability” na wypadek, gdyby ktoś go spotkał. Dodaj własną odpowiedź, jeśli uważasz, że możesz lepiej wyjaśnić to ustawienie. Możemy również zakończyć to CW.
— mpdonadio

Istnieją konfiguracje bazillionowe, gdy serwer Drupal nie jest dostępny bezpośrednio, ale znajduje się za odwrotnym proxy, a to tylko uciążliwość. Powinien istnieć czysty mechanizm rezygnacji.

Wydaje mi się, że jest teraz, były starania, aby automatycznie ustawić go w instalatorze, ale na razie zostało to ponownie usunięte. Sprawdzanie poprawności nie nastąpi, jeśli nie ustawisz zaufanych nazw hostów. Poza tym dopiero teraz nawiązałem połączenie między mpdonadio i MPD :)
— Berdir

Tak, automatyczna konfiguracja została usunięta z zatwierdzonej poprawki. Obecnie jest to „opt-in, ale ostrzeżymy cię, jeśli nie jest ustawione”. Istnieje kontynuacja, drupal.org/node/2404259 , aby ustawić ją w instalatorze. @Berdir, jakiś czas temu miałem kryzys tożsamości internetowej, a kiedy zostałem tu modem, nie chciałem zmieniać pseudonimu :) Moja nazwa użytkownika git, jeśli inna, też ...
— mpdonadio

Kiedy używam „^ theming \ .dev $”, pojawia się następujący błąd: Komunikat o błędzie U nieoczekiwanyWartość wyjątkowa: Niezaufany host „localhost” w Symfony \ Component \ HttpFoundation \ Request-> getHost () (wiersz 1221 rdzenia / dostawcy / symfony / http -foundation / Symfony / Component / HttpFoundation / Request.php).
— Axel Briche

6

do instalacji localhost możesz użyć następującego kodu w pliku settings.php

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

3

Dzieje się tak, ponieważ trusted_host_patternszmienna w pliku ustawień. Jeśli pracujesz w środowisku lokalnym i chcesz to zastąpić, zdefiniuj następującą sekcję w swoim settings.local.phppliku:

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

Lub bardziej ogólny wzór :

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

Lub bardziej specyficzne dla lokalnych środowisk :

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

Jest to najprostsze rozwiązanie, ale nie jest zalecane, ponieważ należy ustawić odpowiednie wartości, aby uniknąć fałszowania nagłówka hosta HTTP w niecnych celach. Jeśli twoja strona działa tylko w twoim lokalnym, to powinieneś być w porządku.

Zobacz: Nowe ustawienie konfiguracji zaufanej nazwy hosta .


1
Powinieneś mieć więcej głosów pozytywnych dla tej odpowiedzi, ponieważ określa ona prawidłowe użycie pliku settings.local.php. Te ustawienia prawdopodobnie nie powinny być zdefiniowane w pliku settings.php, nie pozwala to na utworzenie innego pliku ustawień dla lokalnego środowiska, który można włączyć / wyłączyć za pomocą 3 # znaków. Link lub niektóre informacje o konfiguracji lokalnej mogą zyskać więcej głosów.
— dimmech

2

Ten problem występuje również, jeśli masz

<VirtualHost *:443>

kiedy powinieneś

<VirtualHost *:80>

skonfigurowane w konfiguracji innej niż ssl (jak w środowiskach deweloperskich / testowych) i spróbuj uzyskać dostęp do witryny na porcie 80


0

Wynika to z konfiguracji zaufanego hosta serwera. Może produkować po zmianie nazwy domeny lub 'trusted_host_patterns'. Aby rozwiązać ten probleme, dodać nową domenę do DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(np sites/defaults/settings.php)

Przykład: nazwa domeny = newdomain.com

$settings['trusted_host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.