成功解决个人网站加入阿里云云盾后,nginx无法获取真实ip的问题

Posted by

妈个比,老子终于解决了困扰我许久许久许久的一个问题。服务器加入阿里云云盾后,所有的ip被转发成云盾的ip地址。wordpress后台垃圾评论的ip地址,全部是云盾的ip地址。nginx和网站日志的ip地址,也全部是云盾的ip地址。使用其他cdn,貌似也有这样的症状。造成这个问题的原因是,nginx没有接收到真实ip地址。

阿里云官方帮助中心真恶心人

虽然阿里云官方的帮助中心有一个帖子,《常见应用服务器获取来访者真实IP的方法》,但是这篇文章竟然被弄到了负载均衡SLB栏目。我艹,之前我一直在云盾里找有关问题的解决方法,阿里云竟然在云盾里放了一篇在nginx日志里显示真实ip的文章。。。

nginx拿不到真实ip影响防CC和防DDOS

所有来访ip都被转发成云盾的ip,如果服务器遭受到CC攻击,实际上iptables和nginx的防CC和防DDOS的任何配置,都是在干云盾。。。自己打自己,服务器跟云盾干起来了。所以这就是为什么之前,文武双全只有取消掉云盾的解析,iptables和nginx的配置才能起作用的原因就在这里。

而只要加入云盾,基本上服务器就是挂掉的命运。CC攻击以及云盾和iptables互掐,必然让服务器死翘翘。nginx都拿不到真实ip,更不用说后端的apache了。

问题的关键在wdcp环境下nginx的编译安装

wdcp自身的nginx安装脚本和wdcp论坛上网友们提供的nginx升级脚本,都没有编译过多的module。默认编译安装的nginx,自然不具备识别真实ip的功能。文武双全解决这个问题的方法,就是自己修改了wdcp下nginx的升级脚本。重新编译了一下nginx,顺便升级到最新的nginx1.7.9版本。

wordpress无法识别真实ip的问题终于解决
wordpress无法识别真实ip的问题终于解决

困扰我三年的,wordpress后台无法显示评论者真实ip的问题迎刃而解,如图。nginx的日志里,终于能显示正确的访客ip。wdcp的后台,也很少看到云盾的ip了。

nginx识别cdn和云盾的真实ip靠的是http_realip_module

其实只要在编译nginx的参数后面加上 –with-http_realip_module,nginx就具备识别cdn和云盾真实ip的能力啦。当然,你还要在nginx.conf里添加必要的配置代码哦:

我使用的是阿里云云盾,下面是我的代码:

http{

set_real_ip_from 42.121.43.0/24;
set_real_ip_from 127.0.0.1;
set_real_ip_from 10.242.174.13;
real_ip_header X-Forwarded-For;

}

如果你使用的是诸如百度云加速之类的cdn,就把42.121.43.0/24的ip段及ip地址,更换为百度云加速的ip。关于wdcp下nginx升级到任意版本以及编译http_realip_module的脚本,我会在另外一篇文章中单独发出。

伪装攻击者真实ip的方法有很多很多,下面文武双全还要继续学习啊。X-Forwarded-For并不能识别到所有的真实ip貌似,以后再跟大家分享文武双全的学习心得吧。

2 comments

  1. 强烈建议你切换到nginx,然后用这个方法。wdcp后台的ip地址不同的话,不用管,只要nginx日志里都是真实ip即可。

  2. 我用cdn后,很多真实ip也获取不到,和博主不同的是,我用apache+wdcp,不知该怎样解决

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据