惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
V
Visual Studio Blog
量子位
博客园 - 三生石上(FineUI控件)
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
宝玉的分享
宝玉的分享
Hacker News: Ask HN
Hacker News: Ask HN
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Google Online Security Blog
Google Online Security Blog
AI
AI
Schneier on Security
Schneier on Security
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
I
InfoQ
A
Arctic Wolf
月光博客
月光博客
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
Cloudbric
Cloudbric
Google DeepMind News
Google DeepMind News
Security Latest
Security Latest
GbyAI
GbyAI
N
Netflix TechBlog - Medium
TaoSecurity Blog
TaoSecurity Blog
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
The Exploit Database - CXSecurity.com
博客园 - 【当耐特】
博客园 - 司徒正美
The Hacker News
The Hacker News
Cisco Talos Blog
Cisco Talos Blog
I
Intezer
云风的 BLOG
云风的 BLOG
T
Threatpost
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Tenable Blog

网站相关 on 老刘博客

用lnmp安装thinkphp类的程序,文件夹没有权限 Django设置使用MySql的时候遇到的一些坑 RackNerd的2022年黑五活动 改用cloudcone的VPS 加入51la的优站计划 群晖安装trilium笔记web端不刷新的处理方法 开始使用Argon主题 更换为Dragon主题 Django部署在debian11服务器 试用荷兰的liteserverVPS python开发web程序,最好还是在Linux下 转到virmach 用input和字典初步实现我的一点小想法 几种Linux系统安装之后的体验 被百度劲风算法搞了 放弃百度小程序 crmeb商城后台标题修改方法 RSS终于又搞好了 RackNerd的6.18活动出来了 重新弄了下博客环境 试用urlos 捡漏注册了个l22.org的域名 把域名从阿里云转出到name.com的方法 博客web端改用apache 流金岁月启用新域名 停止使用RSS Feed 纯代码设置frp服务器 网站换了一台服务器 nodecache开通了中国直连线路 从宝塔面板换成oneinstack踩的一个坑 腾讯的CDN还是可以的 解决升级PHPmake: *** No rule to make target `install’. Stop.的问题 推荐篱落主机的香港VPS 网站被黑了? 换篱落的空间,用宝塔面板,CSRF校验失败 博客更换到阿里云香港轻量,并升级到wordpress5.3.0 再说说景安的服务 给7b2的主题加上评论回复功能 备忘,使用阿里云ossfs备份网站 记一次因为标点符号导致重装服务器的经历 利用cloudFlare的边缘计算workers实现外链转内链跳转 Godaddy可以用微信管理域名 wordpress自动升级到5.2.2 xshell6更新至0125 7b2主题每日签到不刷新的解决办法 推荐一款国外CDN——Nodecache,注册即送1T流量 上海云盾CDN简要设置指南 7b2主题添加百度是否收录及禁止非管理员访问后台 新浪SAE文件管理及防盗链的设置 配置WP-Mail-SMTP的技巧 只需三步,让你的wordpress在godaddy免费空间上完美呈现
nginx使用CDN后获取用户真实IP的方法
老刘 · 2020-12-21 · via 网站相关 on 老刘博客

老刘前两天弄了个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的方法,可以根据自己的情况来使用。