%{BALANCER_WORKER_ROUTE}e 怎么会为空

%{BALANCER_WORKER_ROUTE}e 怎么会为空

我正在尝试使用 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 错误,它会给出响应,但如果连接终止,它会给出空值。

相关内容