使用了cdn,如何获取客户端真实ip?

当网站使用负载均衡(EBS)和内容分发(CDN)时,获取客户端真实IP变得复杂。HTTP_CLIENT_IP头不一定是标准的,HTTP_X_FORWARDED_FOR头可能包含多个代理IP,而REMOTE_ADDR是最可靠的,表示最后与服务器直接连接的IP。需要注意这些头可能被伪造。一种解决方法是编写代码来智能判断和提取真实IP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取客户端IP,很多代码都会拿 HTTP_CLIENT_IP的值,其次拿 HTTP_X_FORWARDED_FOR,最后是 REMOTE_ADDR;但是如果网站使用了负载均衡(EBS) 和 内容分发(cloudfront)的话 ,获取ip就会麻烦一点,下面这段代码可以获取到使用了负载均衡和内容分发后客户端访问的ip。
以下内容是听取答案后的总结
1. HTTP_CLIENT_IP头是有的,只是未成标准,不一定服务器都实现了。
2. HTTP_X_FORWARDED_FOR 是有标准定义,用来识别经过HTTP代理后的客户端IP地址,格式:clientip,proxy1,proxy2。详细解释见 http://zh.wikipedia.org/wiki/X-Forwarded-For
3. REMOTE_ADDR 是可靠的, 它是最后一个跟你的服务器握手的IP,可能是用户的代理服务器,也可能是自己的反向代理。
关于伪造: HTTP_*头都很容易伪造。例如使用火狐插件伪造x-forwarded_forIP为 8.8.8.8,此时清掉cookie再访问http://www.58.com, 它会以为你是 8.8.8.8来的。参考: sf上另一个关于伪造IP的问题
一段不错的获取IP代码:

function get_client_ip()
{
   
   
    foreach (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值