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/10/18 12:18:52 阅读更多 →
Windows系统Docker Desktop安装与配置全攻略

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

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

2026/10/18 12:19:18 阅读更多 →
现代CMake集成GoogleTest:自动化依赖管理与生产级单元测试实践

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

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

2026/10/18 12:19:35 阅读更多 →

最新新闻

轻量级公式识别模型UniRec-0.1B:架构、9倍速推理与部署实战

轻量级公式识别模型UniRec-0.1B:架构、9倍速推理与部署实战

公式识别一直是文档数字化里最让人头疼的一环。你平时看论文、转电子教案、整理试卷,文字部分OCR都已经做得挺成熟,但一旦碰到积分公式、矩阵、分段函数,传统引擎基本就废了。最近我刷到一个开源项目,标题写得很直白:轻…

2026/10/19 2:24:38 阅读更多 →
Spring Boot电商商城系统从设计到部署:订单、购物车与后台管理实战

Spring Boot电商商城系统从设计到部署:订单、购物车与后台管理实战

这次我们来看一个非常典型的开源方向:基于 Spring Boot 的线上购物平台的设计与实现。这类项目在 GitHub 上很多,做成毕设、课程设计、或者拿来作电商系统原型都很合适。它的价值不在于技术有多新,而在于把商城主链路完整跑通了:商…

2026/10/19 2:24:38 阅读更多 →
AI写代码的“技术债”陷阱:边界、幻觉与防债实操

AI写代码的“技术债”陷阱:边界、幻觉与防债实操

1. 先聊几句:AI写代码这件事,我为什么会越用越慌我在某公司做了快八年的技术负责人,从去年开始,研发团队基本把AI编程助手当成了默认工具。新功能先让AI写一版,人再改,这个流程已经在好几个项目组里跑成了&…

2026/10/19 2:24:38 阅读更多 →
改进卷积模型的人脸性别与情感分类实践与思考

改进卷积模型的人脸性别与情感分类实践与思考

这题目一出,我当时的直观反应就是:又是一个把人脸识别和情感计算缝合起来的CNN改改进题。真正做进去之后才发现,题目里每一个词都不是白给的——"性别分类"和"情感分类"虽然都发生在同一张脸上,但它们在特征尺…

2026/10/19 2:24:38 阅读更多 →
影子模式实战:用真实流量安全验证数据库变更与全链路压测

影子模式实战:用真实流量安全验证数据库变更与全链路压测

如果只用一个字来概括近两年分布式系统改造里最值得关注的工程思路,我会选“影”字。它不是指某个具体框架,而是一类技术的统称:影子表、影子库、影子流量、Shadow Mode。今天这篇文章,我想把“影”这个字背后真正有价值的东西讲透…

2026/10/19 2:24:38 阅读更多 →
人形机器人产业链白皮书:制造业先行,算法决胜

人形机器人产业链白皮书:制造业先行,算法决胜

简介:2024人形机器人产业链白皮书是一份面向机器人领域研究者、产品经理、投资机构从业者的行业深度资料,内容系统覆盖宏观环境分析、产业链拆解、主流生产企业扫描、技术路线对比与市场投资建议等模块,能够帮助读者快速建立对人形机器人产业…

2026/10/19 2:23:38 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →