php 5 $ _SERVER ['SERVER_ADDR']有多个IP

时间:2009-08-18 19:33:22

标签: php ip-address hostname

我正在运行一个配置了2个网络接口的ubuntu jaunty服务器:一个公共IP,一个私有。当我请求服务器IP时,我得到了公共IP。如果我有多个接口,那么确保我获得公共接口是最好的做法(这就是我想要的)?

<?php
echo " <table>";
echo "<tr><td>" .$_SERVER['SERVER_ADDR'] ."</td><td>SERVER_ADDR</td></tr>";
echo "<tr><td>" .$_SERVER['SERVER_NAME'] ."</td><td>SERVER_NAME</td></tr>";
echo " </table>";
?>

3 个答案:

答案 0 :(得分:1)

我的印象是,您将获得流量来自哪里的地址,因此,无论您的请求来自何处,您都希望始终对公共界面采取行动,您将不得不忽视{ {1}}并确定您要在代码中处理的IP(对其进行硬编码,分析接口表并查找不在专用网络上的内容,有什么用)。

答案 1 :(得分:0)

我认为这是由Apache在您设置域时处理的。 Apache建议每个ip使用一个单独的守护进程来保持它们: http://httpd.apache.org/docs/1.3/vhosts/ip-based.html

  

为每个虚拟主机创建单独的httpd安装。对于每个安装,请使用配置文件中的Listen指令选择守护程序所服务的IP地址(或虚拟主机)。 e.g。

`Listen www.smallco.com:80`
     

建议您使用IP地址而不是主机名(请参阅DNS caveats)。

您可以使用/etc/hosts文件来确保您选择的主机名始终解析为所需的IP。有关/etc/hosts的信息,请参阅:http://www.faqs.org/docs/securing/chap9sec95.html

答案 2 :(得分:0)

您应始终从公共网络获取公共IP,并从私人网络中的人员获取私有IP。

没有明智的方法可以确保您始终获得公共IP,也没有意义