1

我有一个奇怪的问题。无论我做什么,IP 都是服务器的 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;
}    
4

3 回答 3

2

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

来自PHP 文档

$_SERVER 是一个包含标题、路径和脚本位置等信息的数组。此数组中的条目由 Web 服务器创建。无法保证每个 Web 服务器都会提供其中任何一个;服务器可能会省略一些,或提供此处未列出的其他内容。也就是说,在 » CGI/1.1 规范中包含了大量这些变量,因此您应该能够预料到这些变量。

REMOTE_ADDR虽然在CGI/1.1 规范中,但奇怪的是,您使用的任何服务器都不会返回它。

于 2013-07-18T19:32:17.360 回答
1

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

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

于 2013-07-18T19:34:01.887 回答
0

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

于 2013-07-18T19:59:31.557 回答