Nginx通过CDN获取真实IP并实现精准封禁配置指南
1. 项目背景与核心需求当网站启用CDN服务后所有客户端请求都会先经过CDN节点这使得Nginx日志中记录的IP地址全部变成了CDN服务器的IP。这种场景下传统的deny指令会直接屏蔽CDN节点IP导致所有流量被阻断。我们需要一种机制能够穿透CDN获取真实的客户端IP并基于真实IP实施精准封禁。典型的业务场景包括防御CC攻击时精准封禁攻击源针对恶意爬虫实施IP黑名单限制特定地区的访问权限防止暴力破解等安全威胁2. 核心技术原理解析2.1 HTTP头部传递机制CDN服务商普遍采用X-Forwarded-For(XFF)头部传递原始IP其格式为X-Forwarded-For: 客户端IP, 代理服务器1 IP, 代理服务器2 IP...例如经过多层代理的情况X-Forwarded-For: 203.0.113.45, 198.51.100.22, 192.0.2.672.2 Nginx变量处理逻辑Nginx内置变量说明$remote_addr直接TCP连接的客户端IP即CDN节点IP$http_x_forwarded_for完整的XFF头信息$realip_remote_addrrealip模块解析后的真实IP3. 完整配置方案实现3.1 基础环境准备确认Nginx编译时包含--with-http_realip_modulenginx -V 21 | grep -o with-http_realip_module3.2 核心配置代码http { # 定义可信CDN IP段必须配置 set_real_ip_from 203.0.113.0/24; set_real_ip_from 198.51.100.0/24; # 使用从右向左的解析方式 real_ip_recursive on; real_ip_header X-Forwarded-For; # IP黑名单存储路径 geo $blocked_ip { default 0; include /etc/nginx/conf.d/ip_blacklist.conf; } server { location / { if ($blocked_ip) { return 403; # 或使用更激进的措施 # return 444; } # 正常业务配置... } } }3.3 黑名单管理方案动态更新黑名单的脚本示例#!/bin/bash # 添加IP到黑名单 echo 1.2.3.4 1; /etc/nginx/conf.d/ip_blacklist.conf nginx -t nginx -s reload推荐使用自动化工具管理# 使用fail2ban自动封禁 fail2ban-regex /var/log/nginx/access.log ^HOST.* 403 4. 高级防护策略4.1 多维度防御配置map $http_user_agent $bad_bot { default 0; ~*(AhrefsBot|SemrushBot|MJ12bot) 1; } map $http_referer $bad_referer { default 0; ~*(spam-site.com|fake-traffic.org) 1; } server { if ($bad_bot) { return 403; } if ($bad_referer) { return 403; } }4.2 速率限制配置limit_req_zone $binary_remote_addr zoneapi_limit:10m rate10r/s; location /api/ { limit_req zoneapi_limit burst20 nodelay; # 业务逻辑... }5. 实战问题排查指南5.1 常见错误案例案例1错误配置导致403# 错误示范未设置可信IP段 real_ip_header X-Forwarded-For;案例2IP获取不准确# 需要添加递归解析 real_ip_recursive on;5.2 调试技巧查看真实IP获取情况location /ipinfo { add_header Content-Type text/plain; return 200 Remote: $remote_addr\nRealIP: $realip_remote_addr\nXFF: $http_x_forwarded_for; }日志格式建议log_format main $remote_addr - $realip_remote_addr [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent;6. 性能优化建议使用geoip2模块进行高效IP匹配load_module modules/ngx_http_geoip2_module.so; http { geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { $geoip2_data_country_code country iso_code; } map $geoip2_data_country_code $allowed_country { default no; CN yes; US yes; } }黑名单IP使用内存存储geo $blocked_ip { ranges; default 0; 192.168.1.0-192.168.1.255 1; }定期清理无效规则# 清理超过30天的封禁IP find /etc/nginx/conf.d/ -name ip_blacklist.conf -mtime 30 -exec sed -i /old_ip/d {} \;7. 企业级扩展方案7.1 动态黑名单APIlocation /api/blacklist { auth_request /auth; allow 10.0.0.0/8; deny all; content_by_lua_block { local redis require resty.redis local red redis:new() red:set_timeout(1000) -- 1 sec local ok, err red:connect(127.0.0.1, 6379) if not ok then ngx.say(failed to connect: , err) return end local res, err red:smembers(ip:blacklist) if not res then ngx.say(failed to get blacklist: , err) return end ngx.say(table.concat(res, \n)) } }7.2 结合WAF联动location / { access_by_lua_file /etc/nginx/lua/waf.lua; # 正常业务配置... }waf.lua示例片段local function is_ip_banned(ip) -- 调用安全API检查 local http require resty.http local httpc http.new() local res, err httpc:request_uri( http://security-api/check, {method GET, query {ip ip}} ) if res and res.status 200 then return res.body true end return false end8. 安全加固建议防止IP欺骗# 限制XFF头部长度 map $http_x_forwarded_for $xff_valid { default $http_x_forwarded_for; ~*^([^,]{1,15})(,[^,]{1,15}){0,4}$ $1; $remote_addr; }关键操作二次验证location /admin { satisfy any; allow 192.168.1.100; deny all; auth_basic Admin Area; auth_basic_user_file /etc/nginx/.htpasswd; }定期审计配置# 检查异常封禁 awk $9 403 {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -nr

相关新闻

5分钟快速上手:BOTW存档编辑器GUI - 塞尔达传说旷野之息终极修改方案

5分钟快速上手:BOTW存档编辑器GUI - 塞尔达传说旷野之息终极修改方案

5分钟快速上手:BOTW存档编辑器GUI - 塞尔达传说旷野之息终极修改方案 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 你是否厌倦了在《塞尔达传说&…

2026/8/11 11:23:10 阅读更多 →
Windows系统Docker Desktop安装与配置全攻略

Windows系统Docker Desktop安装与配置全攻略

1. Windows环境下Docker Desktop完整安装指南作为容器化技术的核心工具,Docker Desktop在Windows平台的安装往往会遇到各种环境兼容性问题。不同于Linux原生支持Docker的环境,Windows需要通过虚拟化层实现容器运行,这个过程中涉及BIOS设置、系…

2026/8/11 11:22:09 阅读更多 →
现代CMake集成GoogleTest:自动化依赖管理与生产级单元测试实践

现代CMake集成GoogleTest:自动化依赖管理与生产级单元测试实践

1. 项目概述:为什么我们需要一个GoogleTest与CMake的实践示例? 如果你是一名C开发者,无论你是刚入行的新手,还是已经写了几年业务逻辑的老手,迟早有一天你会被问到:“你的代码有单元测试吗?” 这…

2026/8/12 12:21:15 阅读更多 →

最新新闻

Windows粘滞键后门:原理、检测与应急响应实战

Windows粘滞键后门:原理、检测与应急响应实战

1. 项目概述:Shift粘贴键后门——一个被忽视的持久化威胁 在Windows应急响应的实战中,我们常常把目光聚焦在那些“高大上”的远控木马、挖矿病毒或者勒索软件上,却很容易忽略一些利用系统原生机制、极其隐蔽的持久化后门。今天要深入探讨的&a…

2026/8/12 16:00:17 阅读更多 →
智慧校园系统从顶层设计到落地实施的5大核心模块

智慧校园系统从顶层设计到落地实施的5大核心模块

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

2026/8/12 16:00:17 阅读更多 →
BurpSuite渗透测试环境搭建:从JDK配置到Firefox代理实战指南

BurpSuite渗透测试环境搭建:从JDK配置到Firefox代理实战指南

1. 项目概述:从零搭建你的渗透测试工作台 如果你刚接触网络安全,或者想从理论迈向实战,那么配置一个顺手的渗透测试环境就是你的第一道门槛。BurpSuite,这个被誉为“Web安全测试瑞士军刀”的工具,无疑是这个环境的核心…

2026/8/12 16:00:17 阅读更多 →
SQL Server 2019安装错误0x80004005:服务启动超时排查与解决方案

SQL Server 2019安装错误0x80004005:服务启动超时排查与解决方案

1. 问题引入:一个让无数DBA和开发者头疼的经典“拦路虎” 如果你正在部署SQL Server 2019,无论是为了搭建新的测试环境,还是升级生产服务器,在安装过程中突然弹出一个错误代码“0x80004005”,并伴随着“服务没有及时响…

2026/8/12 16:00:17 阅读更多 →
HTTP头注入实战:sqli-labs第18关手工注入与防御详解

HTTP头注入实战:sqli-labs第18关手工注入与防御详解

1. 靶场环境与第十八关概述 sqli-labs是一个经典的SQL注入实战靶场,对于想深入理解Web安全攻防,特别是手工注入技巧的从业者来说,是绕不开的必修课。它模拟了各种真实场景下的注入点,从最简单的报错注入到复杂的盲注、堆叠注入&am…

2026/8/12 16:00:17 阅读更多 →
从Embedding到向量数据库:构建智能语义搜索系统的核心原理与实践

从Embedding到向量数据库:构建智能语义搜索系统的核心原理与实践

1. 项目概述:向量数据库与Embedding的黄金搭档最近在搞一个智能问答系统,需要处理大量的非结构化文本,比如用户上传的PDF文档、网页内容。传统的数据库,比如MySQL,面对“帮我找一下和‘机器学习模型部署’相关的所有文…

2026/8/12 15:59:16 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →