Dans Nginx, quelle est la différence entre les variables $host
y $http_host
.
Réponses
Trop de publicités?$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 à laHTTP_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 lorsqueHTTP_HOST
est absent ou est une valeur vide . Dans ce cas,$host
est égale à la valeur de laserver_name
du serveur qui a traité la demande.
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
.