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

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Jina AI
Jina AI
Stack Overflow Blog
Stack Overflow Blog
量子位
博客园_首页
Vercel News
Vercel News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Forbes - Security
Forbes - Security
IT之家
IT之家
N
News and Events Feed by Topic
S
Security Affairs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Webroot Blog
Webroot Blog
Recorded Future
Recorded Future
L
LangChain Blog
Y
Y Combinator Blog
AI
AI
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google Online Security Blog
Google Online Security Blog
V2EX - 技术
V2EX - 技术
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
I
Intezer
T
Tenable Blog
G
Google Developers Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Troy Hunt's Blog
L
LINUX DO - 最新话题
云风的 BLOG
云风的 BLOG
C
CXSECURITY Database RSS Feed - CXSecurity.com
有赞技术团队
有赞技术团队
O
OpenAI News
P
Proofpoint News Feed
TaoSecurity Blog
TaoSecurity Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
S
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
Blog — PlanetScale
Blog — PlanetScale

蛋蛋之家

SUMIFS和LET函数——让 Excel 自己动起来 Halo 博客晚间卡顿排查记:从"玄学卡顿"到"真凶落网" 我用这个开源项目,把 AI 绘画提示词变成了"代码"——awesome-gpt-image-2 深度体验报告 群晖部署 LX Music Server:浏览器就是你的音乐播放器【详细版】 500道Word题库太痛苦?于是我写了个智能学习平台 别用一个人的奔跑,耗尽两个人的余生——《你凭什么认为我会一直喜欢你呢》 博客评论自动填充新方案:兼容 Vue/React 响应式绑定与跨架构填充逻辑 2026 生产级指南:Halo 2.x + PostgreSQL 自动化部署与性能优化手册 从 Typecho 转向 Halo 2.x:全能型 Nginx 架构与 SEO 无损迁移指南 Typecho 迁移 Halo 完整教程:数据库视图解决表前缀 + 自动提取封面图 + 去重检测 我的 CodeBuddy 装备库:218个技能全公开 + 使用心得 为博客添加自定义评论表情 Comment2Bark:Typecho评论推送到Bark插件 又拍云插件 UpyunFile v1.2 更新:修复 Typecho 1.3.0 兼容性问题 网站被镜像怎么办?2026年反镜像攻防实战指南 VLESS + Reality + Vision:2026 极致隐蔽节点搭建全解析 给OpenList和Alist加上液态玻璃效果,颜值直接拉满! 网页截图瞬间“赛博飞升”?手把手教你根治 Windows HDR 截图发白 群晖 NAS 影音终极方案:Docker Rclone + OpenList 完美挂载 Plex 全攻略 一个简洁高效的SVG图标库 告别重复劳动!一键填充评论的神奇书签脚本 - 蛋蛋之家 解锁思源笔记的隐藏力量:siyuan-patch 深度体验与技术实现 Oracle Cloud 自救指南:旧手机丢失后如何绕过 MFA 重新登录【更新2026年最新政策】 本站已加入“萌国ICP备案”联萌!😄 Excel 月报自动化指南:告别重复劳动,让数据主动为你服务 梦呓:为异地女友准备的2周年惊喜礼物 Typecho 多吉云插件优化:更灵活的存储目录配置 甲骨文云硬盘扩容指南:从50G到200G的“免费午餐”怎么吃? ⏰ 时间同步:当你的服务器开始“穿越”时,如何优雅地把它拉回现实 Typecho 又拍云文件管理插件修改版使用指南:新增自定义目录结构功能 华为鸿蒙6.0回退4.2记录 最近小公主情绪不佳 劳动节的家乡景色 烟台山公园一游 群晖搭建ChatGPT Web 推荐脚本:ChatGPT - 提示选择器 Activation Method for JetBrains Products (English version) JetBrains 系列产品激活方法 疫情三年后再进校园 修复searchEngineJump在谷歌搜索页面不生效问题 事情既然发生了,可以是遗憾,不要去后悔。 侄女的试唱会比赛 新一代图片编码格式测试 省科技馆之行 Typora Windows版破解补丁及主题推荐 在Typora中使用PicList上传图片 域名ICP备案之变更网站 Ubuntu 系统如何使用 root 用户登录 中国联通——让一切自由连不通 如何选购适合的口罩? 今天移动营业厅遇到一个小姐姐,真的好美 它不乐意 如何解决Typecho文章不是Markdown语法创建问题 探手抓住这一天的尾巴,为自己庆生 收到腾讯云自媒体分享计划2月份礼品 尝试百度Spider抓取异常问题 甲骨文DD重装系统及失联救砖教程 终于MrDoc升级v0.8.7成功了 Windows 端口查询及杀死进程 甲骨文实例开通与X-UI安装 国艺花鸟市场的悠闲 在思源笔记中使用群晖Synology C2对象存储服务 MrDoc升级v0.8.7失败 居居的手工作品 Linux系统时间同步命令小结 AList安装指南 宝塔面板降级 v7.7.0 及解除强制绑定手机、免费安装专业版插件的方法 修复群晖Synology Drive client右键菜单缺失问题 Windows11 展开折叠的右键菜单为传统模式 在 Windows 下批量将 Markdown 文档转为 Word 文档 Typecho的一些修改记录 Markdown语法——Mermaid 有两种新方案—CloudFlare官方免费CNAME接入教程 居居的新冠历程 群辉安装Transmission套件、增强汉化WebUI并备份做种列表 群晖 docker 部署思源笔记 Office for Mac 2019 License Installer 公众号通过api发送小程序消息 Windows 10下 iTunes 备份默认存储路径修改 Excel查找返回多个值,并将返回的值放在同一个单元格里面 七牛云测试域名失效后如何下载空间中的文件 入手三星860 evo 500g SSD固态硬盘 分享一套耐看的鼠标指针 如何重置OmniFocus数据库 Office for Mac 2016 License Installer Mac下配置终端+iTerm 2主题 如何制作苹果系统安装U盘 LNMP部署typecho,开启SSL、强制开启https Stylish样式如何设置为特定网址不生效? Typecho插件错误号:42S01的解决方法 电动车被偷了 热火 R150 上手开箱 UltraMon 3.3.0 汉化+注册机 如何用 MWeb 发布 Typecho 文章 测试 Mweb 发布到印象笔记功能 忘记了iPhone访问限制的密码该怎么办? 新玩具KAREE电子烟,先试试 Mac mini 2011 开启Handoff方法 见微知著 浅谈手游创新 PhoneClean Pro授权注册激活码
手把手修复RSS 403:从PHP警告到Cloudflare拦截的全链路排查
吴蛋蛋 · 2026-04-02 · via 蛋蛋之家

最近有人反馈说,通过 Feedly 订阅我的博客总是失败。我自己在浏览器里打开wuqishi.com/feed/明明一切正常,这典型的“RSS 403”问题,相当于关上了订阅的大门。折腾一圈下来,发现根源无非两个:服务器上的 PHP 乱输出,或者Cloudflare 等 CDN 的“误杀” 。下面就把我的排查过程和解决方案贴出来,希望能帮你一把。

RSS订阅修复

首先,我们得知道问题出在哪个环节。打开终端,用下面这条命令模拟一下 RSS 阅读器的请求:

curl -I -H "User-Agent: Feedly/1.0" https://wuqishi.com/feed/

重点看返回的 HTTP 状态码和响应头:

  • 如果状态码是403,并且响应头里带有 CF-RAY字段:那问题八成出在Cloudflare的WAF或者Bot防护规则上,你的请求在CDN边缘就被掐掉了。直接看下面关于Cloudflare的章节。
  • 如果状态码不是200,也没有 CF-RAY:这是你的源站服务器(比如Nginx/PHP)自己返回的错误,去看PHP修复那部分。
  • 如果返回了XML,但内容最前面混入了PHP的Warning或Deprecated信息:这就是经典的“PHP输出污染”,XML格式被破坏,阅读器自然无法识别。解决方案也在PHP部分。

PHP层修复:搞定版本兼容性与错误输出

不同 PHP 版本,坑点不一样。这里我简单列一下,方便大家对号入座:

  • PHP 7.4 / 8.0 / 8.1​:这几个版本比较安分,主要确保php.ini​里display_errors = Off别让警告输出就行。不过PHP 7.4已经停止官方支持了,能升级还是建议升级。
  • PHP 8.2​:重点关注! 这个版本开始默认弃用“动态属性”,很多老程序会因此抛出Deprecated​警告,这些警告会直接插在RSS的XML开头,导致解析失败。解决办法是在程序入口或php.ini里关掉错误显示。
  • PHP 8.3 / 8.4:类型系统越来越严格。8.3对动态属性控制更狠,8.4则弃用了隐式可空类型声明。确保你用的博客程序(如Typecho, WordPress)已经发布了兼容这些新版本的更新。

具体操作

在你的网站入口文件(例如index.php)最开头,或者直接在php.ini配置文件中,加入以下代码来压制错误输出:

// 方法一:在程序入口文件(如 index.php)顶部添加
error_reporting(0);
ini_set('display_errors', '0');

// 方法二:修改 php.ini(效果更全局)
display_errors = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

我的建议是,无论用哪个版本,在生产环境永远关闭 display_errors 修改完配置后,别忘了重启 PHP-FPM 服务(例如 systemctl restart php8.2-fpm)。

Cloudflare层修复:让WAF规则放行你的订阅源

浏览器能打开,阅读器报 403——这是 Cloudflare 把 RSS 阅读器的请求当成可疑机器人给拦了。我们需要调整它的安全规则。

第一步:关闭“Bot Fight Mode”

操作路径:Cloudflare 控制台 → 安全性 (Security) → 自动程序 (Bots)

找到“自动程序攻击模式”(Bot Fight Mode),把它关掉。免费版的这个模式有点“宁杀错不放过”,会误伤很多正常的自动请求,比如 RSS 阅读器、搜索引擎爬虫。

如果你是 Pro 版用户,可以开启更智能的“Super Bot Fight Mode”,然后在“已验证的机器人”(Verified Bots) 分类中,设置规则为“允许”(Allow),这样 Feedly、Googlebot 这些正规军就能通行了。

第二步:配置精准的WAF规则

我们需要创建一条规则,专门放行 RSS 订阅地址的请求,不让后续的安防规则拦截它。

在 Cloudflare 控制台,进入安全性 → WAF → 自定义规则,创建一个新规则:

  1. 规则名称:比如“Allow RSS Feed Subscribers”

  2. 规则表达式 (When incoming requests match…)

    (http.request.uri.path contains "/feed") or (http.request.uri.path contains "/rss") or (http.request.uri.path contains "/atom")
    

    (请根据你博客实际的 RSS 路径修改)

  3. 操作 (Then…) :选择 跳过 (Skip)

  4. 在 Skip 的子选项中,勾选“跳过所有剩余的自定义规则”(Skip remaining custom rules) 。这一步非常关键,确保 RSS 请求不受其他可能存在的拦截规则影响。

然后,把这个规则的优先级拖到比较靠前的位置,确保它先于其他可能的拦截规则生效。

第三步:清除缓存

修改完任何 Cloudflare 设置后,一个好习惯是清除缓存。

操作路径:Cloudflare 控制台 → 缓存 (Caching) → 配置 (Configuration) → 清除所有内容 (Purge Everything)。

点“清除所有”。之后,再用阅读器或curl命令测试一下你的 RSS 地址,应该就能正常返回了。

源站加固:Nginx配置兜底

为了防止有人绕过 Cloudflare 直接攻击源站,或者作为你没用 CDN 时的防护,可以在 Nginx 里加一层基础防护。

把下面这段配置加到你的网站 Nginx 配置文件中(通常是 server块内):

location ~ ^/(feed|rss|atom) {
    # 只允许GET请求访问RSS
    limit_except GET { deny all; }
    
    # 拦截一些常见的恶意扫描工具的UA
    if ($http_user_agent ~* (sqlmap|nikto|nmap|zgrab|gobuster)) {
        return 444;
    }
    
    # 设置访问频率限制,防止被刷
    limit_req zone=one burst=5 nodelay;
    
    # 这里是你的原始PHP处理逻辑,保持不变
    try_files $uri $uri/ /index.php?$args;
}

# 可以顺便拦一下其他常见恶意请求路径
location ~* /(wp-admin|xmlrpc\.php|\.env|\.git) {
    return 444;
}

记得根据你服务器的实际情况,调整频率限制区域 (zone) 的名称和limit_req的参数。配置好后,运行 nginx -t测试配置,然后 systemctl reload nginx重载生效。

验证清单

都配置完之后,可以用下面这个清单快速检查一下是否全部生效:

  1. 检查PHP输出:直接用浏览器打开你的RSS订阅地址,查看网页源代码,看最前面有没有不该出现的PHP错误信息。
  2. 模拟阅读器请求​:在终端运行 curl -H "User-Agent: Feedly/1.0" https://你的域名.com/feed,确认返回状态码是200,并且内容是干净的XML。
  3. 清理Cloudflare缓存:在Cloudflare控制台的“缓存”设置里,执行“清除所有”的操作,确保新规则立即生效。
  4. 终极验证​:去 W3C Feed验证服务或你的Feedly订阅器里,重新添加一遍订阅链接,看看是否成功。

按照上面步骤走一遍,绝大多数 RSS 403 的问题都能解决。如果还有问题,欢迎在评论区留言讨论。