Балансировка нагрузки apache httpd mod_proxy с перенаправлением URL-адресов нескольких виртуальных хостов

сценарий:
ОС Centos
веб-сервер apache http версии 2.2.23
кластер из двух серверов weblogic
два веб-сервера

выше находятся за аппаратным балансировщиком нагрузки

В основном хотел сделать перенаправление URL-адресов и балансировку нагрузки (без изменения сеанса) трафика.

когда я набираю agent.abconline.com, он должен быть перенаправлен на сервер приложений 192.168.0.1:7001/agent staging.abconline.com должен быть перенаправлен на 192.168.0.1;7001/staging

выше сказано, что я могу работать только с mod_rewrite, но, пытаясь использовать mod_proxy и балансировку нагрузки, я не могу перенаправиться на указанный URL-адрес

ниже приведены конфиги

NameVirtualHost *:80
<VirtualHost *:80>
        ServerName agent.abconline.com
        RewriteEngine On

        <Proxy balancer://agentcluster>
         BalancerMember http://192.168.0.1:7003 route=1 loadfactor=50 retry=60
         BalancerMember http://192.168.0.2:7003 route=1 loadfactor=50 retry=60
        </Proxy>

        # Redirect all non-static requests to agent
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteRule ^/(.*)$ balancer://agentcluster%{REQUEST_URI} [P,QSA,L]

        ProxyPass /abc-oper balancer://agentcluster/abc-oper
        ProxyPassReverse /abc-oper balancer://agentcluster/abc-oper
        ProxyPreserveHost on

        SetEnv force-proxy-request-1.0 1
        SetEnv proxy-nokeepalive 1

        <Proxy *>
         Order deny,allow
         Allow from all
        </Proxy>

        ErrorLog /apps/apache/logs/agent.abconline.com.error.log
        CustomLog /apps/apache/logs/agent.abconline.com.access.log combined
        LogLevel debug
</VirtualHost>

<VirtualHost *:80>
        ServerName staging.abconline.com
        RewriteEngine On

        <Proxy balancer://stagingcluster>
         BalancerMember http://192.168.0.1:7003 route=1 loadfactor=50 retry=60
         BalancerMember http://192.168.0.2:7003 route=1 loadfactor=50 retry=60
        </Proxy>

        # Redirect all non-static requests to agent
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteRule ^/(.*)$ balancer://stagingcluster%{REQUEST_URI} [P,QSA,L]

        ProxyPass /abc-oper balancer://stagingcluster/abc-oper
        ProxyPassReverse /abc-oper balancer://stagingcluster/abc-oper
        ProxyPreserveHost on

        SetEnv force-proxy-request-1.0 1
        SetEnv proxy-nokeepalive 1

        <Proxy *>
         Order deny,allow
         Allow from all
        </Proxy>

        ErrorLog /apps/apache/logs/staging.abconline.com.error.log
        CustomLog /apps/apache/logs/staging.abconline.com.access.log combined
        LogLevel debug
</VirtualHost>

person user1871258    schedule 03.12.2012    source источник


Ответы (1)


Вы не добавляете соответствующие контексты /agent и /staging в правила обратного прокси-сервера и, очевидно, удаляете контексты на обратном пути, например.

RewriteRule      / balancer://stagingcluster/staging%{REQUEST_URI} [P,QSA,L]
ProxyPassReverse / balancer://stagingcluster/staging


# Possibly also require a:
#ProxyHTMLURLMap balancer://stagingcluster/staging   /
person arober11    schedule 03.12.2012