¿Qué significa "El nombre de host proporcionado no es válido para este servidor"?

65

Estoy ejecutando un sitio web de Drupal 8, y cuando busco en cualquier página, aparece una página en blanco con el siguiente mensaje de error.

El nombre de host proporcionado no es válido para este servidor.

¿Qué significa esto? ¿Cómo puedo solucionar esto?

mpdonadio
fuente
2
Si tiene este problema con la configuración de un entorno de desarrollo local, consulte la solución que se describe aquí.
Patrick Kenny

Respuestas:

79

Este mensaje de error proviene de una característica que se agregó a Drupal 8 para proteger contra ataques de encabezado de host HTTP . La característica también se describe en el registro de cambios que se generó para el parche.

Esencialmente, fue posible falsificar el encabezado del Host HTTP para propósitos nefastos y engañar a Drupal para que use un nombre de dominio diferente en varios subsistemas (particularmente la generación de enlaces). En otras palabras, el encabezado del host HTTP debe considerarse como entrada del usuario y no confiable.

Para combatir esto, $settings['trusted_host_patterns']se agregó una nueva configuración a Drupal 8 para configurar una lista de nombres de host "confiables" desde los que se puede ejecutar el sitio. La configuración debe ser una matriz de patrones de expresión regular, sin delimitadores, que representen los nombres de host desde los que desea ejecutar.

Por ejemplo, si está ejecutando su sitio desde un único nombre de host "www.example.com", entonces debe agregar esto a su configuración (generalmente se encuentra en ./sites/default/settings.php):

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

Tenga en cuenta el ^, \.y $. Estas son la sintaxis PCRE . Esto solo significa que desea hacer coincidir "www.example.com" con precisión, sin nada adicional al principio y al final, y que los puntos deben tratarse como puntos y no como caracteres comodín.

Si está ejecutando desde "example.com", simplemente use:

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

Si necesita ejecutar un sitio de múltiples dominios y / o subdominios, y no está haciendo una redirección de URL canónica, su configuración se vería así:

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

Esto permite que el sitio se ejecute con todas las variantes de example.com y example.org, con todos los subdominios incluidos.

Una vez que se ajuste $settings['trusted_host_patterns']al valor adecuado, debería poder navegar de nuevo a su sitio.

También puede verificar el estado de su configuración de host de confianza desde la página de informe de estado, que se encuentra en admin / reports / status

Si elimina la configuración por completo, el mecanismo de host de confianza no se utilizará y verá un error en la página de informe de estado. Además, su sitio también puede ser vulnerable ataques de encabezado de host HTTP.

Si tiene esta configuración configurada y está viendo este mensaje, entonces probablemente significa que ha estropeado la sintaxis de la expresión regular. En este caso, tome el primer ejemplo, copie / pegue en su configuración y luego edítelo para reflejar el nombre de host desde el que se ejecuta su sitio.

mpdonadio
fuente
55
Soy uno de los autores del parche, y también escribí el borrador original del Registro de cambios para el parche (que es de donde proviene gran parte del texto anterior). Esta pregunta y respuesta es para dar el mensaje de error "alta googlability" en caso de que alguien lo encuentre. No dude en agregar su propia respuesta si cree que puede explicar mejor esta configuración. También podemos terminar haciendo este CW.
mpdonadio
Hay una gran cantidad de configuraciones cuando el servidor Drupal no es accesible directamente pero está detrás de un proxy inverso y esto es solo una molestia. Debe haber un mecanismo de exclusión limpio.
Creo que es ahora, hubo esfuerzos para configurarlo automáticamente en el instalador, pero eso se eliminó nuevamente por ahora. No se realiza ninguna validación si no configura los nombres de host de confianza. Además, recién ahora hice la conexión entre mpdonadio y MPD :)
Berdir
Sí, la configuración automática se eliminó del parche que se confirmó. Actualmente es "opt-in, pero le avisaremos si no está configurado". Hay un seguimiento, drupal.org/node/2404259 , para configurarlo en el instalador. @ Berdir, tuve una crisis de identidad en Internet hace un tiempo, y cuando me convertí en mod aquí no quería cambiar mi apodo :) Mi nombre de usuario git si es diferente también ...
mpdonadio
Cuando uso '^ theming \ .dev $', tengo este error: Mensaje de error UnexpectedValueException: Host "localhost" no confiable en Symfony \ Component \ HttpFoundation \ Request-> getHost () (línea 1221 de core / vendor / symfony / http -foundation / Symfony / Component / HttpFoundation / Request.php).
Axel Briche
6

para la instalación localhost puede usar el siguiente código en su archivo settings.php

$settings['trusted_host_patterns'] = array(
   '^localhost$','^YOUR_IP_ADDRESS$'
 );
Mohan Gathala
fuente
3

Esto sucede porque trusted_host_patternsvariable en su archivo de configuración. Si está trabajando en el entorno local y desea anular esto, defina la siguiente sección en su settings.local.phparchivo:

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

O un patrón más genérico :

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

O más específico para los entornos locales :

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

Es la solución más simple, pero no se recomienda, ya que debe establecer los valores adecuados para evitar la suplantación del encabezado del host HTTP con fines nefastos. Si su sitio web se ejecuta solo en su local, entonces debería estar bien.

Consulte: Nueva configuración para la configuración de nombre de host de confianza .

kenorb
fuente
1
Debería tener más votos a favor para esta respuesta porque define el uso adecuado del archivo settings.local.php. Probablemente, esta configuración no debería definirse en settings.php, anula el propósito de tener un archivo de configuración diferente para su entorno local que puede activarse / desactivarse con 3 # caracteres. Un enlace o alguna información sobre la configuración local puede ganar más votos.
dimmech
2

Este problema también ocurrirá si tiene

<VirtualHost *:443>

cuando deberías tener

<VirtualHost *:80>

configurar en una configuración que no sea SSL (como para entornos de desarrollo / prueba) e intente acceder al sitio en el puerto 80

usuario356540
fuente
0

Esto se debe a la configuración de host de confianza del servidor. Puede producirse cuando cambia el nombre de dominio o 'trusted_host_patterns'. Para resolver el probleme, añadir el nuevo dominio al DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(Ej: sites/defaults/settings.php)

Ejemplo: nombre de dominio = newdomain.com

$settings['trusted_host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
Jimmy
fuente