Я использую Apache Proxy Balancer для балансировки одного поддомена (например, subdomain.domain.com) с приложением, которое находится на двух серверах. Вот выдержка из моего файла конфигурации Apache:
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Proxy balancer://cluster1>
BalancerMember http://server1:28081 route=w1
BalancerMember http://server2:28082 route=w2
</Proxy>
ProxyPass /path balancer://cluster1/path
ProxyPassReverse /path balancer://cluster1/path
У меня вопрос, можно ли решить с исходным IP-адресом, который BalancerMember
следует использовать для запроса? Например, чтобы Запросы от 1.2.3.4 к Участнику 1?
Нет. Модуль Proxy Balancer будет передавать запросы участникам только на основании двух факторов:
Вы можете включить липкие сеансы с помощью файлов cookie. То, как вы хотите это сделать, может зависеть от вашей серверной части, если вы не хотите, чтобы Apache добавил еще один файл cookie, независимо от того, что делает серверная часть.
Боковые примечания: HAProxy, Кальмар, и Nginx все довольно хорошо справляются с балансировкой нагрузки и кешированием. Тем не менее, прокси-модуль Apache обычно достаточно хорош для легких и средних нагрузок, и похоже, что вы уже знакомы с ним. Недостаток Apache в том, что он похож на швейцарский нож: все делает достаточно хорошо, не делает ничего особенно хорошо и немного громоздко. Использование системы резервирования адресов, например Карп позволит системе Linux или BSD стать также высокодоступным балансировщиком прокси.
Вы можете попробовать следующую конфигурацию:
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Proxy balancer://cluster1>
BalancerMember http://server1:28081 route=w1
</Proxy>
<Proxy balancer://cluster2>
BalancerMember http://server2:28082 route=w2
</Proxy>
RewriteEngine On
# redirect clients from 1.2.3.4 to the first member
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4$
RewriteRule ^/path(.*)$ balancer://cluster1/path$1 [P,L]
# This rule will take care of the rest clients
ProxyPass /path balancer://cluster2/path
ProxyPassReverse /path balancer://cluster2/path