使用华为云CDN之后如何读取真实访客IP

举报
iCoA首席特工 发表于 2018/11/25 14:39:23 2018/11/25
【摘要】 网站经常会需要读取访客的IP,但是使用CDN或者WAF之后,你使用 REMOTE_ADDR 读取到的IP地址其实是CDN节点的IP,不是访客真实的IP。那么如何才能读取访客真实的IP呢?前段时间试用了华为云的CDN之后就遇到了这个问题。经过测试,发现华为云的CDN可以使用 HTTP_CDN_SRC_IP 来读取访客的真实IP。

网站经常会需要读取访客的IP,但是使用CDN或者WAF之后,你使用 REMOTE_ADDR 读取到的IP地址其实是CDN节点的IP,不是访客真实的IP。

那么如何才能读取访客真实的IP呢?前段时间试用了华为云的CDN之后就遇到了这个问题。

经过测试,发现华为云的CDN可以使用 HTTP_CDN_SRC_IP  来读取访客的真实IP。

PHP Code

1
$ip $_SERVER['HTTP_CDN_SRC_IP'])

ASP Code

1
ip = Request.ServerVariables("HTTP_CDN_SRC_IP")

这样之后就能用 $ip 或 ip 来使用真实IP了。

但是还有一个问题,我们不用CDN的时候,又需要修改代码来使用 REMOTE_ADDR 读取访客IP,非常麻烦。

所以我们可以将代码进行修改,让我们无论在什么情况下,读取的都是真实的访客IP。

先看代码:

PHP Code

1
2
3
4
5
6
7
8
if (isset($_SERVER['HTTP_CDN_SRC_IP'])){
//判断CDN IP是否存在,如果存在
    $IP $_SERVER['HTTP_CDN_SRC_IP'];
}
else {
//如果CDN IP不存在,则
    $IP $_SERVER['REMOTE_ADDR'];
}

ASP Code

1
2
3
4
5
6
if Request.ServerVariables("HTTP_CDN_SRC_IP")<>"" then
'判断CDN IP不为空
    ip = Request.ServerVariables("HTTP_CDN_SRC_IP")
else
    ip = Request.ServerVariables("REMOTE_ADDR")
end if

是不是很简单,后续可以使用 $ip 和 ip 变量来调用真实IP了。


本文同步发布于个人网站:https://www.icoa.cn/a/857.html

原创文章,未经允许禁止转载 !

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。