Nginx(包括宝塔环境)使用百度CDN后查看真实用户IP

之前写过一篇获取如果网站挂了CDN怎么查询用户真实IP的文章,用了那片文章的代码,查看日志的时候会发现出现了3个ip,第一个是用户的真实ip,后两个是加速或代理ip,查看日志分析特别麻烦,今天写一下Nginx(包括宝塔环境)使用百度CDN后查看真实用户IP 之前网上有很多文章没有写的很清楚只写了,宝塔环境下,nginx的配置文件下加入
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
就能看见真实IP,这个也不能说是错的,对于一些CDN厂商是可以的,但是有一些是不可以的,比如百度CDN 这两天一直在研究关于获取IP这件事,其实对于百度CDN来说很简单,首先到百度CDN后台,获取真实IP的选项打开以后 把上面的代码,修改一下如下
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Real-IP;
如果不是宝塔环境需要找到配置文件加入一下代码
这样就可以了,看出来宝塔环境那段代码有什么不同了吗,X-Forwarded-For
和X-Real-IP
为什么之前用X-Forwarded-For
的时候获取的不是真实IP呢 是这样的.... X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中 X-Real-IP,一般只记录真实发出请求的客户端IP 下面是一段网上的摘抄
一般来说,
X-Forwarded-For
是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP
追加在X-Forwarded-For
中 来自4.4.4.4
的一个请求,header包含这样一行
X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
代表 请求由
1.1.1.1
发出,经过三层代理,第一层是2.2.2.2
,第二层是3.3.3.3
,而本次请求的来源IP4.4.4.4
是第三层代理 而X-Real-IP
,没有相关标准,上面的例子,如果配置了X-Read-IP
,可能会有两种情况
// 最后一跳是正向代理,可能会保留真实客户端IP X-Real-IP: 1.1.1.1 // 最后一跳是反向代理,比如Nginx,一般会是与之直接连接的客户端IP X-Real-IP: 3.3.3.3
所以 ,如果只有一层代理,这两个头的值就是一样的
使用X-Forwarded-For,你可能获得知识一级代理IP而不是真实的用户IP,不通的CDN厂商规则都不一样,这个就需要发工单去咨询了 这样使用Nginx(包括宝塔环境)使用百度CDN后查看真实用户IP 拜拜ヾ(•ω•`)o