nginx使用CDN后获取用户真实IP的方法

老刘前两天弄了个racknerd的便宜的vps,准备把一个网站放到这个vps上,再顺便把篱落的这台VPS好好的整理一下,当时装系统的时候装的是centos8,可惜这个系统明年官方就不再支持了,所以,长痛不如短痛,早晚都要换系统,不如早换。于是先把博客也迁到了这个rn的空间里。顺便又给加了个CF的套,加上之后,加的时候是扫了几个本地延迟最低的IP,直接分联通、移动、电信把这几个ip分别解析了。经过这么几天的试用,老刘觉得加了CF的速度还算差强人意。准备一直用下去。

但是加了CDN后,有一个问题,那就是不管日志里还是wordpress后台的评论里的IP都是cf的IP,无法获取用户的真实IP,这对管理网站有点麻烦,比如受到攻击或者想封一些发垃圾邮件IP的地址的时候,就没有办法。老刘记得以前看过这方面的文章。于是找了一下,把经过记录下来。

阿帕奇老刘好久没有用过了,这里只说nginx的方面,从网上的教程来看,可以分成两种。老刘把两种方法的说说

一、利用ngx_http_realip_module模块获取用户真实IP

由于老刘用的是oneinstack一键安装包,所以之说这个方法,lnmp一键安装包也可以用类似的方面来搞定。宝塔面板的话,就很简单,装那款免费的防火墙,里面就是cdn的设置,设置完了之后就OK了,不得不说还是可视化面板方便。好了,闲话少说,正式开始。

首先通过nginx -V我们发现默认编译的nginx并不会安装ngx_http_realip_module模块,我们需要重新编译nginx使其载入这个功能模块。

这里我们直接利用oneinstack的升级脚本来完成,这样做,一是很简单,二是一般不会出错,很适合初学者使用,第三,就是以后你升级nginx的话,也能一劳永逸。

#增量添加参数到${nginx_configure_args}后面
vim /root/oneinstack/include/upgrade_web.sh
#在${nginx_configure_args}后面增加--with-http_realip_module即可
#大致位于升级脚本的第57行

保存并退出,执行oneinstack的升级脚本/root/oneinstack/upgrade.sh进行nginx升级编译即可。

最后执行nginx -V查看最终编译后的结果。

Nginx设置set_real_ip_from

编译好了ngx_http_realip_module,现在我们只需要在Nginx配置文件中添加set_real_ip_from代码到nginx.conf文件的http段落里面,老刘用的cf的,用期待的CDN类似,只有知道IP段可以了。示例如下:

set_real_ip_from 103.21.244.0/22;
 set_real_ip_from 103.22.200.0/22;
 set_real_ip_from 103.31.4.0/22;
 set_real_ip_from 104.16.0.0/12;
 set_real_ip_from 108.162.192.0/18;
 set_real_ip_from 131.0.72.0/22;
 set_real_ip_from 141.101.64.0/18;
 set_real_ip_from 162.158.0.0/15;
 set_real_ip_from 172.64.0.0/13;
 set_real_ip_from 173.245.48.0/20;
 set_real_ip_from 188.114.96.0/20;
 set_real_ip_from 190.93.240.0/20;
 set_real_ip_from 197.234.240.0/22;
 set_real_ip_from 198.41.128.0/17;
 set_real_ip_from 199.27.128.0/21;
 set_real_ip_from 2400:cb00::/32;
 set_real_ip_from 2606:4700::/32;
 set_real_ip_from 2803:f800::/32;
 set_real_ip_from 2405:b500::/32;
 set_real_ip_from 2405:8100::/32;
 set_real_ip_from 2c0f:f248::/32;
 set_real_ip_from 2a06:98c0::/29;
 real_ip_header  X-Forwarded-For;
 real_ip_recursive on;

配置完成后,使用nginx -t检查配置文件是否存在格式问题。如果没有报错执行service nginx reload重载nginx服务即可。

然后访问网站,再次查看nginx日志,就可以正常获取到用户真实IP了。

二、利用nginx的日期格式来达到目的

首先,将下面的代码添加到nginx.conf文件的http{后面让日志重置化:

#自定义一个日志格式
log_format cdn '$http_x_forwarded_for - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

然后,我们修改nginx站点原来的日志输出格式,修改access_log /home/wwwlogs/xxxx.log; 为access_log /home/wwwlogs/xxxx.log cdn;全部保存之后不要急着重启nginx,再次强调一个命令nginx -t,用于检查nginx配置文件是否存在错误。这是一个非常实用的命令,可以让你在业务运行的同时从起nginx服务,不至于造成业务中断或者业务停止。

这个方法的有点是不需要编译nginx,设置完了之后也是一劳永逸。但是对于oneinstack一键安装包来说,因为它已经重置了日志的格式,所以就不适用了。

小结

以上就是两种在使用CDN后可以获取用户真实IP的方法,可以根据自己的情况来使用。

Read more

风动,幡动还是心动

风动,幡动还是心动

读南怀瑾先生的《禅宗和道家》,读到“风动、幡动、心动”这个典故(佛家称为公案)时,我的思绪回到了过去。 记得第一次读到这个公案,大概是在初中的政治课本上。故事是这样的: 唐代仪凤元年(676年),慧能大师在广州法性寺(今光孝寺)听印宗法师讲《涅槃经》。一阵风吹来,寺中的幡旗随风摇曳,引发了两位僧人的争论。一位僧人说:“是风在动。”另一位坚持:“是幡在动。”两人争执不下,慧能大师便上前说道:“不是风动,也不是幡动,是仁者的心在动。” 当时读到这里,我心想古人真傻,这看似很有哲理,实则是对自然现象缺乏了解,根本就是一种空气流动罢了,和风、幡、心都毫无关系。甚至到了大学,我和信奉佛教的父母聊起这个公案时,依旧是以嘲弄的口吻,当时还试图用这个典故让他们“回头”。 随着年龄增长,读书和见识也多了,才发现当初的小丑恰恰是我自己。 这哪是古人没有见识,分明是我的认知高度不够,没有达到那个层次,

By laoliu
金钱心理学:财富、人性和幸福的永恒真相

金钱心理学:财富、人性和幸福的永恒真相

我曾以为,理财是一个很复杂的东西,股票、基金、保险等等,充满了复杂的公式和博弈。所以,对理财这方面一直抱着敬而远之的态度,只会挑选一些风险小的项目。也曾在股市上投入了一些,但每次都赶不上节奏,所以慢慢的这方面的心思也就淡了。 前几天偶尔在微信读书上看到了摩根·豪泽尔的《金钱心理学:财富、人性和幸福的永恒真相》这本书,才发现原来理财也可以是这么简单的一件事情,但简单的事情,往往也是最不容易做到的事情。 我们很多人都会大精力花在寻找下一个“暴富”的机会上,希望能一击即中,实现财务自由,其实这是很不现实的东西。这本书没有教我们如何赚钱,而是教我们如何守财。 这听起来似乎现在主流的消费观向左,但我认为却触及了财富的本质,特别是当下这个大环境中,守财才是更重要的。书中虽然用了大量的例子,但给我印象最深,也是颠覆我原来概念的一个例子是:地球的冰河期并非由某个特别寒冷的冬天造成,而是因为无数个凉爽的夏天。那些看似不够热的夏天,导致上一年的冰雪没有完全融化,日积月累,最终形成了巨大的冰川。我一直以为,冰河期的形成,是突变的,是哗啦一下子,地球被冻上了。 作者用这个例子来说明,真正的财富积累,靠

By laoliu
曼联再次输球

曼联再次输球

不出所料,曼联又输了,输给了同城死敌曼城,这结果一点都不让人感到意外,所以也就没有了什么不好的情绪。如今的曼联,用“每况愈下”这个词来形容,简直再贴切不过了。 每年夏天,曼联都像个豪气的冤大头,挥舞着钞票在转会市场上一掷千金。买回来的球员的表现确都不如预期。今年,他们终于改变了买人的策略,不再只盯着那些潜力新人,而是把钱砸向了联赛中的“即战力”。即战力来是来了,但是花费了2亿英镑买的即战力,也不会进球了。 机会是有,但球就是不进。据统计,开赛以来曼联的射门次数达到了68次,英超各队第一;但是进球才进了4个,还有两个乌龙球。 然而反观那些曾经在曼联被嫌弃、被放弃的球员,在别的球队却像是被施了魔法,个个大放异彩。你看看这份名单: * 拉什福德:本场比赛一个助攻,曾经的“曼联太子”在巴塞罗那找到春天。 * 霍伊伦:打进了一个球,那个在曼联被诟病“不会跑位”的前锋,跑位变得无比机敏,射门也准了。 * 加纳乔:送出助攻,天赋在别队彻底兑现。 * 麦克托米奈:

By laoliu
解决腾讯 EdgeOne 域名解析与 SSL 证书申请失败问题

解决腾讯 EdgeOne 域名解析与 SSL 证书申请失败问题

前几个月,我关注到腾讯新推出的 EdgeOne 服务。这款产品无需备案和实名,而且提供免费额度,对于个人网站来说非常友好。刚发布时兑换码一码难求,我并没有太多关注。后来,腾讯推出了一个活动,只要在 X(原 Twitter)上转发推文,就能获得两个兑换码。我成功领取并兑换了一个,并将其用于我的“镜缘轩”网站。 我的“镜缘轩”网站部署在 CloudCone 的 VPS 上,访问速度一直不尽如人意。接入 EdgeOne 后,网站速度有了显著提升,这让我决定将我的博客也套上这个服务。 域名解析遇到的第一个问题:CNAME 扁平化 在将博客主域名iliu.org 通过 CNAME 解析到 EdgeOne 提供的地址后,我发现 EdgeOne 无法识别解析成功。奇怪的是,“镜缘轩”网站的解析过程却非常顺利。

By laoliu