REMOTE_ADDR无效

时间:2013-07-18 19:29:19

标签: php

我有一个奇怪的问题。无论我做什么,IP都是服务器的IP,而不是客户端/访客。怎么办?

if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
}
return $ip_address;
}    

3 个答案:

答案 0 :(得分:2)

您可能需要切换到其他服务器软件(取决于您现在使用的是什么)

来自PHP docs

  

$ _ SERVER是一个包含标题,路径和脚本位置等信息的数组。此阵列中的条目由Web服务器创建。 无法保证每个Web服务器都能提供这些服务;服务器可能会省略一些,或提供其他未列出的内容。也就是说,这些变量中的大量都在»CGI / 1.1规范中考虑,所以你应该可以期待那些。

REMOTE_ADDR位于CGI/1.1 specification但是很奇怪,无论你使用什么服务器都不会返回它。

答案 1 :(得分:0)

如果您的服务器与服务器在同一网络上,在具有NAT的路由器后面,那么您可能会看到您的私有IP。

如果您在反向代理后面$_SERVER['REMOTE_ADDR'];将始终是代理服务器的IP。

答案 2 :(得分:0)

您的网络服务器配置不正确(一旦我在我的虚拟主机提供商处购买别名域时遇到此问题)。 但是,如果您无法解决此问题,我 HIGLY 建议您检查$_SERVER['HTTP_X_FORWARDED_FOR']是否为有效的IP地址,然后只需将其$_SERVER['REMOTE_ADDR']用于简单使用,因为很容易伪造$_SERVER['HTTP_X_FORWARDED_FOR']并抛出你自己的价值(我有这个问题)。