php - $_SERVER['REMOTE_ADDR'] 给出服务器的 IP 地址而不是用户的 IP 地址
问题描述
编辑:
我已经清理了浏览器的缓存,现在我的 PHP 代码正在运行。
我知道已经有类似的问题,并且我不能相信$_SERVER['REMOTE_ADDR']
获得访问者的真实 IP 地址。
我正在本地主机上测试我的网站,我没有在任何代理后面,我试图显示我的 IP 地址,但$_SERVER['REMOTE_ADDR']
给出了127.0.0.1
,即服务器的 IP 地址。
如果我将相同的代码在线放在我的服务器中,我会再次收到服务器的 IP 地址。
我试过没有成功:
function get_visitor_ip() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ipaddress .= $_SERVER['HTTP_CLIENT_IP'] . ' - ';
}
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipaddress .= $_SERVER['HTTP_X_FORWARDED_FOR']. ' - ';
}
if(isset($_SERVER['HTTP_X_FORWARDED'])) {
$ipaddress .= $_SERVER['HTTP_X_FORWARDED']. ' - ';
}
if(isset($_SERVER['HTTP_FORWARDED_FOR'])) {
$ipaddress .= $_SERVER['HTTP_FORWARDED_FOR']. ' - ';
}
if(isset($_SERVER['HTTP_FORWARDED'])) {
$ipaddress .= $_SERVER['HTTP_FORWARDED']. ' - ';
}
if(isset($_SERVER['REMOTE_ADDR'])) {
$ipaddress .= $_SERVER['REMOTE_ADDR']. ' - ';
}
if($ipaddress == '') {
$ipaddress = 'UNKNOWN';
}
return $ipaddress;
}
但是,它再次返回127.0.0.1
。任何替代解决方案?
解决方案
这意味着您的服务器可能位于某种反向代理之后,例如负载均衡器或 CDN。您的 PHP 服务器没有接收来自客户端的直接连接,这些连接之前经过了一些中间连接,因此该中间连接的 IP 就是您的服务器看到的所有内容。
在这种情况下,中间代理通常会将某些指定 HTTP 标头中的实际客户端 IP 转发到您的 PHP 服务器。那是当您非常明确且非常有选择地使用类似$_SERVER['HTTP_X_FORWARDED']
; 当且仅当您知道自己处于这种情况以及您可以信任哪个 HTTP 标头时。请查阅您的主机/代理/网络情况的文档,它会告诉您使用什么标头。
推荐阅读
- excel - 旋转图片然后设置旋转后的属性
- android - 约束布局下的ListView在预览中消失
- python - 列表和嵌套列表的简单点积以单独列表中的索引为条件
- winapi - 消息和通知有什么区别?
- powerbi - 使用 SelectedValue 时的慢速测量/视觉
- amazon-web-services - AWS Step Function:如何在 step 函数中调用相同 lambda 的多个实例
- doctrine - Doctrine EntityManager 使用 Swoole 关闭
- react-native - 反应本机任务:app:validateSigningDebug FAILED
- javascript - 在贝宝结帐时将名称传递给贝宝
- python-3.x - 如何为 Whatsapp Web 使用 Chrome Webdriver 缓存?