我尝试在 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 编码。Web 服务器在请求的 URL 中搜索查询参数。使用stickysession 再次指定参数的名称。该参数的值用于查找具有等于该值的路由的成员工作人员。由于提取和操作响应中包含的所有 URL 链接并不容易,因此向每个链接添加参数的工作通常由生成内容的后端完成。在某些情况下,使用 mod_substitute 或 mod_sed 通过 Web 服务器执行此操作可能是可行的。但是,这可能会对性能产生负面影响。
我在邮递员中发送了 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
.
我做错了什么?