¿NGINX con "serverpool" como LB para DIFERENTES DOMINIOS en los mismos servidores Apache?

¿NGINX con "serverpool" como LB para DIFERENTES DOMINIOS en los mismos servidores Apache?

Tengo nginx como LB. Y los 2 Apaches como servidores web. Digamos que tengo diferentes dominios:

  • www.ejemplo.com
  • pago.ejemplo.com

Ambos dominios estarán en los mismos 2 servidores Apache. Pero ofcoz bajo los diferentes directorios. Y con los diferentes VHostarchivos en el archivo Apache vhost.

Como algo como el siguiente diseño:

          Nginx
            |
      -------------
      |           |
   Apache       Apache

A continuación se muestra mi archivo Nginx .conf actual que no funciona para el segundo dominio (checkout.example.com).

De NGINX (mysites.conf):

upstream serverpool {
  server 1.2.3.101:80 weight=1;
  server 1.2.3.102:80 weight=1;
}

server {
  listen 80;
  server_name www.example.com checkout.example.com;
  location / {
    proxy_pass http://serverpool;
  }
}

De ambos de los 2 servidores ApachemismoArchivos Vhost (httpd.conf):

<VirtualHost *:80>
   ServerName www.example.com
   DocumentRoot /var/www/html/www.example.com/
</VirtualHost>
<VirtualHost *:80>
   ServerName checkout.example.com
   DocumentRoot /var/www/html/checkout.example.com/
</VirtualHost>

Pero cada vez que navego por eso (http://checkout.example.com), elEl dominio todavía apareceen el navegador ..pero con el contenido de (www.example.com), lo cual es totalmente erróneo.

¿Qué hice mal por favor?

Respuesta1

Casi siempre debes configurar Hostel encabezado. De lo contrario, nginx vuelve al valor predeterminado proxy_set_header Host $proxy_host;, lo que en su caso sería serverpoolinútil para Apache.

Verhttp://nginx.org/r/proxy_set_headeryhttp://nginx.org/r/proxy_passpara detalles.

upstream serverpool {
  server 1.2.3.101:80 weight=1;
  server 1.2.3.102:80 weight=1;
}

server {
  listen 80;
  server_name www.example.com checkout.example.com;
  location / {
    proxy_pass http://serverpool;
    proxy_set_header Host $host;
  }
}

Respuesta2

También deberá enviar el encabezado HOST: a la IP de su servidor ascendente

Este artículo responde plenamente a la pregunta.

Haga que nginx pase el nombre de host del canal ascendente cuando se realiza el proxy inverso

También tu configuración de nginx debería verse así

    upstream serverpool {
  server 1.2.3.101:80 weight=1;
  server 1.2.3.102:80 weight=1;
}

server {
  listen 80;
  server_name www.example.com checkout.example.com;
  location / {
    proxy_pass http://serverpool;
    proxy_set_header Host $host;
  }
}

información relacionada