CDN加速下通过nginx获取网站访客真实ip

我们官网后台有访客防火墙,为了统计用户的登录信息,由于网站做了全站的CDN,所以防火墙默认获取到的ip全是CDN的ip。 这样就不便于我们做安全工作了,只好剔除CDN的ip,只获取访客的真是ip。 由于CDN商家一般不会提供header头,就只能依靠nginx的模块来支持了。 一:安装realip模块 nginx -V看看有没有安装,没有就单独编译安装下,有就直接修改nginx的配置即可。

如果没有,就进nginx文件夹去编译: —with–http_realip_module

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l --with-http_geoip_module --with-http_realip_module  
#就是加上--with-http_realip_module
make && make install
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT `cat /usr/local/nginx/logs/ nginx.pid.oldbin`
#改日志

然后nginx -V检测下有没有安装好。

二、修改nginx.conf配置文件 1:在http区域增加:

  log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' 
                    '$status $body_bytes_sent "$http_referer" ' 
                   '"$http_user_agent" ';

主要就是增加x-forwarded-for字段,如果没有上面这一段,就自己把这个复制进去也行。 2:在server区域增加:

  set_real_ip_from CDNip2;
  set_real_ip_from CDNip1;  
  set_real_ip_from 源站ip;
  set_real_ip_from 127.0.0.1; #服务器本地
  real_ip_header    X-Forwarded-For;
  real_ip_recursive on;

set_real_ip_from获取ip地址,real_ip_header就是从header头检索ip,real_ip_recursive on获取ip,然后开始排除上面的ip,就显示出剩下的ip。 以上方法,有个不好的事情,就是CDNIP太多了,如果不能直接拿到,就得一次次的检测出ip来加上去。 还有一种方法: 1:在http区域增加:

log_format 域名 '$remote_addr - $remote_user [$time_local] $request'
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
 access_log  /usr/local/nginx/logs/域名 域名; 日志

其实也算是通过http_x_forwarded_for来获取,只是读取的时候不一样。 因为后端真实服务器通过http_x_forwarded_for来获取,默认第一个不为unkown的ip就是访客的真实ip。 在server区域其实不用管了,默认配置的nginx.conf文件都有的。 第二种方法呢,就需要修改网站本身程序了,修改程序去读取第一个ip就行。 如果是不能修改网站本身程序,就还是用第一种方法吧。 三、测试访客ip 如果以上两种方法都用上了,可以写个php文件

";
echo $_SERVER["HTTP_X_FORWARDED_FOR"];  //通过读取HTTP_X_FORWARDED_FOR来查看ip
?>

real_ip_recursive只会获取到当前的一个ip,HTTP_X_FORWARDED_FOR一般会读取到2个ip,第一个是真是ip,第二个是CDNip。

通过以上方法排除CDNip之后,我们就可以统计真实访客的ip了,当然也可以通过这个结合GeoIP模块屏蔽部分地区的ip访问网站。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 模块插件集成

      前面我们在AgileEAS.NET之插件接口IModule和AgileEAS.NET之插件运行容器中对模块插件和运行容器都做了介绍,本文我们介绍Ag...

18010
来自专栏从零开始学自动化测试

appium+python自动化45-nox连不上问题解决

最新下了个最新版的夜神模拟器,然后adb devices发现连不上模拟器了,报adb server version (36) doesn’t match thi...

1151
来自专栏张戈的专栏

借助腾讯云 CDN 开启全站 https 及问题解决分享

腾讯云 CDN 的 https 功能目前还在邀请测试阶段,有幸用上了国内这个为数不多的特权。在借助腾讯云 CDN 开启全站 https 的过程中遇到了非常多的问...

6.6K1
来自专栏向治洪

刷博客等流量

首先我们不建议刷流量,这里只是提供机械技术上的实现 -访客数量与ip无关,与cookie关,它对每个访问者给一个特定的cookie //就是说,只要清除cook...

22110
来自专栏性能与架构

前端构建工具grunt

grunt是什么 grunt是目前非常流行的前端构建工具,支持自定义插件,有丰富的插件帮助我们完成构建任务 自动化完成我们指定的任务,例如压缩、编译、单元测试、...

3405
来自专栏企鹅号快讯

在浏览器上,我们的隐私都是如何被泄漏的?

关键时刻,第一时间送达! 近日,两个利用隐藏登录表单收集登录信息的网络跟踪服务被彻底披露,分别是 Adthink(audienceinsights.net)和 ...

20510
来自专栏自由而无用的灵魂的碎碎念

在windows server 2008 r2上安装nokia pc 套件

我下载了最新版的nokia pc套件,不过发现无法在windows server 2008 r2上安装:

1063
来自专栏开源优测

移动测试Appium之webelement模块介绍

移动测试Appium之webelement模块介绍 前言 本文主要分析Appium Python端所提供的移动端元素操作API,其主要实现,你可以通过以下方式查...

2905
来自专栏张善友的专栏

SQL Server 2005的负载均衡

SQL Server 2005仍然不直接地支持负载均衡——但是它为以前SQL Server版本中可用的所有负载均衡方法提供了令人激动的改善和支持。   目录 1...

21610
来自专栏帘卷西风的专栏

关于linux服务器进程监控及自动重启的简单方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

2182

扫码关注云+社区

领取腾讯云代金券