我们使用Apache来平衡我们的后端(IIS)Web服务器。 我们的configuration遵循Apache文档中的一个例子 。 我们尝试使用Apache设置的cookie实现粘性路由(即,来自同一客户端的后续请求将被路由到相同的上游服务器)。
我们的configuration如下所示:
ProxyRequests off ProxyPreserveHost On <Proxy balancer://oursitename> allow from all BalancerMember http://1.2.3.4:80 route=1 # Further servers will be added here ProxySet stickysession=ROUTEID </Proxy> # This line should set the correct cookie.. Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED ProxyPass /balancer-manager ! ProxyPass / balancer://oursitename/ nofailover=Off ProxyPassReverse / http://1.2.3.4:80/ <Location /balancer-manager> SetHandler balancer-manager Order Deny,Allow Allow from all </Location>
现在Apache似乎不包括实际的路由,但是cookie只包含点“。”。 我检查了Firebug和Wireshark。 所以在每个HTTP响应标题出现(即每个图像/ CSS / JS):
Set-Cookie: ROUTEID=.; path=/
令人惊讶的是,当重新加载大约两次的页面时,突然出现了一个Set-Cookie:ROUTEID = .2在大约十个响应之一中。 浏览器在随后的请求中使用这个值,这些请求不会被进一步的Set-Cookie条目占用。 所以看起来像Apache接受路由.2是有效的。 我不明白为什么它总是.2,即使我从平衡器中删除第二台服务器,这个数字也会出现!
任何人都可以解释我在这里发生了什么,我怎么能解决它?
我不知道为什么它保持2.但是你的configuration的一部分是
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
ENV = BALANCER_ROUTE_CHANGED
如果路由器已经改变了0,那么它将是1,否则,如果路由没有改变,那么cookie将不会被设置,除非它需要改变为新的值。
它停留在2,因为你已经设置了stickysession,使其坚持到当前的成员服务器。 清除caching并刷新它应该改变(尝试这几次),然后坚持到新值,直到你删除cookies。 为了得到更好的想法,请参阅https://wiki.apache.org/httpd/LoadBalanceWithoutStickyCookie
谢谢。