You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache与多代理负载均衡器集成嵌入式Tomcat配置问题咨询

Apache多代理负载均衡配置错误排查与修正

现有配置的问题点

  1. 重复加载模块:配置里重复加载了proxy_module,多余的一行需要删除。
  2. BalancerMember协议缺失:第一个负载均衡组myset里的BalancerMember没指定http://协议头,会导致代理解析异常,需统一添加协议。
  3. ProxyPass顺序错误:ProxyPass / balancer://myset/是最宽泛的路径匹配,会覆盖后面所有更具体的路径规则(比如/app1/、/app2/),必须把最长、最具体的路径放在最前面。
  4. 路径拼写错误:ProxyPass /ap3/ balancer://prsreg/里的/ap3/是笔误,应该是/app3/,和后面的Location /app3对应。
  5. 会话粘性配置错误:Spring Boot嵌入式Tomcat的session cookie默认是JSESSIONID,格式为xxxxxx.jvm1(后缀是JVM路由标识),现有配置的stickysession=ROUTEID不匹配,需改为stickysession=JSESSIONID|jsessionid,让Apache正确解析cookie中的路由部分。
  6. 缺少ProxyPassReverse:没有配置ProxyPassReverse,后端应用返回的重定向URL会直接暴露后端端口,需要添加对应规则来修正重定向地址。
  7. ProxySet冗余配置:每个负载均衡组里的两个ProxySet可以合并为一行,简化配置。

修正后的完整配置

### Enable LoadModule entry for Apache mod_proxy and mod_proxy_http ###
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so

<IfModule mod_proxy.c>
    SSLProxyEngine On
    ProxyPreserveHost On

    <Proxy balancer://myset>
        BalancerMember http://hostname:7001 route=jvm1
        ProxySet lbmethod=bytraffic stickysession=JSESSIONID|jsessionid
    </Proxy>

    <Proxy balancer://viewer>
        BalancerMember http://hostname:7002 route=jvm2
        ProxySet lbmethod=bytraffic stickysession=JSESSIONID|jsessionid
    </Proxy>

    <Proxy balancer://prsreg>
        BalancerMember http://hostname:7003 route=jvm3
        ProxySet lbmethod=bytraffic stickysession=JSESSIONID|jsessionid
    </Proxy>

    # 注意:最具体的路径放在最前面
    ProxyPass /app1/ balancer://myset/
    ProxyPassReverse /app1/ balancer://myset/

    ProxyPass /app2/ balancer://viewer/
    ProxyPassReverse /app2/ balancer://viewer/

    ProxyPass /app3/ balancer://prsreg/
    ProxyPassReverse /app3/ balancer://prsreg/

    # 最后配置根路径的代理(如果需要)
    ProxyPass / balancer://myset/
    ProxyPassReverse / balancer://myset/

    <Location /app1>
        Require all granted
    </Location>

    <Location /app2>
        Require all granted
    </Location>

    <Location /app3>
        Require all granted
    </Location>

</IfModule>

关键配置说明

  • 模块加载:确保只加载必要的模块,避免重复加载导致的警告或异常。
  • 会话粘性:stickysession=JSESSIONID|jsessionid中,JSESSIONID是cookie名称,|jsessionid告诉Apache从cookie值的后缀中提取路由标识(对应你设置的-DjvmRoute=jvmx),确保同一用户的请求始终路由到同一后端实例。
  • ProxyPass顺序:Apache会按照配置的顺序匹配路径,因此必须把更具体的路径(如/app1/)放在宽泛路径(如/)前面,否则具体路径的规则不会生效。
  • ProxyPassReverse:用于修正后端返回的重定向、Location响应头,将后端的地址替换为Apache的前端地址,避免暴露后端端口。
  • BalancerMember协议:必须明确指定http://或https://,确保代理请求的协议正确。

内容的提问来源于stack exchange,提问作者Maha Sonu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:47:05