Обслуживание нескольких сайтов с помощью 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.