NGINX com “serverpool” como o LB para DIFFERENT DOMAINS nos mesmos servidores Apache?

1

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

  • www.example.com
  • checkout.example.com

Ambos os domínios estarão nos mesmos 2 Apache Servers. Mas ofcoz sob os diferentes diretórios. E com os diferentes arquivos VHost no arquivo vache do Apache.

Como algo como abaixo, design:

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

Abaixo está meu arquivo Nginx .conf atual que não está funcionando para o segundo domínio (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 os 2 arquivos Vhost ( same ) do servidor Apache (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 por esse link , o Domínio ainda aparece no navegador. > mas com o conteúdo de (www.example.com) , o que é totalmente errado.

O que eu fiz de errado, por favor?

    
por 夏期劇場 02.03.2015 / 10:46

2 respostas

1

Você deve quase sempre definir Host header. Caso contrário, o nginx voltará ao padrão proxy_set_header Host $proxy_host; , que no seu caso seria serverpool , o que é inútil para o apache.

Veja o link e link para 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;
  }
}
    
por 02.03.2015 / 11:03
1

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

este artigo está totalmente ansioso para questionar

Faça o nginx passar o hostname do upstream quando reverseproxying

também você config nginx deve se parece com isso

    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;
  }
}
    
por 02.03.2015 / 11:05