Apache 负载均衡器 : direct to specific application based on URL

标签 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)定义一个平衡器代理:

<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>

注意 我从中删除了很多 与问题无关的配置(日志、拒绝条款、证书指令...)。这只是为了说明我做代理的方式。

NB2 我确实保留了 /static 技巧,因为这通常是您想要做的事情。静态文件必须留在 HTTP 上,而不是一直从 Tomcat 发送它们。

关于Apache 负载均衡器 : direct to specific application based on URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52185379/

相关文章:

java - 尝试使用 Jersey 和 tomcat 部署休息服务时无法打开特定网址

java - 在 Servlet 规范 3.0 下传递 servlet 配置参数

git - 如何让 git 通过代理和 IntelliJ Idea 工作?

ssl - EKS - Envoy 动态转发代理 CA 验证错误

java - 如何在Zuul后置过滤器中拦截和编辑响应体?

apache - 如何在 OS X Yosemite 上的 Apache 2.4 中安装 mod_perl 2.0.9?

php - 如何删除网址中的问号

spring - 为什么我得到 "HTTP Status 404 - Servlet <servlet name> is not available"

php - Nginx 不会将 Cookie 传递给代理

apache - 将旧子域重定向到新子域