问题描述
|
这个问题已经在这里有了答案:
解决方法
如果您的计算机与服务器位于同一网络上,并且位于具有NAT的路由器之后,那么您可能会看到自己的私有IP
,首先,让我澄清一些事情。
当您在localhost上时,不使用ISP来获取网页,因此您将对ipv6使用内部IP
127.0.0.1
或::1
。
如果您是通过某种路由器从本地网络上获取页面的,则该路由器将分配一个IP,例如192.168.1.90
。
如果您的站点托管在网络外部,则您要求ISP为您获取站点,这意味着您可以使用whatsmyip指定的IP。
如果您使用的是DNS服务器(例如Opendns),则要求您的ISP要求Opendns为您获取站点,并且由于明显的原因,开放dns使用一组与您的IP不同的ip \。
可能存在某种可能会干扰代理的代理,因此您应该为此做一个对策,如果需要任何直接连接以及出于其他一些原因,标准代理站点应将客户端IP转发到服务器上。
话虽这么说,您通常可以在检查REMOTE_ADDR
之前通过检查其他几个参数来找到IP,这是我为我的一个项目创建的类,但是您可以随心所欲:
https://github.com/AdminSpot/ASDDL/blob/master/system/classes/http/request.php
foreach (array(\'HTTP_CLIENT_IP\',\'HTTP_X_FORWARDED_FOR\',\'HTTP_X_FORWARDED\',\'HTTP_X_CLUSTER_CLIENT_IP\',\'HTTP_FORWARDED_FOR\',\'HTTP_FORWARDED\',\'REMOTE_ADDR\') as $key)
{
if (array_key_exists($key,$_SERVER) === true)
{
foreach (explode(\',\',$_SERVER[$key]) as $ip)
{
if (filter_var($ip,FILTER_VALIDATE_IP) !== false)
{
$this->ip = $ip;
break;
}
}
}
}
如您所见,数组的顺序非常重要:
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED
HTTP_X_CLUSTER_CLIENT_IP
HTTP_FORWARDED_FOR
HTTP_FORWARDED
REMOTE_ADDR
注意REMOTE_ADDR
倒数第二个,这是因为这是不得已的方法,并且大多数时候是不正确的。
,当您的Web服务器位于本地计算机上时,它将为您提供本地IP地址(大多数为127.0.0.1),这是因为您不是从外部访问它。那是原因。
,什么是IP?
我唯一的困难是您可能会落后于代理人。可以吗
,如果您的服务器是Apache,并且在Apache之前使用了一些前端,则可以尝试使用mod_rpaf:
在Debian中:
aptitude install libapache2-mod-rpaf
然后编辑配置:
nano /etc/apache2/mods-enabled/rpaf.conf
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1
</IfModule>
,可能是因为您是从本地主机访问的?您看到的IP是127.0.0.1,还是本地IP(192.168.x.x)?