如何在负载平衡的 Apache+PHP 服务器上设置服务器名称?

How to set the server name on a load balanced Apache+PHP server?

我使用 this tutorial 设置了一个负载平衡的 Apache 服务器,从 Apache 端来看一切都运行良好。我有一个带有 mod_proxy 的负载均衡器,以及两个在实践中为请求提供服务的网络头。

但我尝试 运行 我的 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 丢失了。

如何在集群的webheads上设置服务器名称?

我自己找到了答案。这可以通过在负载平衡器中设置 ProxyPreserveHost 来完成(在 Proxy 指令中)。这样,客户端 header 将由负载均衡器传递给工作人员。

ProxyPreserveHost On