Балансировка нагрузки Apache с помощью proxy_balancer

У меня возникают трудности при настройке Apache 2.4 для использования его мода proxy_balancer. Мой вариант использования довольно прост. Запросы достигают узла apache, который должен быть сбалансирован по нагрузке для кластера. Это мое config:

<VirtualHost *:80>

    ProxyRequests off

    ServerName localhost

    <Proxy balancer://geocode>

            BalancerMember "http://192.168.2.11:8080/ors/status"
            BalancerMember "http://192.168.2.35:8080/ors/status"

            Require all granted

            ProxySet lbmethod=byrequests

    </Proxy>

    <Location /balancer-manager>

            SetHandler balancer-manager

            Require all granted

    </Location>

    ProxyPass /balancer-manager !
    ProxyPass "/geocodelb" "balancer://geocode"
    ProxyPass "/geocode" "http://192.168.2.35:8080/ors/status"

</VirtualHost>

При навигации к localhost:80/geocodelb я получил 404 Not Found:

129.206.205.50 - - [01/Oct/2017:19:39:55 +0000] "GET /geocodelb 
HTTP/1.1" 404 164 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; 
rv:56.0) Gecko/20100101 Firefox/56.0"

но localhost:80/geocode работает:

129.206.205.50 - - [01/Oct/2017:19:40:07 +0000] "GET /geocode HTTP/1.1" 
200 757 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0) 
Gecko/20100101 Firefox/56.0"

(The ../status указывает на экземпляр tomcat и возвращает объект json)

Если я заменю URL-адреса BalancerMembers на что-то произвольное - например, google.com - оно работает.

Я также могу связаться с балансирующим менеджером по адресу localhost:80/balancer-manager и получить правильную информацию. Если я не ошибаюсь, это говорит мне, что все выглядит хорошо (см. Скриншот). Что мне здесь не хватает?

1 ответ

Решение

Причина того, что это не работает, заключается в том, что балансировщик должен быть URL-адресом сервера без указания пути. Путь должен быть добавлен в директиву ProxyPass, как это balancer://orsbackend/ors/geocode, Вот рабочий конфиг:

<VirtualHost *:80>

        ProxyRequests off

        ServerName localhost

        <Proxy balancer://orsbackend>
                BalancerMember "http://192.168.2.11:8080"
                BalancerMember "http://192.168.2.35:8080"
                ProxySet lbmethod=byrequests
        </Proxy>

        <Location /balancer-manager>
                SetHandler balancer-manager

                Require all granted
        </Location>

        ProxyPass /balancer-manager !

        ProxyPass "/geocode" "balancer://orsbackend/ors/geocode"

</VirtualHost>
Другие вопросы по тегам