Обслуживание нескольких сайтов с помощью Apache Proxy Balancer

У меня есть ситуация, когда у меня настроен балансировщик нагрузки с Apache2 и mod-balancer, который собирается балансировать нагрузку на два веб-сервера Apache2. Мне бы хотелось, чтобы мой балансировщик нагрузки мог обслуживать несколько сайтов, но в настоящее время каждый создаваемый мной виртуальный хост обслуживает один и тот же сайт.

На балансировщике нагрузки (lb1) у меня есть default виртуальный хост включен, поэтому при просмотре IP-адреса балансировщиков нагрузки вы видите стандартное сообщение Apache2.

Ниже приведен макет виртуального хоста, который я использую для всех последующих доменов, которые может обслуживать балансировщик нагрузки. mydomain.com для фактического доменного имени, конечно):

<VirtualHost *>
        ServerName www.mydomain.com
        ServerAlias mydomain.com

        ProxyRequests Off

        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>

        <Proxy balancer://mydomain.com.cluster>
                BalancerMember http://web1.mycluster.com:80 route=web1 retry=5
                BalancerMember http://web2.mycluster.com:80 route=web2 retry=5
                ProxySet lbmethod=byrequests
        </Proxy>

        ProxyPass / balancer://mydomain.com.cluster/ stickysession=BALANCEID n$

        ProxyPassReverse / http://web1.mycluster.com/
        ProxyPassReverse / http://web2.mycluster.com/
</VirtualHost>

Это то, что виртуальный хост на веб-сервере (web1 & web2) конец выглядит так. На обоих веб-серверах включены одинаковые виртуальные хосты. Единственная разница между виртуальными хостами - это ссылка на web1 или же web2 соответственно (я показываю виртуальный хост web1 Вот):

<VirtualHost *>
        ServerName www.mydomain.com
        ServerAlias mydomain.com

        RewriteEngine On
        RewriteRule .* - [CO=BALANCEID:balancer.web1:.mydomain.com]

        DocumentRoot /mnt/share/mydomain.com/www/public_html

        <Directory />
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

Кажется, это работает для mydomain.com, Если я создаю другой виртуальный хост с таким же макетом, например, для myotherdomain.com затем перейдите к myotherdomain.com будет на самом деле служить mydomain.com,

Что я делаю не так?

2 ответа

Решение

Возможно, вам где-то нужна директива NameVirtualHost, в противном случае запросы сопоставляются только с IP-адресом сервера, и первый VirtualHost, соответствующий этому IP, будет "побежден" (поэтому первый всегда побеждает).

По крайней мере, так получилось много лет назад, когда я больше занимался Apache.

Jacek Konieczny был прав, и я наконец выяснил, в чем проблема. Я хотел бы остановиться на этом немного. Похоже, что это было связано с тем, как я настроил свои виртуальные хосты, и он всегда выбирал один по умолчанию на одном из серверов с балансировкой нагрузки. Вот как я настраиваю свои виртуальные хосты:

Для vhost по умолчанию:

NameVirtualHost *:80
<VirtualHost *:80>

  # vhost stuff

</VirtualHost>

Тогда для других виртуальных хостов:

<VirtualHost *:80>
  ServerName mydomain.com
  ServerAlias www.mydomain.com

  # forward proxy stuff

</VirtualHost>

Все узлы веб-сервера настроены так, как если бы они были автономными компьютерами, за исключением установленного файла cookie BALANCEID.

Другие вопросы по тегам