среда, 19 октября 2011 г.

Apache2 mod_proxy: ProxyPass, использование balancer и проблемы с передачей оставшейся части пути backend-серверу

Проблема:
Используется mod_proxy для балансировки нагрузки (проксирования https запросов на 2 backend-сервера). В качестве пути для балансировки используется путь "/load-balancer/", при обращении по которому запрос отправляется на "https://192.168.0.101:8000/services/" или "https://192.168.0.101:8001/services/". Соответствующая настройка httpd следующая:

SSLProxyEngine on
ProxyPass /load-balancer/ balancer://myhttpsbalancer/
ProxyPassReverse /load-balancer/ https://192.168.0.101:8000/services/
ProxyPassReverse /load-balancer/ https://192.168.0.101:8001/services/
<Proxy balancer://myhttpsbalancer>
BalancerMember https://192.168.0.101:8000/services/ loadfactor=50
BalancerMember https://192.168.0.101:8001/services/ loadfactor=50
</Proxy> 

Вроде бы всё верно, но почему-то все запросы на поддиректории директории "/load-balancer/" приводят к обращению всё к той же корневой директории "/services/" backend-сервера. Т.е. при выполнении запроса на путь "/load-balancer/echo?wsdl" видим все равно тоже, что и для запроса "/load-balancer/".

Решение:
В директиве BalancerMember в конце URL убрать слеш. Т.е. получится конфигурация:

SSLProxyEngine on
ProxyPass /load-balancer/ balancer://myhttpsbalancer/
ProxyPassReverse /load-balancer/ https://192.168.0.101:8000/services/
ProxyPassReverse /load-balancer/ https://192.168.0.101:8001/services/
<Proxy balancer://myhttpsbalancer>
BalancerMember https://192.168.0.101:8000/services loadfactor=50
BalancerMember https://192.168.0.101:8001/services loadfactor=50
</Proxy> 

Комментариев нет:

Отправить комментарий