【问题标题】:Apache as Reverse-Proxy and Load-Balancer need to use sticky sessionApache 作为反向代理和负载均衡器需要使用粘性会话
【发布时间】:2021-01-04 06:14:24
【问题描述】:

我在集群中有两个 CentOS 8 节点(192.168.1.101 和 192.168.1.102)(使用起搏器),我将 VIP (192.168.1.100) 和 Apache 配置为集群的资源。 在所有节点上都安装了 Apache 2.4 和 Tomcat 9

Apache 的配置是: vim /etc/httpd/conf/httpd.conf

<VirtualHost *:80>
        ProxyPreserveHost On

        <Proxy balancer://myClusterBalancer>
             BalancerMember http://192.168.1.101:8080/ route=server01 keepalive=On ping=5 max=200 ttl=120
             BalancerMember http://192.168.1.102:8080/ route=server02 keepalive=On ping=5 max=200 ttl=120
             ProxySet stickysession=JSESSIONID|jsessionid lbmethod=byrequests timeout=60
        </Proxy>

        ProxyPass /server-status !
        ProxyPass /MyWebApp/  balancer://myClusterBalancer/MyWebApp/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On
        ProxyPassReverse /MyWebApp/  balancer://myClusterBalancer/MyWebApp/

        ProxyPass / balancer://myClusterBalancer/MikiFax/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On
        ProxyPassReverse / balancer://myClusterBalancer/MyWebApp/
</VirtualHost>

还有我的 Tomcat server.xml 用于 Node1 和 Node2 vim /opt/tomcat/conf/server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="server01">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server02">

我的系统是这样工作的:

  1. http://192.168.1.100/MyWebApp 上向 VIP 发出 HTTP 请求,我收到了 Apace 的回复;
  2. Apace 将请求转发到作为反向代理和负载均衡器的两个 Tomcat 之一
  3. Tomcat 发送 http 响应

现在在 Tomcat 的页面上我有不同的链接,当我点击这个链接时我需要(打开一个新标签)我必须使用相同的 Tomcat 服务器。

链接格式如下:

第一个链接:

<a target="_blank" href="http://192.168.1.100/MyWebApp/F?URL=1599825050056&amp;viewAttach=Y">CLICK FOR DETAILS</a>

当我点击它时,我会打开一个新标签页 第二个链接:

<a href="attachments\myAttachment.pdf" target="_blank">myAttachment.pdf</a>

这个文件在我加载页面时保存在服务器上(在我点击第一个链接之后),如果我点击这个链接,我会在新选项卡中打开文件,但有时这个请求会被其他服务器处理我收到一个错误,因为在第二台服务器上没有下载这个文件。

我该如何解决这个问题? 感谢您的更新。

【问题讨论】:

    标签: apache tomcat load-balancing reverse-proxy sticky-session


    【解决方案1】:

    解决了

    为 Server1 修改 Tomcat server.xml

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="server01">
    

    为 Server2 修改 Tomcat server.xml

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="server02">
    

    修改 Apache 配置

    <VirtualHost *:80>
            ProxyPreserveHost On
            Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
        
            <Proxy balancer://myClusterBalancer>
                BalancerMember http://192.168.1.101:8080/ route=server01
                BalancerMember http://192.168.1.102:8080/ route=server02
                ProxySet stickysession=ROUTEID
            </Proxy>
            
            ProxyPass /MyWebApp/  balancer://myClusterBalancer/MyWebApp/
            ProxyPassReverse /MyWebApp/  balancer://myClusterBalancer/MyWebApp/
            
            ProxyPass / balancer://myClusterBalancer/MyWebApp/
            ProxyPassReverse / balancer://myClusterBalancer/MyWebApp/
        </VirtualHost>
    

    【讨论】:

      猜你喜欢
      • 2017-10-22
      • 2021-09-06
      • 2020-10-06
      • 2013-02-22
      • 2013-04-18
      • 2013-05-01
      • 1970-01-01
      • 2012-03-12
      • 2023-03-10
      相关资源
      最近更新 更多