En Nginx, ¿cuál es la diferencia entre variables $host
y $http_host
.
fuente
En Nginx, ¿cuál es la diferencia entre variables $host
y $http_host
.
$host
es una variable del módulo Core .
$ host
Esta variable es igual a la línea Host en el encabezado de la solicitud o el nombre del servidor que procesa la solicitud si el encabezado Host no está disponible.
Esta variable puede tener un valor diferente de $ http_host en tales casos: 1) cuando el encabezado de entrada del Host está ausente o tiene un valor vacío, $ host es igual al valor de la directiva server_name; 2) cuando el valor de Host contiene el número de puerto, $ host no incluye ese número de puerto. El valor de $ host siempre está en minúscula desde 0.8.17.
$http_host
también es una variable del mismo módulo, pero no la encontrará con ese nombre porque se define genéricamente como $http_HEADER
( ref ).
$ http_HEADER
El valor del encabezado de solicitud HTTP HEADER cuando se convierte a minúsculas y con 'guiones' convertidos a 'guiones bajos', por ejemplo, $ http_user_agent, $ http_referer ...;
Resumiendo:
$http_host
siempre es igual al HTTP_HOST
encabezado de la solicitud.$host
igual $http_host
, en minúscula y sin el número de puerto (si está presente), excepto cuando HTTP_HOST
está ausente o es un valor vacío . En ese caso, $host
es igual al valor de la server_name
directiva del servidor que procesó la solicitud.
server_name
que se define en el bloque del servidor actual. Si tiene varios correosserver_name
electrónicos, solo aparecerá el primero.server_name
directivas también. Si tiene una expresión regular en la primera, eso se convierte en$host
, y todo tipo de cosas feas pueden suceder durante las reglas de reescritura.$server_name
variable es igual alserver_name
valor de la directiva o al nombre real del servidor que se seleccionó si hubiera variasserver_name
directivas?$server_name
siempre es igual al primer valor especificado con la directiva server_name. Por ejemplo, conserver_name example.com one.example.com two.example.com;
,$server_name
siempre será "example.com", independientemente de qué host haya especificado el usuario . De hecho, si no tiene undefault_server
, el host podría ser algo completamente diferente (como example.org).