NGINX com "serverpool" como LB para DIFERENTES DOMÍNIOS nos mesmos servidores Apache?

NGINX com "serverpool" como LB para DIFERENTES DOMÍNIOS nos mesmos servidores Apache?

Eu tenho nginx como LB. E os 2 Apaches como servidores web. Digamos que eu tenha domínios diferentes:

  • www.exemplo.com
  • checkout.exemplo.com

Ambos os domínios estarão nos mesmos 2 servidores Apache. Mas ofcoz em diferentes diretórios. E com os diferentes VHostarquivos no arquivo vhost do Apache.

Como algo como o design abaixo:

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

Abaixo está meu arquivo Nginx .conf existente que não está funcionando para o segundo domínio (checkout.example.com).

Do 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 os 2 servidores ApachemesmoArquivos 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>

Mas sempre que eu navego nisso (http://checkout.example.com), oO domínio ainda apareceno navegador ..mas com o conteúdo de (www.example.com), o que está totalmente errado.

O que eu fiz de errado, por favor?

Responder1

Você quase sempre deve definir Hosto cabeçalho. Caso contrário, o nginx volta ao padrão, proxy_set_header Host $proxy_host;o que no seu caso seria serverpoolinútil para o apache.

Verhttp://nginx.org/r/proxy_set_headerehttp://nginx.org/r/proxy_passpara detalhes.

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;
  }
}

Responder2

você precisará enviar o cabeçalho HOST: para o IP do seu servidor upstream também

este artigo está respondendo totalmente à questão

Faça com que o nginx passe o nome do host do upstream durante o proxy reverso

também sua configuração do nginx deve ser assim

    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;
  }
}

informação relacionada