Che cosa significa "Il nome host fornito non è valido per questo server"?


65

Sto eseguendo un sito Web Drupal 8 e quando accedo a qualsiasi pagina, ottengo una semplice pagina bianca con solo il seguente messaggio di errore.

Il nome host fornito non è valido per questo server.

Cosa significa questo? Come posso risolvere questo problema?


2
Se si riscontra questo problema con la configurazione di un ambiente di sviluppo locale, vedere la soluzione descritta qui.
Patrick Kenny,

Risposte:


79

Questo messaggio di errore proviene da una funzionalità che è stata aggiunta a Drupal 8 per proteggere dagli attacchi di intestazione dell'host HTTP . La funzione è anche descritta nel record delle modifiche che è stato generato per la patch.

In sostanza, è stato possibile falsificare l' intestazione dell'host HTTP per scopi nefasti e indurre Drupal a utilizzare un nome di dominio diverso in diversi sottosistemi (in particolare la generazione di collegamenti). In altre parole, l'intestazione dell'host HTTP deve essere considerata input dell'utente e non attendibile.

Per contrastare questo, una nuova impostazione è $settings['trusted_host_patterns']stata aggiunta a Drupal 8 per configurare un elenco di nomi host "attendibili" da cui il sito può essere eseguito. L'impostazione deve essere una matrice di schemi di espressioni regolari, senza delimitatori, che rappresentano i nomi host da cui si desidera consentire l'esecuzione.

Ad esempio, se stai gestendo il tuo sito da un singolo nome host "www.example.com", allora dovresti aggiungere questo alle tue impostazioni (di solito si trovano in ./sites/default/settings.php):

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

Si noti la ^, \.e $. Queste sono sintassi PCRE . Ciò significa solo che si desidera abbinare "www.example.com" in modo preciso, senza nulla in più all'inizio e alla fine, e che i punti devono essere trattati come punti e non caratteri jolly.

Se si esegue da "esempio.com", utilizzare semplicemente:

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

Se devi eseguire un sito con più domini e / o sottodomini e non stai eseguendo il reindirizzamento canonico degli URL, le tue impostazioni saranno simili a queste:

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

Ciò consente al sito di esaurire tutte le varianti di example.com ed example.org, inclusi tutti i sottodomini.

Una volta regolato $settings['trusted_host_patterns']sul valore corretto, dovresti essere in grado di navigare nuovamente sul tuo sito.

Puoi anche controllare lo stato delle impostazioni dell'host attendibile dalla pagina del rapporto sullo stato, che si trova in admin / reports / status

Se si rimuove completamente l'impostazione, il meccanismo host attendibile non verrà utilizzato e verrà visualizzato un errore nella pagina del rapporto sullo stato. Inoltre, il tuo sito potrebbe anche essere vulnerabile agli attacchi dell'intestazione dell'host HTTP.

Se hai configurato questa impostazione e visualizzi questo messaggio, probabilmente significa che hai incasinato la sintassi delle espressioni regolari. In questo caso, prendi il primo esempio e copia / incolla nelle impostazioni, quindi modificalo per riflettere il nome host da cui viene eseguito il tuo sito.


5
Sono uno degli autori della patch e ho anche scritto la bozza originale del Change Record per la patch (che è da dove proviene gran parte del testo sopra). Questa domanda e risposta serve a dare il messaggio di errore "alta googlabilità" nel caso in cui qualcuno lo incontri. Sentiti libero di aggiungere la tua risposta se pensi di poter spiegare meglio questa impostazione. Potremmo anche finire per realizzare questo CW.
mpdonadio

Ci sono configurazioni bazillion quando il server Drupal non è accessibile direttamente ma si trova dietro un proxy inverso e questo è solo un fastidio. Dovrebbe esserci un meccanismo di opt-out pulito.

Credo che sia ora, ci sono stati sforzi per impostarlo automaticamente nel programma di installazione, ma per ora è stato rimosso di nuovo. Non viene eseguita alcuna convalida se non si impostano i nomi host attendibili. Inoltre, ho appena fatto il collegamento tra mpdonadio e MPD :)
Berdir

Sì, la configurazione automatica è stata rimossa dalla patch impegnata. Attualmente è "opt-in, ma ti avvertiremo se non è impostato". C'è un followup, drupal.org/node/2404259 , per impostarlo nel programma di installazione. @Berdir, ho avuto una crisi di identità su Internet qualche tempo fa, e quando sono diventato un mod qui non volevo cambiare il mio soprannome :) Anche il mio nome utente git se diverso ...
mpdonadio

Quando uso '^ theming \ .dev $', ho questo errore: Messaggio di errore UnexpectedValueException: Host non attendibile "localhost" in Symfony \ Component \ HttpFoundation \ Request-> getHost () (riga 1221 di core / vendor / symfony / http -foundation / Symfony / Component / HttpFoundation / Request.php).
Axel Briche,

6

per l'installazione di localhost puoi usare il seguente codice nel tuo file settings.php

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

3

Questo accade perché trusted_host_patternsvariabile nel file delle impostazioni. Se stai lavorando sull'ambiente locale e vuoi sovrascriverlo, definisci la seguente sezione nel tuo settings.local.phpfile:

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

O modello più generico :

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

O più specifico per gli ambienti locali :

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

È la soluzione più semplice, ma non è consigliabile in quanto è necessario impostare i valori corretti per evitare di falsificare l'intestazione dell'host HTTP per scopi nefasti. Se il tuo sito Web è in esecuzione solo sul tuo locale, allora dovresti andare bene.

Vedi: Nuova impostazione per la configurazione del nome host attendibile .


1
Dovresti avere più voti per questa risposta perché definisce l'uso corretto del file settings.local.php. Queste impostazioni probabilmente non dovrebbero essere definite in settings.php, vanifica lo scopo di avere un file di impostazioni diverso per il tuo ambiente locale che può essere attivato / disattivato con caratteri 3 #. Un link o alcune informazioni sull'impostazione locale possono guadagnare più voti.
Dimmech,

2

Questo problema si verificherà anche se lo hai

<VirtualHost *:443>

quando dovresti avere

<VirtualHost *:80>

impostato in una configurazione non SSL (come per gli ambienti di sviluppo / test) e provare ad accedere al sito sulla porta 80


0

Ciò è dovuto alla configurazione dell'host attendibile del server. Può produrre quando si cambia il nome di dominio o 'trusted_host_patterns'. Per risolvere il probleme, aggiungere il nuovo dominio al DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(Es: sites/defaults/settings.php)

Esempio: nome dominio = newdomain.com

$settings['trusted_host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.