Dans Nginx, quelle est la différence entre les variables $host
et $http_host
.
la source
Dans Nginx, quelle est la différence entre les variables $host
et $http_host
.
$host
est une variable du module Core .
$ hôte
Cette variable est égale à la ligne Host dans l'en-tête de la requête ou au nom du serveur traitant la requête si l'en-tête Host n'est pas disponible.
Cette variable peut avoir une valeur différente de $ http_host dans de tels 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 Host contient le numéro de port, $ host n'inclut pas ce numéro de port. La valeur de $ host est toujours en minuscules depuis la 0.8.17.
$http_host
est également une variable du même module mais vous ne la trouverez pas avec ce nom car elle est définie de manière générique comme $http_HEADER
( ref ).
$ http_HEADER
La valeur de l'en-tête de la requête HTTP HEADER lorsqu'il est converti en minuscules et avec les «tirets» convertis en «traits de soulignement», par exemple $ http_user_agent, $ http_referer ...;
En résumé:
$http_host
équivaut toujours à l'en- HTTP_HOST
tête de la demande.$host
est égal $http_host
, en minuscules et sans le numéro de port (si présent), sauf en cas d' HTTP_HOST
absence ou de valeur vide . Dans ce cas, $host
égale la valeur de la server_name
directive du serveur qui a traité la requête.
server_name
défini dans le bloc serveur actuel. si vous avez plusieursserver_name
s, seul le premier apparaîtra.server_name
directives. si vous avez une regex dans la première, cela devient le$host
, et toutes sortes de choses laides peuvent se produire pendant les règles de réécriture.$server_name
variable est-elle égale à laserver_name
valeur de la directive ou au nom de serveur réel qui a été sélectionné s'il y avait plusieursserver_name
directives?$server_name
est toujours égal à la première valeur spécifiée avec la directive nom_serveur. Par exemple, avecserver_name example.com one.example.com two.example.com;
,$server_name
sera toujours "example.com", quel que soit l'hôte spécifié par l'utilisateur . En fait, si vous n'en avez pasdefault_server
, l'hôte peut être quelque chose de complètement différent (comme example.org).