今天系统部署,发现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应用集群。在实际应用中,通过集群技术可以显著提升系统的可用性和伸缩性,特别是对于高流量、...
综上所述,配置Apache2.0和Tomcat的集群涉及到多个层面,包括服务器配置、网络架构、负载均衡策略以及应用优化等。正确实施这些步骤将有助于构建一个高可用、高性能的Web服务环境。对于初学者来说,这是一个很好的...
在构建高性能、高可用性的Web服务时,Apache服务器、Tomcat应用服务器以及Memcached缓存服务器的组合常常被用于处理复杂的应用场景。Apache作为静态资源的高效处理器,可以减轻Tomcat处理静态页面的压力,而Tomcat则...
一种常见方法是使用粘性会话(sticky sessions),即将同一个用户的后续请求始终路由到同一台Tomcat服务器,以保持会话状态的一致性。这可以通过在`mod_jk`配置中设置`stickysession`参数来实现。 此外,为了实现更...
Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...
Apache2.2与Tomcat6集群配置是一种常见的Web服务架构,用于提高网站的可用性和可扩展性。在Windows环境下,这种配置可以实现负载均衡,确保即使单个服务器出现故障,整个系统仍然能继续运行,同时分散请求以降低单一...
- **主题与目标**:本教程旨在深入探讨JBoss负载均衡的核心概念、配置方法及其与Apache的集成技术。主要内容涵盖JBoss的基本介绍、配置技巧、HTTPS的配置、Apache的安装与配置流程、JBoss集群的搭建以及粘性Session...
7. **集群与负载均衡**:讨论了如何配置Tomcat集群,实现高可用性和负载均衡,包括Session复制和粘性会话。 8. **集成其他服务**:涵盖了与Apache HTTP Server、 mod_jk或mod_proxy的集成,以利用Apache的特性,如...
本配置"Apache2.2+tomcat7+jk+jdk1.6"旨在实现一个稳定且可靠的环境,特别关注于session的共享与管理,以解决多服务器间的session一致性问题。 Apache2.2是Apache HTTP Server的第2.2版本,提供了强大的静态内容...
2. **基于用户的负载均衡**:也称为粘性会话,首次请求的用户会被分配到一个特定的节点,后续的所有请求都将被定向到该节点。这种方式减少了节点间的通信,提高了响应速度,但若分配的节点故障,会导致相应用户丢失...
- 实现粘性Session,确保用户会话在集群内的某个固定节点上持续有效。 #### 准备工作 为了确保集群能够在32位环境下正常运行,所有组件(包括JDK、Tomcat、Apache)均需为32位版本。此外,还需准备以下内容: - ...
- **粘性会话(Sticky Sessions)**:将来自同一用户的请求持续发送到最初处理该用户的节点,以保持会话状态的一致性。 - **会话持久化(Session Persistence)**:通过会话复制或会话ID重定向确保会话在集群中的...
这可能需要特定的配置,例如,使用粘性会话或共享存储来存储会话数据。 总的来说,配置JBoss集群需要深入理解网络架构、负载均衡策略以及Web服务器和应用服务器间的通信机制。这是一项涉及到多个层次的技术任务,...
此外,文档内容还提到了session的粘性设置,即worker.controller.sticky_session=1,意味着会话会尽量保持在同一个Tomcat实例上,这对于用户在Web应用中的连续操作有好处,可以保持会话状态不丢失。 在Linux环境下...
通过上述配置,Apache能够有效地将请求代理并负载均衡到Tomcat服务器集群上,同时通过粘性会话和多种策略参数的设定,确保了系统在高并发场景下的稳定运行。此外,这些配置参数可以根据实际应用环境的需求进行调整...
《Apache Tomcat与Redis结合实现非粘性会话管理》 在现代Web应用程序开发中,会话管理是一项至关重要的任务,它确保用户在不同页面之间的交互保持一致性。Apache Tomcat作为广泛使用的Java Servlet容器,提供了丰富...
Tomcat集群Redis会话管理器 ... 展望未来,我们无需在Load Balancer中启用粘性会话(JSESSIONID)。 支持: Apache Tomcat 7 Apache Tomcat 8 Apache Tomcat 9 Apache Tomcat 10 资料下载: Maven配置 <id>repsy
- **幂等方法**:执行多次结果不变的方法,适合在分布式环境中使用,保证操作的一致性。 **2. JBoss集群的特点** - **自动发现**:集群节点无需额外配置即可互相识别。 - **全局复制的JNDI树**:所有节点共享同一...
2. **会话保持**:为了保持用户的会话状态,在负载均衡器中通常会采用粘性会话(sticky session)等机制来确保来自同一用户的请求被定向到相同的后端服务器。 3. **故障检测与恢复**:通过定期的心跳检查等方式监测...