微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么$ _SERVER 显示与我的外部IP不同的IP?

可能重复:

突然$ _SERVER ['REMOTE_ADDR']开始返回10.10.10.10 PHP

我一定在这里错过了一些基本的东西..但是当我浏览一个IP显示网站,如http://www.whatsmyip.org/,他们显示一个特定的IP。 但是,当我在我的网站上的页面上回显出$_SERVER["REMOTE_ADDR"] ,它显示一个不同的IP。

这是为什么? 我怎样才能通过PHP获取与whatsmyip.org网站显示的相同的IP地址?

VirtualBox wordpressredirect到端口80

如何在HTML中显示base64编码的图像,如果它位于一个单独的文件

.htaccess:检查查询string是否具有某个值,否则redirect它

Apache日志说:拒绝 – 但它的工作(htaccess的)

Apache POI .getCell()错误java.lang.NullPointerException如果空白,则无法读取单元格

防止从Apache访问文件没有.htaccess

Nginx反向代理与Laravel的wordpress

干预/图像需要FileInfo

Java Apache CLI OptionBuilder不能用作Builder模式

在Apache 2.2.3上设置通配符子域(带有反向代理)

如果您的计算机与您的服务器位于同一网络中,则在具有NAT的路由器后面,则可能会看到您的私有IP

首先让我澄清一些事情。

当你在本地主机上,你不使用你的ISP要获取网页,因此你会使用一个内部ip为127.0.0.1或::1为ipv6。

如果您通过某种类型的路由器从本地网络获取页面,您将拥有一个由路由器分配的IP,例如192.168.1.90

如果您的网站托管在网络之外,那么您要求您的ISP为您取得网站,这意味着您可以使用whatsmyip指定的IP。

如果您使用DNS服务器如Opendns那么您要求您的ISP要求Opendns为您提取网站,并且打开DNS使用一组与您不同的IP地址,原因很明显。

可能会有某种代理可能会干扰,所以你应该做的就是反标,一个标准的代理站点应该将客户端的IP转发到服务器上,而不需要任何直接的连接和其他一些原因。

这REMOTE_ADDR ,你通常可以在检查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

<Ifmodulee mod_rpaf.c> RPAFenable On RPAFsethostname Off RPAFproxy_ips 127.0.0.1 </Ifmodulee>

这可能是因为你从本地主机访问它? 你看到的IP是127.0.0.1,还是你的本地IP(192.168.xx)?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐