¿Existe una variable nginx para la dirección del servidor ascendente no resuelta?

¿Existe una variable nginx para la dirección del servidor ascendente no resuelta?

Cuando se usa nginx como proxy inverso para un grupo de servidores en un bloque ascendente, ¿hay una variable que corresponda al nombre del servidor no resuelto? Por ejemplo, considere la siguiente configuración:

http {
    upstream foo {
        server foo1.example.com:8080;
        server foo1.example.com:8081;
        server foo2.example.com:8080;
        server foo2.example.com:8081;
    }
    server {
        server_name foo.example.com;
        location / {
            proxy_pass http://foo;
        }
    }
}

Sean foo.example.com, foo1.example.comy foo2.example.comnombres definidos que se resuelven en 192.0.2.1, 192.0.2.2 y 192.0.2.3 respectivamente.

Supongamos que llega una solicitud foo.example.comy nginx decide elegir foo2.example.comel puerto 8080 como servidor ascendente y la solicitud se realiza correctamente. Entonces, que yo sepa, estos serán los valores de algunas variables relevantes:

  • $host = foo.example.com
  • $proxy_host = foo
  • $upstream_addr = 192.0.2.3:8080(*)

Sin embargo, ninguno de estos coincide con el valor proporcionado en la configuración del servidor ascendente. Entonces, más específicamente, mi pregunta es: ¿qué variable, si la hay, tendrá el valor de foo2.example.com:8080en este caso?

Para evitar el problema XY, estas son las cosas que intento lograr:

  1. registrar el servidor ascendente por nombre de host en lugar de por dirección IP, ya que la dirección IP resuelta puede ser temporal o no admitir la búsqueda inversa 1:1
  2. al mapservidor ascendente a otra información que sea más útil, también para fines de registro
  3. para configurar la verificación del nombre de host (por ejemplo, a través de proxy_ssl_name) para SSL ascendente cuando los servidores no comparten el mismo certificado (esto podría justificar una pregunta propia, pero no es el único caso de uso)

(*) = La variable $upstream_addrno parece estar disponible en todas las etapas de la solicitud; por ejemplo, agregar proxy_set_header Upstream-Addr $upstream_addr;al bloque de ubicación parece no tener ningún efecto, lo que implica que la variable está vacía

Respuesta1

Los proxy pueden ser complicados. Nginx proxy_set_headeres lo que quieres.Documentos Nginx

proxy_set_header    Host            $host;

Mira aquípara un ejemplode una configuración más detallada para proxies

información relacionada