【问题标题】:Apache / Define stickiness with JSESSIONIDApache / 使用 JSESSIONID 定义粘性
【发布时间】:2015-09-01 10:34:17
【问题描述】:

我尝试在 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再次指定参数的名称。这 参数值用于查找有路由的成员worker 等于那个值。由于不容易提取和操作 响应中包含的所有 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 处理一次。

我做错了什么?

【问题讨论】:

  • 你说你定义了一个“标题”“jsessionid a12”。但是 Apache 配置将通过 JSESSIONID 的名称查找一个 cookie,其值为 node1 或 node2。输入是什么,是不是 cookie?
  • @covener:感谢您的评论。我现在尝试使用 URL 查询参数。所以我发送以下 {myserver}/doc?jsessionid=node1。它仍然是 5006 和 5008。

标签: apache apache-modules


【解决方案1】:

经过一番搜索,我发现了问题所在。为了通过 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/

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

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多