Apache负载均衡器:基于URL定向到特定的应用程序

时间:2018-09-05 12:40:40

标签: apache tomcat proxy load-balancing

我在Tomcat的webapps文件夹(app1.0,app1.1,app1.2等)中部署了多个应用程序。当我点击www.example.com:8080/app1.0时,出现相应的应用程序。

但是如何在负载平衡服务器上做到这一点?例如,我有一个网站,可以单击一个按钮(app1.0,app1.1,app1.2等),然后弹出一个URL,如:www.lb.com/app1.0/.../ ...如何根据URL中的应用程序版本定向到该应用程序?使用RewriteCond和正则表达式并将其传递给ProxyPass?我真的不怎么编写脚本,有人可以帮忙吗? :)

编辑:这是我为1个Tomcat的2个应用程序和2个Tomcat的2个应用程序所做的,但是有时我得到404,因为负载均衡器选择了具有另一个版本的Tomcat。

<VirtualHost *:80>
#Add a http header to explicitly identify the node and be sticky
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

#Declare the http server pool
<Proxy "balancer://plf">
    BalancerMember "http://worker1.com:8080" route=worker1
    BalancerMember "http://worker2.com:8080" route=worker2
    ProxySet stickysession=ROUTEID
    ProxySet lbmethod=bybusyness
</Proxy>

#Common options
ProxyRequests           Off
ProxyPreserveHost       On

#Declare the redirection for the http requests
ProxyPassMatch        "/app(.*)"     "balancer://plf/app$1"  
ProxyPassReverse      "/app(.*)"     "balancer://plf/app$1"

1 个答案:

答案 0 :(得分:0)

这是我的方法:

1):定义平衡器代理:

<Proxy balancer://portalcluster stickysession=JSESSIONID>

    BalancerMember ajp://TOMCATSERVER1:8009 route=TOMCARSERVER1-0
    BalancerMember ajp://TOMCATSERVER2:8009 route=TOMCATSERVER2-100

</Proxy>

2)在您的VirtualHost中对其进行代理:

Listen 443
<Virtualhost *:443>
    ServerName example.com

    Alias /static /var/www/portalstatic

    ProxyPass /static !
    ProxyPass / balancer://portalcluster/
    ProxyPassReverse / balancer://portalcluster/

</Virtualhost>

NB 我从这些配置中删除了一个 lot 配置,这些配置与问题(日志,拒绝子句,证书指令等)无关。这只是为了说明我做代理的方式。

NB2 我确实离开了/static技巧,因为这通常是您要执行的操作。静态文件必须保留在HTTP上,并且不能始终从Tomcat发送。