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ć?

mpdonadio
źródło
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.

mpdonadio
źródło
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$'
 );
Mohan Gathala
źródło
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 .

kenorb
źródło
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

użytkownik356540
źródło
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$',
);
Jimmy
źródło