Was bedeutet "Der angegebene Hostname ist für diesen Server nicht gültig"?


64

Ich verwende eine Drupal 8-Website, und wenn ich zu einer Seite navigiere, wird eine einfache weiße Seite mit der folgenden Fehlermeldung angezeigt.

Der angegebene Hostname ist für diesen Server nicht gültig.

Was bedeutet das? Wie behebe ich das?


2
Wenn dieses Problem beim Konfigurieren einer lokalen Entwicklungsumgebung auftritt, lesen Sie die hier beschriebene Lösung.
Patrick Kenny

Antworten:


78

Diese Fehlermeldung stammt von einer Funktion , die Drupal 8 zum Schutz vor HTTP-Host-Header-Angriffen hinzugefügt wurde . Die Funktion wird auch im Änderungsdatensatz beschrieben , der für den Patch generiert wurde.

Im Wesentlichen war es möglich, den HTTP-Host-Header für schändliche Zwecke zu fälschen und Drupal dazu zu verleiten, in mehreren Subsystemen (insbesondere bei der Link-Generierung) einen anderen Domain-Namen zu verwenden. Mit anderen Worten, der HTTP-Host-Header muss als Benutzereingabe betrachtet werden und ist nicht vertrauenswürdig.

Um dem entgegenzuwirken $settings['trusted_host_patterns'], wurde Drupal 8 eine neue Einstellung hinzugefügt, um eine Liste "vertrauenswürdiger" Hostnamen zu konfigurieren, auf denen die Site ausgeführt werden kann. Die Einstellung muss ein Array von Mustern für reguläre Ausdrücke ohne Begrenzer sein, die die Hostnamen darstellen, deren Ausführung Sie zulassen möchten.

Wenn Sie Ihre Site beispielsweise von einem einzigen Hostnamen "www.example.com" aus betreiben, sollten Sie diesen zu Ihren Einstellungen hinzufügen (normalerweise zu finden unter ./sites/default/settings.php):

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

Beachten Sie ^, \.und $. Dies ist die PCRE-Syntax . Dies bedeutet nur, dass Sie "www.example.com" genau zuordnen möchten, ohne dass am Anfang und am Ende etwas anderes hinzukommt, und dass die Punkte als Punkte und nicht als Platzhalterzeichen behandelt werden sollen.

Wenn Sie von "example.com" ausführen, verwenden Sie einfach:

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

Wenn Sie eine Site mit mehreren Domänen und / oder Unterdomänen ausführen müssen und keine kanonische URL-Umleitung durchführen, sieht Ihre Einstellung folgendermaßen aus:

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

Auf diese Weise kann die Site alle Varianten von example.com und example.org ausführen, einschließlich aller Unterdomänen.

Sobald Sie $settings['trusted_host_patterns']den richtigen Wert eingestellt haben, sollten Sie wieder zu Ihrer Site navigieren können.

Sie können den Status Ihrer Einstellungen für vertrauenswürdige Hosts auch auf der Statusberichtsseite unter admin / reports / status überprüfen

Wenn Sie die Einstellung vollständig entfernen, wird der vertrauenswürdige Hostmechanismus nicht verwendet, und auf der Seite mit dem Statusbericht wird ein Fehler angezeigt. Darüber hinaus ist Ihre Site möglicherweise auch anfällig für HTTP-Host-Header-Angriffe.

Wenn Sie diese Einstellung konfiguriert haben und diese Meldung sehen, bedeutet dies wahrscheinlich, dass Sie die Syntax für reguläre Ausdrücke durcheinander gebracht haben. Nehmen Sie in diesem Fall das erste Beispiel, kopieren Sie es / fügen Sie es in Ihre Einstellungen ein und bearbeiten Sie es, um den Hostnamen wiederzugeben, unter dem Ihre Site ausgeführt wird.


5
Ich bin einer der Autoren des Patches und habe auch den ursprünglichen Entwurf des Änderungsdatensatzes für den Patch geschrieben (von dem ein Großteil des obigen Textes stammt). Diese Frage und Antwort soll die Fehlermeldung "hohe Googlability" geben, falls jemand darauf stößt. Wenn Sie der Meinung sind, dass Sie diese Einstellung besser erklären können, können Sie gerne Ihre eigene Antwort hinzufügen. Möglicherweise machen wir auch dieses CW.
mpdonadio

Es gibt unzählige Konfigurationen, bei denen der Drupal-Server nicht direkt erreichbar ist, sondern sich hinter einem Reverse-Proxy befindet, und dies ist nur ein Ärgernis. Es sollte einen sauberen Abmeldemechanismus geben.

Ich glaube es ist jetzt, es gab Versuche, es automatisch im Installer zu setzen, aber das wurde vorerst wieder entfernt. Wenn Sie die vertrauenswürdigen Hostnamen nicht festlegen, findet keine Überprüfung statt. Außerdem habe ich gerade erst die Verbindung zwischen mpdonadio und MPD hergestellt :)
Berdir

Ja, die automatische Konfiguration wurde aus dem Patch entfernt, für den ein Commit durchgeführt wurde. Es ist momentan "Opt-in", aber wir werden Sie warnen, wenn es nicht gesetzt ist. Es gibt ein Follow-up, drupal.org/node/2404259 , um es im Installationsprogramm festzulegen . @Berdir, ich hatte vor einiger Zeit eine Internet-Identitätskrise und als ich hier Mod wurde, wollte ich meinen Spitznamen nicht ändern :) Mein Git-Benutzername, wenn auch anders ...
mpdonadio

Wenn ich '^ theming \ .dev $' verwende, tritt folgende Fehlermeldung auf: UnexpectedValueException: Nicht vertrauenswürdiger Host "localhost" in Symfony \ Component \ HttpFoundation \ Request-> getHost () (Zeile 1221 von core / vendor / symfony / http / Symfony / Component / HttpFoundation / Request.php).
Axel Briche

6

Für die Installation von localhost können Sie den folgenden Code in Ihrer settings.php-Datei verwenden

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

3

Dies geschieht, weil trusted_host_patternsVariable in Ihrer Einstellungsdatei. Wenn Sie in der lokalen Umgebung arbeiten und diese überschreiben möchten, definieren Sie den folgenden Abschnitt in Ihrer settings.local.phpDatei:

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

Oder allgemeineres Muster :

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

Oder spezifischer für die lokalen Umgebungen :

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

Dies ist die einfachste Lösung, wird jedoch nicht empfohlen, da Sie die richtigen Werte festlegen sollten, um zu vermeiden, dass der HTTP-Host-Header für schändliche Zwecke gefälscht wird. Wenn Ihre Website nur auf Ihrem lokalen Server ausgeführt wird, sollte es Ihnen gut gehen.

Siehe: Neue Einstellung für die Konfiguration von vertrauenswürdigen Hostnamen .


1
Sie sollten mehr positive Stimmen für diese Antwort haben, da dies die ordnungsgemäße Verwendung der Datei settings.local.php definiert. Diese Einstellungen sollten wahrscheinlich nicht in settings.php definiert werden, da dies den Zweck zunichte macht, eine andere Einstellungsdatei für Ihre lokale Umgebung zu haben, die mit 3 # -Zeichen ein- und ausgeschaltet werden kann. Ein Link oder einige Informationen zum lokalen Setup können mehr Stimmen bringen.
Dimmech

2

Dieses Problem tritt auch bei Ihnen auf

<VirtualHost *:443>

wann solltest du haben

<VirtualHost *:80>

Richten Sie es in einem Nicht-SSL-Setup ein (z. B. für Entwickler- / Testumgebungen) und versuchen Sie, über Port 80 auf die Site zuzugreifen


0

Dies liegt an der Konfiguration des vertrauenswürdigen Hosts des Servers. Es kann produzieren, wenn Sie den Domainnamen oder ändern 'trusted_host_patterns'. Um die Probleme zu beheben, fügen Sie Ihre neue Domain auf die DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(Ex: sites/defaults/settings.php)

Beispiel: Domain name = newdomain.com

$settings['trusted_host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.