我试图用mod_proxy_balancer设置一个平衡的群集。
我从这里按照示例行来设置一个cookie。 我不得不调整它,因为环境不稳定,所以不是每个请求都会返回一个200代码。
Header always add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; <Proxy balancer://cluster> BalancerMember http://server1.example.com route=share2 BalancerMember http://server2 example.com route=share1 </Proxy> ProxyPass /balancer balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On ProxyPassReverse /balancer balancer://cluster/
(我知道stickysession!= ROUTEID,但这是因为这个问题范围之外的原因)
所以在我的本地开发框中获得
Set-Cookie ROUTEID=.share1;
作为响应标题之一,这是我所期望的。
然而在testing环境中,我明白了
Set-Cookie: ROUTEID=.(null);
我不知道如何可以(空),我可以做什么来阻止它为空。 下游服务器可以做些什么来阻止ROUTEID被设置? 或者是有一些其他的configuration选项,可以阻止它?
我怀疑你是首先访问/balancer之外的一个URL,并从中获取一个垃圾cookie(因为如果请求中没有使用负载平衡器,环境variables确实是空的)。
尝试在使用平衡器的情况下设置cookie:
<Proxy balancer://cluster> BalancerMember http://server1.example.com route=share2 BalancerMember http://server2 example.com route=share1 </Proxy> <Location /balancer/> Header always add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; ProxyPass balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On ProxyPassReverse balancer://cluster/ <Location>
在这个特殊情况下,这是路由设置,但代理服务器的响应失败。 如果它收到一个HTTP错误,它会给出一个响应,但如果连接被终止,它会给出一个空值。