cdn背后网站获取真实ip
最近网站上CDN,但上CDN的同时,还有很多来自国外的流量的攻击,需要统计攻击的ip,加入黑名单.在cdn后面的网站如果按照传统的方法,只能获取到cdn服务器的ip,所以需要查看cdn服务商提供的文档和实测结果
PHP超全局变量$_SERVER
<?php
// 原有获取访问者ip方法
// 流量经过cdn后只能通过该字段获得cdn的ip
echo $_SERVER['REMOTE_ADDR'];
cdn实测结果
- 在配置cdn的情况下输出全局变量,查看ip输出情况
<?php
print_r($_SERVER);
百度CDN打印结果
Array
(
[HTTP_X_FORWARDED_FOR] => 119.164.27.53,123.234.0.103,27.221.124.94
[HTTP_X_REAL_IP] => 119.164.27.53
[REMOTE_ADDR] => 150.138.138.169
.........
)
阿里CDN打印结果
Array
(
[HTTP_ALI_CDN_REAL_IP] => 119.164.27.53
[HTTP_X_FORWARDED_FOR] => 119.164.27.53
[REMOTE_ADDR] => 115.124.31.68
.........
)
七牛CDN打印结果
Array
(
[HTTP_ALI_CDN_REAL_IP] => 119.164.27.53
[HTTP_X_FORWARDED_FOR] => 119.164.27.53
[REMOTE_ADDR] => 182.92.246.161
.........
)
又拍云CDN打印结果
Array
(
[HTTP_X_FORWARDED_FOR] => 119.164.27.53
[HTTP_X_REAL_IP] => 119.164.27.53
[REMOTE_ADDR] => 150.138.216.79
.........
)
未使用CDN关于IP字段
Array
(
[REMOTE_ADDR] => 119.164.27.53
)
- 在使用CDN时,
$_SERVER
变量中就会含有HTTP_X_FORWARDED_FOR
元素,并且它里面含有用户的真实IP地址 - 未使用CDN时,
$_SERVER
变量中不会出现HTTP_X_FORWARDED_FOR
元素 - 百度CDN下,
HTTP_X_FORWARDED_FOR
元素中是多个IP地址,并用英文逗号分开,第一个为用户的真实IP地址
PHP获取网站使用CDN加速下用户真实的IP地址代码
<?php
function GetUserIP(){
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
//为了兼容百度的CDN,所以转成数组
$arr = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
return $arr[0];
}else{
return $_SERVER['REMOTE_ADDR'];
}
}
解决cdn后端获取真实ip:https://www.feiniaomy.com/post/377.html
最后一次更新于2020-07-28 15:52
0 条评论