Apache获取CDN加速前的真实用户IP地址

Apache IT敢客 8个月前 (04-05) 8537次浏览 已收录 1个评论 扫描二维码

        于现在的网站而言,运用各种 CDN 加速是必不可少的,一来是有点加速的作用,二来有的 CDN 加速也有缓存静态 css,js 文件的作用,三来有些 CDN 还提供一下安全防护功能。所以鄙人的网站也是经过 CDN 加速的,鄙人通过管理分流措施,让国内的线路走的是百度元 CDN 加速,而国外路线走的是 Incapsula 的 CND 加速。确实网站的访问速度杠杠的。
        不过后面我发现有些小小的问题存在,这些问题嘛也是无关紧要的存在,但是我觉得还是有必要解决一下。我通过 apache 的 access 日志发现,所有用户的访问 ip 都是百度云加速的 ip 或者 incapsula 的 ip,而不是用户的真实 ip,这就尴尬了。如下图所示,几乎都是这几个 ip,这些 ip 都是百度云加速或者 incapsula 的 ip,而用户的真实 ip 是没有显示出来的,这就蛋疼了!如果某天因为某些比如安全问题而要找到某个真实用户 ip 的时候不就没法找了么。
Apache 获取 CDN 加速前的真实用户 IP 地址
        最开始,我以为是因为加速的问题,因为第一层用户的请求都是到 CDN 加速上面的,然后从 CDN 加速上面再到服务器的 apache 上面,所以看上去逻辑没什么问题,直到今天突然发现 mindoc 的日志有真实用户的 ip,而我的 mindoc 是通过 apache 端口代理的,另外我的 mindow 域名也是通过百度云加速的,这就让我发现了不合理的地方了,这说明这些 CDN 加速也是会把客户真实 ip 地址传给服务器的。看来问题是出现在 Apache 身上了。
        后来经过一番资料查询后,发现 apache 确实有这个功能的,只不过没有被开启,那我的 apache 来说版本是 2.4.29,资料显示需要配置 mod_remoteip 模块,进过服务器查找了一遍设置,如下图所示,默认这个模块是安装了的,只不过被注释了而已,
Apache 获取 CDN 加速前的真实用户 IP 地址
        光处理这些还不够,还需要更改两个地方,
        1、在 httpd.conf 下图所示位置,需要加上%a,

        2、在 conf/extra 文件夹下面新建 remoteip.conf 文件,文件内容如下

RemoteIPHeader X-Forwarded-For
#RemoteIPInternalProxy 127.0.0.1
RemoteIPProxiesHeader X-Forwarded-By

然后在 httpd.conf 中增加一句

Include conf/extra/remoteip.conf

好了,保存后重启 apache 即可,我们再来查看日志格式。ip 栏变成两个了,第一个是 CDN 加速的 ip,第二个是用户真实 ip 地址。
Apache 获取 CDN 加速前的真实用户 IP 地址
        
        好了,欢迎交流分享!


        今天又做了进一步的优化和调整。(2018-04-08 22:18:58)
1、另一种方式获取用户真实 ip 地址的方式,除了加上%a之外,还可以加上%{X-Forwarded-For}i也是可以的,有一点点区别就是,前面会多出一个-出来,如图所示
Apache 获取 CDN 加速前的真实用户 IP 地址Apache 获取 CDN 加速前的真实用户 IP 地址
2、哪一个 ip 在前哪一个 ip 在后可以用%a 和%h 来区别,%a 代表真实 ip,%h 代表 CDN 加速的 ip,
Apache 获取 CDN 加速前的真实用户 IP 地址Apache 获取 CDN 加速前的真实用户 IP 地址3、可以单独去掉日志中 CDN 加速的 IP 地址;也就是去掉上述的%h 就可以了。
Apache 获取 CDN 加速前的真实用户 IP 地址Apache 获取 CDN 加速前的真实用户 IP 地址


IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Apache 获取 CDN 加速前的真实用户 IP 地址
喜欢 (155)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 很好
    Amber2018-04-12 21:01 回复 未知操作系统 | 未知浏览器