首页 > 解决方案 > 如何在负载均衡的 Apache+PHP 服务器上设置服务器名称?

问题描述

我使用本教程设置了一个负载平衡的 Apache 服务器,从 Apache 的角度来看,一切正常。我有一个带有 mod_proxy 的负载均衡器,以及两个在实践中为请求提供服务的 webhead。

但我试图在它们上运行我的 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 上设置服务器名称?

标签: phpapachehttp-proxymod-proxyhttpcookie

解决方案


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

ProxyPreserveHost On

推荐阅读