我使用this tutorial设置了负载平衡的Apache服务器,并且从Apache的角度来看一切正常。我有一个带有mod_proxy的负载均衡器,以及两个在实际中为请求服务的webheads。
但是我试图在它们上运行我的PHP应用程序,并且设置cookie存在问题。在调查过程中,我发现服务器名称设置为服务器的IP地址(而不是我在httpd.conf中设置的真实服务器名称)。这是我用于设置Cookie的命令;
setcookie("mycookie", $value, time() + 86400, "/", $_SERVER['SERVER_NAME'], false, true);
我在这里使用$ _SERVER ['SERVER_NAME']的原因是,我的每个客户端应用程序都有一个单独的地址(例如client1.xyz.com,client2.xyz.com等),因此服务器名称不一致适用于所有用户。
如果$ _SERVER ['SERVER_NAME']如果我回显该值,它将显示服务器的IP地址,而不是服务器名称。因此,当我在服务器之间切换时,cookie丢失了。
如何在群集的网络头上设置服务器名称?
我自己找到了答案。可以通过在负载均衡器中设置ProxyPreserveHost(在Proxy指令内部)来完成。这样,客户端标头将由负载均衡器传递给工作程序。
ProxyPreserveHost On