我尝试在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再次指定参数的名称。该参数的值用于查找路由等于该值的成员worker。由于提取和处理响应中包含的所有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
。
我做错了什么?
经过一番搜索,我发现了问题所在。为了通过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/
我自己对此进行了测试,效果很好!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句