【发布时间】:2019-02-11 20:04:37
【问题描述】:
我是 PHP 新手,我的任务是进行地理定位。
我想在我的 php 应用程序中获取 client_ip。该应用程序部署在 AWS 上,具有 2 个负载均衡器和 apache Web 服务器。
我尝试了以下方法:
if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
$ipAddress = $_SERVER['HTTP_CLIENT_IP'];
} elseif (array_key_exists('HTTP_X_FORWARDED', $_SERVER)) {
$ipAddress = $_SERVER['HTTP_X_FORWARDED'];
} elseif (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (array_key_exists('HTTP_FORWARDED_FOR', $_SERVER)) {
$ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
} elseif (array_key_exists('HTTP_FORWARDED', $_SERVER)) {
$ipAddress = $_SERVER['HTTP_FORWARDED'];
} elseif (array_key_exists('REMOTE_ADDR', $_SERVER)) {
$ipAddress = $_SERVER['REMOTE_ADDR'];
} else {
$ipAddress = '';
}
我认为它会起作用,但它没有。然后我查看了phpinfo,发现如下:
在Headers 中,X-Forwarded-For 设置为 10.1.29.16,
$_SERVER['HTTP_X_FORWARDED_FOR'] 设置为 10.1.29.16 和
$_SERVER['REMOTE_ADDR'] 是 172.17.7.173。
都是内部 IP 地址。
谁能指导我,我怎样才能找到真实客户的IP地址?
PS: 它是一个 Symfony 4 应用程序。
【问题讨论】:
-
这取决于代理/负载平衡器如何(如果有的话)将原始 IP 传递给您的服务器。
标签: php apache amazon-web-services ip-address clientip