我正在尝试使用 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;
作为响应标头之一,这正是我所期望的。
但是在测试环境中,我得到了
Set-Cookie: ROUTEID=.(null);
我不知道它怎么会是 (null),以及我能做些什么来阻止它为空。下游服务器可以做些什么来阻止设置 ROUTEID 吗?或者是否有其他配置选项可能会阻止它?
答案1
我怀疑您正在访问 first 之外的 URL /balancer
,并从中获取垃圾 cookie(因为如果请求中没有使用负载均衡器,则环境变量确实为空)。
尝试在使用平衡器的情况下设置 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>
答案2
在这个特定情况下,路由已设置,但代理服务器的响应失败。如果收到 HTTP 错误,它会给出响应,但如果连接终止,它会给出空值。