Apache /使用JSESSIONID

时间:2015-06-16 14:24:13

标签: apache apache-modules

我尝试在Apache中定义粘性。这是proxy.conf中的定义:

<Proxy balancer://fs1>
    BalancerMember https://localhost:5006/doc route=node1
    BalancerMember https://localhost:5008/doc route=node2
    ProxySet stickysession=JSESSIONID|jsessionid
</Proxy>
ProxyPass /doc balancer://fs1

或:

ProxyPass "/doc " "balancer://fs1" stickysession=JSESSIONID|jsessionid scolonpathdelim=On
<Proxy balancer://fs1>
    BalancerMember https://localhost:5006/doc route=node1
    BalancerMember https://localhost:5008/doc route=node2
</Proxy>

我尝试使用url查询参数以实现粘性(因为我知道不建议覆盖cookie)。正如Apache文档中所写:

  

实现粘性的第二种方法是URL编码。网络   服务器在请求的URL中搜索查询参数。该   使用stickysession再次指定参数的名称。该   参数的值用于查找具有路由的成员工作者   等于那个值。因为提取和操作并不容易   响应中包含的所有URL链接,通常是添加的工作   每个链接的参数由后端生成   内容。在某些情况下,通过网络进行此操作可能是可行的   服务器使用mod_substitute或mod_sed。这可能会产生负面影响   但是在性能方面。

我在邮递员中发送了以下请求10次:

https://{{myserver}}/doc?jsessionid=node1

我注意到请求被传递给node1(5个请求)和node2(也是5个请求)。但我定义了stickysession,因此它应该选择node1,并且每次都转到此节点。

我的目标是客户端会发送请求https://{{myserver}}/doc?jsessionid=nodeX,请求会转到nodeX不使用Cookie .. ,只使用粘性是URL编码)。

例如,客户端发送请求https://{{myserver}}/doc?jsessionid=node1 10次。请求每10次由https://localhost:5006提供。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

经过一番搜索,我发现了问题所在。要通过URL请求参数进行路由,您必须包含“。”在'node1'之前如此:

https://{{myserver}}/doc?jsessionid=.node1

这篇博客文章指出了我正确的方向:

  

路由以字母数字命名非常重要   前缀,点,然后是数字。例如:server.1,t.2等   mod_proxy_balancer代码使用点和使用分割此路由名称   第二个值作为路径号。所以s.1会指向“route = 1”   http://hkrishnan.in/2013/10/14/debugging-apache-mod_proxy_balancer/

我自己测试过,效果很好!