Назад | Перейти на главную страницу

Балансировка Apache по IP-адресу источника

Я использую 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 будет передавать запросы участникам только на основании двух факторов:

  1. Если в запросе есть прикрепленный файл cookie, определяющий члена, то запрос будет перенаправлен этому члену (если он доступен). Похож на тебя не однако настройте это.
  2. В противном случае запрос будет перенаправлен в соответствии с алгоритмом рассылки. Существует три настраиваемых алгоритма: простой циклический алгоритм, наименьший трафик (в байтах) и наименьшее количество запросов (для всех доступно взвешивание).

Вы можете включить липкие сеансы с помощью файлов 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