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

Как сохранить URL-адрес прокси для всех запросов с помощью балансировщика нагрузки Apache

Я пытаюсь обслуживать запросы к моему сайту через прокси-сервер с помощью балансировщика нагрузки. Когда я пытаюсь получить доступ к сайту, нажимая http://PROXYSERVER.com, HomePage отлично сохраняет URL-адрес адресной строки с http://PROXYSERVER.com.

Теперь, когда я пытаюсь получить доступ к внутренним ссылкам, например, http://PROXYSERVER.com/services/, тогда URL-адрес адресной строки меняется на URL-адрес APPSERVER http://APPSERVER01.com/services/


ПРИМЕЧАНИЕ. Страница открывается нормально, но URL-адрес адресной строки меняется.

Ожидаемое поведение - когда пользователь запрашивает http://PROXYSERVER.com/services/, тогда в адресной строке должен сохраняться URL-адрес прокси при обслуживании запроса.


Вот мой код для балансировки нагрузки,



        ProxyRequests off
 ServerName PROXYSERVER.com

                # WebHead1
                BalancerMember http://APPSERVER01:80/ route=node1
                                # WebHead2
               BalancerMember http://APPSERVER02:80/ route=node2
                Order Deny,Allow
                Deny from none
                Allow from all
                ProxySet lbmethod=byrequests
               #ProxySet lbmethod=bybusyness
                ProxySet stickysession=BALANCEID
        
        
                SetHandler balancer-manager
                Order deny,allow
                Allow from all
        
        # Point of Balance
        ProxyPass /balancer-manager !
        ProxyPass / balancer://mycluster/


Любые предложения будут оценены.

Опубликованная вами конфигурация и описанные вами симптомы указывают на отсутствие ProxyPassReverse директива.

Без него никакие URL-адреса в заголовках Location, Content-Location и URI в ответах на перенаправление HTTP, отправленных одним из серверов приложений, не будут изменены. Это раскрывает реальное имя / URL-адрес сервера приложений, и посетитель будет направлен на этот URL-адрес, а не на прокси-сервер.

Вы увидите такие заголовки, например, когда перейдете в каталог http://example.com/dirname и опустите косую черту в конце /.
В этом случае активный сервер приложений отправит заголовок HTTP 301 «перемещен навсегда» и добавит косую черту в конце.

След с curl -v proxyserver.com/services покажет что-то вроде:

> GET /services HTTP/1.1
> Host: proxyserver.com
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Date: Wed, 06 Jan 2016 09:27:31 GMT
< Server: Apache/2.2.15 (CentOS)
< Location: https://appserver01:/services/
< Content-Length: 328
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
<

Вы решаете эту проблему, добавляя правильную директиву ProxyPassReverse, которая сообщает Apache о необходимости перезаписать такие заголовки с помощью URI прокси.

    # Point of Balance
    ProxyPass /balancer-manager !
    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

В зависимости от версии Apache, которую вы используете, вы можете столкнуться с поведением, похожим на эта старая ошибка и может попробовать явные директивы ProxyPassReverse для каждого члена пула балансировщика:

    ProxyPass /balancer-manager !
    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/
    # Ensure that headers sent by application servers get corrected:
    ProxyPassReverse / http://APPSERVER01:80/
    ProxyPassReverse / http://APPSERVER02:80/