从客户端 Apache 和 Php 获取 IP
Posted
技术标签:
【中文标题】从客户端 Apache 和 Php 获取 IP【英文标题】:Get Ip From Client Apache and Php 【发布时间】:2021-10-19 22:08:17 【问题描述】:想问,但也许这个问题是重复的。很抱歉,其他问题的所有答案都不适用于我的情况。
问题
我有一个服务器,apache 作为 webserver,默认设置运行 php+7.4,certbot 作为 SSL,公共 IP 为 192.168.1.11,我想检索打开我的网站的客户端的 IP,例如域 news.test .com。 test.com 域本身有一个公共 IP 地址,例如 123.100.1.10。 如何获取打开 news.test.com 域的客户端 IP?
已经做了
我已经这样做以获得IP
public static function get_ip()
$mainIp = '';
if (getenv('HTTP_CLIENT_IP'))
$mainIp = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$mainIp = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$mainIp = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$mainIp = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$mainIp = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$mainIp = getenv('REMOTE_ADDR');
else
$mainIp = 'UNKNOWN';
return $mainIp;
问题
我遇到的问题不是我获得的 IP 客户端,而是从 test.com 域获得的 IP。我尝试了另一个互联网连接并进行了公共 IP 测试,但我仍然从 test.com 获得 IP 而不是客户端 IP,是因为我的父域或我的 apache 的设置错误吗?还是有错误或者其他方式获取客户端IP?
【问题讨论】:
getenv()
在这种情况下是错误的。试试这样:***.com/a/64174081/2412335 -
检索客户端的 IP 地址是出了名的不可靠。在您的情况下,我猜有一个反向代理处理入站请求,并且它没有设置所有标头,因此您只会看到该服务器的 IP 地址。另请注意,192.168.1.11 不是公共地址。它可能是您服务器的地址,但 192.168.x.x 块是专门为私有地址保留的。
@TangentiallyPerpendicular yap 我知道不是公共 ip,它只是我的例子。我尝试使用与不同服务器制作的相同应用程序,服务器可以显示与ipinfo.io中相同的ip
@digijay 仍然从服务器 awesomescreenshot.com/image/… 获取 ip,我认为,错误不在我的 php 脚本中,而是在我的 apache 网络服务器上的设置
【参考方案1】:
请尝试使用 HTTP_CF_CONNECTING_IP
public static function get_ip()
$mainIp = '';
if (getenv('HTTP_CF_CONNECTING_IP'))
$mainIp = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$mainIp = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$mainIp = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$mainIp = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$mainIp = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$mainIp = getenv('REMOTE_ADDR');
else
$mainIp = 'UNKNOWN';
return $mainIp;
【讨论】:
仍然从服务器 awesomescreenshot.com/image/… 获取 ip,我认为,错误不在我的 php 脚本中,而是在我的 apache 网络服务器上的设置以上是关于从客户端 Apache 和 Php 获取 IP的主要内容,如果未能解决你的问题,请参考以下文章