No Nginx, qual é a diferença entre variáveis $host
e $http_host
.
fonte
No Nginx, qual é a diferença entre variáveis $host
e $http_host
.
$host
é uma variável do módulo Core .
$ host
Essa variável é igual à linha Host no cabeçalho da solicitação ou no nome do servidor que está processando a solicitação, se o cabeçalho do Host não estiver disponível.
Essa variável pode ter um valor diferente de $ http_host nesses casos: 1) quando o cabeçalho de entrada Host estiver ausente ou tiver um valor vazio, $ host será igual ao valor da diretiva server_name; 2) quando o valor de Host contém o número da porta, $ host não inclui esse número da porta. O valor do $ host é sempre minúsculo desde 0.8.17.
$http_host
também é uma variável do mesmo módulo, mas você não o encontrará com esse nome porque ele é definido genericamente como $http_HEADER
( ref ).
$ http_HEADER
O valor do cabeçalho da solicitação HTTP HEADER quando convertido em minúsculas e com 'traços' convertidos em 'sublinhados', por exemplo, $ http_user_agent, $ http_referer ...;
Resumindo:
$http_host
é sempre igual ao HTTP_HOST
cabeçalho da solicitação.$host
é igual a $http_host
, minúscula e sem o número da porta (se presente), exceto quando HTTP_HOST
está ausente ou é um valor vazio . Nesse caso, $host
é igual ao valor da server_name
diretiva do servidor que processou a solicitação.
server_name
definido no bloco do servidor atual. se você tiver váriosserver_name
s, apenas o primeiro aparecerá.server_name
diretivas. se você tiver uma regex no primeiro, isso se torna o$host
, e todo tipo de coisa feia pode acontecer durante as regras de reescrita.$server_name
variável é igual aoserver_name
valor da diretiva ou ao nome real do servidor que foi selecionado se houver váriasserver_name
diretivas?$server_name
é sempre igual ao primeiro valor especificado com a diretiva server_name. Por exemplo, comserver_name example.com one.example.com two.example.com;
,$server_name
sempre será "exemplo.com", independentemente de qual host o usuário especificou . De fato, se você não tiver umdefault_server
, o host pode ser algo completamente diferente (como exemplo.org).