226 votes

Quelle est la différence entre $host et $http_host dans Nginx ?

Dans Nginx, quelle est la différence entre les variables $host y $http_host .

272voto

glarrain Points 843

$host est une variable de la Core módulo.

$host

Cette variable est égale à la ligne Hôte dans l'en-tête de la requête ou nom du serveur traitant la demande si l'en-tête Host n'est pas disponible.

Cette variable peut avoir une valeur différente de $http_host dans un tel cas : 1)lorsque l'en-tête d'entrée Host est absent ou a une valeur vide, $host est égal à la valeur de la directive server_name ; 2) lorsque la valeur de la directive de Host contient un numéro de port, $host n'inclut pas ce numéro de port. La valeur de $host est toujours en minuscule depuis la version 0.8.17.

$http_host est également une variable du même module, mais vous ne la trouverez pas sous ce nom car elle est définie de manière générique en tant que $http_HEADER ( réf. ).

$http_HEADER

La valeur de l'en-tête de requête HTTP HEADER, convertie en minuscules et avec les tirets convertis en caractères de soulignement, par exemple $http_user_agent, $http_referer... ;


Je résume :

  • $http_host est toujours égal à la HTTP_HOST l'en-tête de la demande.
  • $host est égal à $http_host , en minuscules et sans le numéro de port (si présent), sauf lorsque HTTP_HOST est absent ou est une valeur vide . Dans ce cas, $host est égale à la valeur de la server_name du serveur qui a traité la demande.

17voto

Christian Points 414

La réponse acceptée et ses commentaires ne semblent pas (plus) corrects. La documentation ( http://nginx.org/en/docs/http/ngx_http_core_module.html#var_host ) disent que $host es

dans cet ordre de préséance : nom d'hôte de la ligne de la demande, ou nom d'hôte du champ d'en-tête de la demande "Host", ou nom du serveur correspondant à une demande

Alors $http_host est toujours la valeur de l'élément Host champ d'en-tête. Ils peuvent différer si l'hôte de la ligne de demande (s'il est spécifié) diffère de l'hôte de la ligne de demande. Host champ d'en-tête. Ou si le Host n'est pas défini.

server_name ne correspond qu'au Host champ d'en-tête ( http://nginx.org/en/docs/http/request_processing.html ), de sorte que $host peuvent différer de celles qui sont appariées server_name .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X