Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在负载平衡的Apache+;PHP服务器?_Php_Apache_Http Proxy_Mod Proxy_Httpcookie - Fatal编程技术网

如何在负载平衡的Apache+;PHP服务器?

如何在负载平衡的Apache+;PHP服务器?,php,apache,http-proxy,mod-proxy,httpcookie,Php,Apache,Http Proxy,Mod Proxy,Httpcookie,我使用设置了一个负载平衡的Apache服务器,从Apache的角度来看,一切都很好。我有一个带有mod_代理的负载平衡器,还有两个webheads,它们在实践中为请求提供服务 但是我尝试在它们上运行我的PHP应用程序,设置cookie时出现了一个问题。在调查时,我发现服务器名设置为服务器的IP地址(而不是我在httpd.conf中设置的真实服务器名)。这是我用来设置cookie的命令 setcookie("mycookie", $value, time() + 86400, "/", $_SER

我使用设置了一个负载平衡的Apache服务器,从Apache的角度来看,一切都很好。我有一个带有mod_代理的负载平衡器,还有两个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等),因此服务器名称对于所有用户都不一致

如果我在$\u SERVER['SERVER\u NAME']中回显该值,它将显示服务器的IP地址,而不是服务器名称。因此,当我在服务器之间切换时,cookie丢失


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

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

ProxyPreserveHost On

您可以做几件事1)在httpd.conf中确保您的服务器名称与IP一起放在/etc/host文件中2)确保您逐行输入每个具有服务器IP的客户端的名称。3) 您还可以尝试使用Resolve.conf文件列出您的客户端4)如果使用DNS,请为每个客户端添加区域条目5)确保您可以将所有客户端解析为相应的绑定IP