`
nihongye
  • 浏览: 101979 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

apache集群,多web应用,粘性会话 不起作用问题的简单解决方法

阅读更多
今天系统部署,发现web应用之间,粘性会话的配置不起作用。因为配置stickysession=JSESSIONID而JSESSIONID生成在各个应用的path下。
在apache中的mod_proxy_balancer.c中:
static char *get_cookie_param(request_rec *r, const char *name)
{
    const char *cookies;
    const char *start_cookie;

    if ((cookies = apr_table_get(r->headers_in, "Cookie"))) {
        for (start_cookie = ap_strstr_c(cookies, name); start_cookie;
             start_cookie = ap_strstr_c(start_cookie + 1, name)) {
            if (start_cookie == cookies ||
                start_cookie[-1] == ';' ||
                start_cookie[-1] == ',' ||
                isspace(start_cookie[-1])) {

                start_cookie += strlen(name);
                while(*start_cookie && isspace(*start_cookie))
                    ++start_cookie;
                if (*start_cookie == '=' && start_cookie[1]) {
                    /*
                     * Session cookie was found, get it's value
                     */
                    char *end_cookie, *cookie;
                    ++start_cookie;
                    cookie = apr_pstrdup(r->pool, start_cookie);
                    if ((end_cookie = strchr(cookie, ';')) != NULL)
                        *end_cookie = '\0';
                    if((end_cookie = strchr(cookie, ',')) != NULL)
                        *end_cookie = '\0';
                    return cookie;
                }
            }
        }
    }
    return NULL;
}

apache没由提供cookie path的设置,因此按照cookie的优先顺序,将首先取到与应用上下文中接近的jsessionid,所以显然,如果各个应用都有同名的sticksession,其值又不同,那么apache粘性会话不能跨web应用。

解决方法也显然有二:
一.修改mod_proxy代码,提供在指定的cookie path读取sticksession的配置
(发现在服务端读不了cookie path,所以此路不同,哈哈)

二.不使用jsessionid作为stickysession的名字,自己定义一个,并在/添加cookie,如myjsessionid=${your uuid}.server1,其中server1为route id。
分享到:
评论

相关推荐

    通过_Terracotta实现基于Tomcat的Web应用集群

    ### 通过Terracotta实现基于Tomcat的Web应用集群 #### 概述 本文主要介绍了如何利用Terracotta与Tomcat构建高效的Web应用集群。在实际应用中,通过集群技术可以显著提升系统的可用性和伸缩性,特别是对于高流量、...

    tomcat .apache2.0集群配置资料

    综上所述,配置Apache2.0和Tomcat的集群涉及到多个层面,包括服务器配置、网络架构、负载均衡策略以及应用优化等。正确实施这些步骤将有助于构建一个高可用、高性能的Web服务环境。对于初学者来说,这是一个很好的...

    apache+tomcat+memcached

    在构建高性能、高可用性的Web服务时,Apache服务器、Tomcat应用服务器以及Memcached缓存服务器的组合常常被用于处理复杂的应用场景。Apache作为静态资源的高效处理器,可以减轻Tomcat处理静态页面的压力,而Tomcat则...

    Apache+Tomcat集群

    一种常见方法是使用粘性会话(sticky sessions),即将同一个用户的后续请求始终路由到同一台Tomcat服务器,以保持会话状态的一致性。这可以通过在`mod_jk`配置中设置`stickysession`参数来实现。 此外,为了实现更...

    Apache+Tomcat+JK 实现集群负载均衡文档

    Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...

    apache2.2+tomcat6集群配置

    Apache2.2与Tomcat6集群配置是一种常见的Web服务架构,用于提高网站的可用性和可扩展性。在Windows环境下,这种配置可以实现负载均衡,确保即使单个服务器出现故障,整个系统仍然能继续运行,同时分散请求以降低单一...

    Apache与Jboss负载均衡教程

    - **主题与目标**:本教程旨在深入探讨JBoss负载均衡的核心概念、配置方法及其与Apache的集成技术。主要内容涵盖JBoss的基本介绍、配置技巧、HTTPS的配置、Apache的安装与配置流程、JBoss集群的搭建以及粘性Session...

    精通Apache的Tomcat 6.rar

    7. **集群与负载均衡**:讨论了如何配置Tomcat集群,实现高可用性和负载均衡,包括Session复制和粘性会话。 8. **集成其他服务**:涵盖了与Apache HTTP Server、 mod_jk或mod_proxy的集成,以利用Apache的特性,如...

    Apache2.2+tomcat7+jk+jdk1.6

    本配置"Apache2.2+tomcat7+jk+jdk1.6"旨在实现一个稳定且可靠的环境,特别关注于session的共享与管理,以解决多服务器间的session一致性问题。 Apache2.2是Apache HTTP Server的第2.2版本,提供了强大的静态内容...

    jboss 集群配置

    2. **基于用户的负载均衡**:也称为粘性会话,首次请求的用户会被分配到一个特定的节点,后续的所有请求都将被定向到该节点。这种方式减少了节点间的通信,提高了响应速度,但若分配的节点故障,会导致相应用户丢失...

    tomcat集群搭建及实现细节

    - 实现粘性Session,确保用户会话在集群内的某个固定节点上持续有效。 #### 准备工作 为了确保集群能够在32位环境下正常运行,所有组件(包括JDK、Tomcat、Apache)均需为32位版本。此外,还需准备以下内容: - ...

    tomcat集群部署文档

    - **粘性会话(Sticky Sessions)**:将来自同一用户的请求持续发送到最初处理该用户的节点,以保持会话状态的一致性。 - **会话持久化(Session Persistence)**:通过会话复制或会话ID重定向确保会话在集群中的...

    Jboss集群配置

    这可能需要特定的配置,例如,使用粘性会话或共享存储来存储会话数据。 总的来说,配置JBoss集群需要深入理解网络架构、负载均衡策略以及Web服务器和应用服务器间的通信机制。这是一项涉及到多个层次的技术任务,...

    apache-tomcat配置指南.pdf

    此外,文档内容还提到了session的粘性设置,即worker.controller.sticky_session=1,意味着会话会尽量保持在同一个Tomcat实例上,这对于用户在Web应用中的连续操作有好处,可以保持会话状态不丢失。 在Linux环境下...

    apache代理Tomcat负载均衡配置

    通过上述配置,Apache能够有效地将请求代理并负载均衡到Tomcat服务器集群上,同时通过粘性会话和多种策略参数的设定,确保了系统在高并发场景下的稳定运行。此外,这些配置参数可以根据实际应用环境的需求进行调整...

    tomcat-redis-session-manager-tomcat-7.zip

    《Apache Tomcat与Redis结合实现非粘性会话管理》 在现代Web应用程序开发中,会话管理是一项至关重要的任务,它确保用户在不同页面之间的交互保持一致性。Apache Tomcat作为广泛使用的Java Servlet容器,提供了丰富...

    tomcat-cluster-redis-session-manager:Tomcat集群Redis会话管理器Java客户端

    Tomcat集群Redis会话管理器 ... 展望未来,我们无需在Load Balancer中启用粘性会话(JSESSIONID)。 支持: Apache Tomcat 7 Apache Tomcat 8 Apache Tomcat 9 Apache Tomcat 10 资料下载: Maven配置 <id>repsy

    jboss集群服务

    - **幂等方法**:执行多次结果不变的方法,适合在分布式环境中使用,保证操作的一致性。 **2. JBoss集群的特点** - **自动发现**:集群节点无需额外配置即可互相识别。 - **全局复制的JNDI树**:所有节点共享同一...

    跟老男孩学Linux运维:Web集群实战、跟老男孩学习Linux运维:Shell编程实战高清书籍(带标签)

    2. **会话保持**:为了保持用户的会话状态,在负载均衡器中通常会采用粘性会话(sticky session)等机制来确保来自同一用户的请求被定向到相同的后端服务器。 3. **故障检测与恢复**:通过定期的心跳检查等方式监测...

Global site tag (gtag.js) - Google Analytics