Qual è la differenza di $ host e $ http_host in Nginx


Risposte:


217

$hostè una variabile del modulo Core .

$ host

Questa variabile è uguale alla riga Host nell'intestazione della richiesta o nel nome del server che elabora la richiesta se l'intestazione Host non è disponibile.

Questa variabile può avere un valore diverso da $ http_host in questi casi: 1) quando l'intestazione di input dell'host è assente o ha un valore vuoto, $ host è uguale al valore della direttiva server_name; 2) quando il valore di Host contiene il numero di porta, $ host non include quel numero di porta. Il valore di $ host è sempre minuscolo da 0.8.17.

$http_hostè anche una variabile dello stesso modulo ma non la troverai con quel nome perché è definita genericamente come $http_HEADER( ref ).

$ http_HEADER

Il valore dell'intestazione della richiesta HTTP HEADER quando convertito in minuscolo e con "trattini" convertiti in "caratteri di sottolineatura", ad esempio $ http_user_agent, $ http_referer ...;


riassumendo:

  • $http_hostè sempre uguale all'intestazione della HTTP_HOSTrichiesta.
  • $hostuguale $http_host, minuscolo e senza il numero di porta (se presente), tranne quando HTTP_HOSTè assente o è un valore vuoto . In tal caso, è $hostuguale al valore della server_namedirettiva del server che ha elaborato la richiesta.

57
$ host è in particolare il primoserver_name definito nel blocco server corrente. se hai più server_names, apparirà solo il primo.
Jonathan Vanasco,

4
Vero. In effetti, è abbastanza tipico definire: nome_server esempio.com www.esempio.com;
Glarrain,

puoi avere anche più server_namedirettive. se ti capita di avere una regex nella prima, questa diventa la $host, e ogni sorta di cose brutte può accadere durante le regole di riscrittura.
Jonathan Vanasco,

5
La $server_namevariabile equivale al server_namevalore della direttiva o al nome effettivo del server che è stato selezionato se c'erano più server_namedirettive?
CMCDragonkai,

1
@CMCDragonkai $server_nameè sempre uguale al primo valore specificato con la direttiva server_name. Ad esempio, con server_name example.com one.example.com two.example.com;, $server_namesarà sempre "esempio.com", indipendentemente dall'host specificato dall'utente . In effetti, se non si dispone di un default_server, l'host potrebbe essere qualcosa di completamente diverso (come esempio.org).
ATLief
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.