2013-03-14 18 views
90

In Nginx, qual è la differenza tra le variabili $host e $http_host.

risposta

144

$host è una variabile del modulo Core.

$ host

Questa variabile è uguale alla linea Host nell'intestazione della richiesta oppure nome del server di elaborazione della richiesta se l'intestazione host non è disponibili.

Questa variabile può avere un valore diverso da $ HTTP_HOST in tali casi: 1) quando l'intestazione host ingresso è 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 in minuscolo da 0.8.17.

$http_host è anche una variabile dello stesso modulo, ma non troverete con quel nome perché è definito genericamente come $http_HEADER (ref).

$ http_HEADER

Il valore della richiesta HTTP Header Header quando convertite in caratteri minuscoli e con 'trattini' convertito 'sottolineatura', per esempio $ http_user_agent, $ http_referer ...;


Riassumendo:

  • $http_host uguale sempre l'intestazione HTTP_HOST richiesta.
  • $host uguale $http_host, minuscole e senza il numero di porta (se presente), tranne quando HTTP_HOST è assente o è un valore vuoto. In tal caso, $host è uguale al valore della direttiva server_name del server che ha elaborato la richiesta.
+29

$ host è specificamente ** il primo 'server_name' ** definito nel blocco del server corrente. se hai più 'server_name's, apparirà solo il primo. –

+2

Vero. In effetti, è abbastanza tipico definire: server_name example.com www.example.com; – glarrain

+0

puoi avere anche più direttive 'server_name'. se ti capita di avere una regex nel primo, questo diventa '$ host', e tutti i tipi di cose brutte possono accadere durante le regole di riscrittura. –

Problemi correlati