¿Cuál es la diferencia entre las variables de Nginx $ host, $ http_host y $ server_name?

Pregunta:

¿Cuál es la diferencia entre las tres variables de Nginx $host , $http_host y $server_name ?

Tengo una regla de reescritura en la que no estoy seguro de cuál debería usar:

location = /vb/showthread.php {
    # /vb/showthread.php?50271-What-s-happening&p=846039
    if ($arg_p) {
        return 301 $scheme://$host/forum/index.php?posts/$arg_p/;
        }

Estoy buscando una respuesta que no solo diga 'use ___ variable en su regla de reescritura' sino que también explique las diferencias teóricas entre ellas.

Respuesta:

Casi siempre debe usar $host , ya que es el único que garantiza tener algo sensato independientemente de cómo se comporte el agente de usuario, a menos que necesite específicamente la semántica de una de las otras variables.

La diferencia se explica en la documentación de nginx :

  • $host contiene "en este orden de precedencia: nombre de host de la línea de solicitud, o nombre de host del campo de encabezado de solicitud 'Host', o el nombre del servidor que coincide con una solicitud"
  • $http_host contiene el contenido del campo de encabezado HTTP "Host", si estaba presente en la solicitud
  • $server_name contiene el server_name del host virtual que procesó la solicitud, como se definió en la configuración de nginx. Si un server contiene múltiples server_name s, sólo el primero de ellos estará presente en esta variable.

Dado que es legal para los agentes de usuario enviar el nombre de host en la línea de solicitud en lugar de en un encabezado Host:, aunque rara vez se hace, excepto cuando se conecta a proxies, debe tener en cuenta esto.

También debe tener en cuenta el caso en el que el agente de usuario no envía un nombre de host en absoluto, por ejemplo, solicitudes HTTP / 1.0 antiguas y software moderno mal escrito. Puede hacerlo desviándolos a un host virtual general que no sirve nada, si está sirviendo a varios sitios web, o si solo tiene un único sitio web en su servidor, puede procesar todo a través de un solo host virtual . En el último caso, también debe tener en cuenta esto.

Solo la variable $host cuenta todas las cosas posibles que un agente de usuario puede hacer al formar una solicitud HTTP.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım