Nginx: cómo configurar el encabezado del host para el servidor elegido (equilibrio de carga)

10

Tengo un sitio que funciona como equilibrador de carga. Sitio A.

Tengo otros sitios que solo pueden tener un dominio. Entonces, si solo redirijo a ellos, dice que no se encontró el nombre de host.

Entonces, si configuro manualmente el encabezado en algo, solo aparece ese sitio.

¿Cómo puedo configurar la proxy_set_header Host xxxxdirección del servidor elegida? De esta manera, cada solicitud de redireccionamiento tendrá un encabezado de host diferente y apropiado.

No será un problema si mis otros 2 sitios podrían funcionar en función de la URL y no del encabezado del host.

worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
error_log  logs/error.log  debug;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    upstream myapp1 {
        #server localhost:3333;
        server www.asd.com:80;
    }

    server {
        listen 80;

        location / {
            proxy_set_header Host            $upstream_addr;  // should become somehow www.asd.com right now this code doesn't work
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://myapp1;
        }
    }
}
Muhammad Umer
fuente
$server_addres de alguna manera 127.0.0.1 por qué?
Muhammad Umer
Quiero que el encabezado del host sea www.asd.com cuando www.asd.com:80se elija el servidor
Muhammad Umer
o si hay una manera de escribir if(server1) than host = a; ,if(server2) than host = b;
Muhammad Umer
1
La cuestión es que el encabezado de host apropiado debería ser, en mi opinión, lo que sea que obtenga del cliente. Si el cliente solicita www.asd.com, entonces ese debería ser el encabezado del host. Esto ayudará a generar correctamente las URL absolutas en el backend cuando sea necesario, establecer los dominios adecuados para las cookies, etc. Lo que sea que esté tratando de hacer, probablemente lo esté mirando de la manera incorrecta.
Florin Asăvoaie
Tanto el cliente como el servidor medio son yo.
Muhammad Umer

Respuestas:

6

Debe configurar el encabezado para la variable de host entrante, como se documenta aquí :

proxy_set_header Host $host;
Jeff Wong
fuente
This variable is equal to line Host in *the header of request* or namees decir, lo que diga el cliente / navegador, ese es el que se elige.
Muhammad Umer
Esto es lo que te gustaría hacer, ¿correcto? El cliente solicita un recurso / host virtual de su proxy, y necesita servir un host virtual. El servidor virtual a ser elegido es elegido por el cliente / prestatario.
Jeff Wong
el servidor no elige ningún host virtual al azar
Muhammad Umer
1
¿Algo como esto? Cree dos niveles de proxy y configure el host codificado en el punto final en la segunda capa serverfault.com/a/622782/287634
Jeff Wong
echaré un vistazo, pero creo que ya lo he visto desde que voté por algunas cosas allí
Muhammad Umer