繁体   English   中英

Apache 作为反向代理和负载均衡器需要使用粘性会话

[英]Apache as Reverse-Proxy and Load-Balancer need to use sticky session

我在集群中有两个 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>

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

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

解决了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM