【发布时间】: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