NGINX с «serverpool» в качестве LB для РАЗНЫХ ДОМЕНОВ на одних и тех же серверах Apache?

NGINX с «serverpool» в качестве LB для РАЗНЫХ ДОМЕНОВ на одних и тех же серверах Apache?

У меня nginx как LB. И 2 Apache как веб-серверы. Допустим, у меня разные домены:

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

Оба домена будут на тех же 2 серверах Apache. Но, конечно, в разных каталогах. И с разными VHostфайлами в файле Apache vhost.

Как что-то вроде следующего дизайна:

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

Ниже представлен мой текущий файл .conf Nginx, который не работает для второго домена (checkout.example.com).

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

С обоих двух серверов Apacheтакой жеФайлы 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>

Но всякий раз, когда я это просматриваю (http://checkout.example.com),Домен все еще появляетсяв браузере ..но с содержимым (www.example.com), что совершенно неверно.

Что я сделал не так, пожалуйста?

решение1

Вы должны почти всегда устанавливать Hostзаголовок. В противном случае nginx возвращается к настройкам по умолчанию, proxy_set_header Host $proxy_host;что в вашем случае было бы serverpoolбесполезно для apache.

Видетьhttp://nginx.org/r/proxy_set_headerиhttp://nginx.org/r/proxy_passдля получения подробной информации.

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

решение2

вам также нужно будет отправить заголовок HOST: на IP-адрес вашего вышестоящего сервера

эта статья полностью отвечает на вопрос

Заставьте nginx передавать имя хоста восходящего потока при обратном проксировании

также ваш конфиг nginx должен выглядеть так

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

Связанный контент