O que significa "O nome do host fornecido não é válido para este servidor" significa?

64

Estou executando um site do Drupal 8 e, quando navego para qualquer página, recebo uma página em branco com apenas a seguinte mensagem de erro.

O nome do host fornecido não é válido para este servidor.

O que isto significa? Como faço para corrigir isso?

mpdonadio
fonte
2
Se você está tendo esse problema ao configurar um ambiente de desenvolvimento local, consulte a solução descrita aqui.
Patrick Kenny

Respostas:

78

Esta mensagem de erro é proveniente de um recurso que foi adicionado ao Drupal 8 para proteger contra ataques de cabeçalho do host HTTP . O recurso também é descrito no registro de alterações que foi gerado para o patch.

Essencialmente, foi possível falsificar o cabeçalho do host HTTP para fins nefastos e induzir o Drupal a usar um nome de domínio diferente em vários subsistemas (principalmente na geração de links). Em outras palavras, o cabeçalho do host HTTP precisa ser considerado como entrada do usuário e não confiável.

Para combater isso, uma nova configuração, $settings['trusted_host_patterns']foi adicionada ao Drupal 8 para configurar uma lista de nomes de host "confiáveis" dos quais o site pode ser executado. A configuração precisa ser uma matriz de padrões de expressão regular, sem delimitadores, representando os nomes de host dos quais você deseja permitir a execução.

Por exemplo, se você estiver executando seu site a partir de um único nome de host "www.example.com", adicione-o às suas configurações (geralmente encontradas em ./sites/default/settings.php):

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

Note-se a ^, \.e $. Estas são a sintaxe do PCRE . Isso significa apenas que você deseja corresponder "www.example.com" com precisão, sem nada extra no começo e no final, e que os pontos devem ser tratados como pontos e não como caracteres curinga.

Se você estiver executando a partir de "example.com", use:

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

Se você precisar executar um site de vários domínios e / ou subdomínios, e não estiver fazendo o redirecionamento de URL canônico, sua configuração será mais ou menos assim:

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

Isso permite que o site fique sem todas as variantes de example.com e example.org, com todos os subdomínios incluídos.

Depois de ajustar $settings['trusted_host_patterns']o valor adequado, você poderá navegar no seu site novamente.

Você também pode verificar o status de suas configurações de host confiável na página de relatório de status, que é em admin / reports / status

Se você remover completamente a configuração, o mecanismo host confiável não será usado e você verá um erro na página do relatório de status. Além disso, seu site também pode estar vulnerável a ataques de cabeçalho de host HTTP.

Se você tiver essa configuração configurada e estiver vendo esta mensagem, provavelmente significa que você alterou a sintaxe da expressão regular. Nesse caso, pegue o primeiro exemplo, copie / cole nas suas configurações e edite-o para refletir o nome do host do qual o site é executado.

mpdonadio
fonte
5
Eu sou um dos autores do patch e também escrevi o rascunho original do Change Record para o patch (que é de onde vem grande parte do texto acima). Esta pergunta e resposta é fornecer a mensagem de erro "alta googlability", caso alguém a encontre. Sinta-se à vontade para adicionar sua própria resposta se achar que pode explicar melhor essa configuração. Também podemos acabar fazendo essa CW.
mpdonadio
Existem muitas configurações quando o servidor Drupal não está acessível diretamente, mas está atrás de um proxy reverso e isso é apenas um incômodo. Deve haver um mecanismo limpo de exclusão.
Acredito que seja agora, houve esforços para configurá-lo automaticamente no instalador, mas isso foi removido novamente por enquanto. Nenhuma validação acontece se você não definir os nomes de host confiáveis. Além disso, eu só agora fez a conexão entre mpdonadio e MPD :)
Berdir
Sim, a configuração automática foi removida do patch que foi confirmado. No momento, está "opt-in", mas iremos avisá-lo se não estiver definido ". Há um acompanhamento, drupal.org/node/2404259 , para configurá-lo no instalador. @Berdir, tive uma crise de identidade internet há um tempo atrás, e quando eu me tornei um mod aqui eu não quero mudar meu apelido :) Meu nome de usuário git se for diferente, também ...
mpdonadio
Quando eu uso '^ theming \ .dev $', tenho este erro: Mensagem de erro UnexpectedValueException: Host não confiável "localhost" no Symfony \ Component \ HttpFoundation \ Request-> getHost () (linha 1221 do core / vendor / symfony / http -foundation / Symfony / Component / HttpFoundation / Request.php).
Axel Briche
6

para a instalação do host local, você pode usar o seguinte código no arquivo settings.php

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

Isso acontece porque a trusted_host_patternsvariável no seu arquivo de configurações. Se você estiver trabalhando no ambiente local e deseja substituí-lo, defina a seguinte seção no seu settings.local.phparquivo:

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

Ou padrão mais genérico :

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

Ou mais específico para os ambientes locais :

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

É a solução mais simples, mas não recomendada, pois você deve definir os valores adequados para evitar falsificar o cabeçalho do host HTTP para fins nefastos. Se o seu site está sendo executado apenas no seu local, você deve ficar bem.

Consulte: Nova configuração para configuração de nome de host confiável .

kenorb
fonte
11
Você deve ter mais votos positivos para esta resposta, pois ela define o uso adequado do arquivo settings.local.php. Essas configurações provavelmente não devem ser definidas em settings.php, mas anulam o propósito de ter um arquivo de configurações diferente para o seu ambiente local, que pode ser ativado / desativado com 3 caracteres #. Um link ou algumas informações sobre a configuração local podem ganhar mais votos.
Dimmech
2

Esse problema também ocorrerá se você tiver

<VirtualHost *:443>

quando você deveria ter

<VirtualHost *:80>

configurado em uma configuração não SSL (como para ambientes de desenvolvimento / teste) e tente acessar o site na porta 80

user356540
fonte
0

Isso ocorre devido à configuração de host confiável do servidor. Pode produzir quando você altera o nome do domínio ou 'trusted_host_patterns'. Para resolver o probleme, adicionar o seu novo domínio para o DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(Ex: sites/defaults/settings.php)

Exemplo: Nome de domínio = newdomain.com

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