部署教程
RSSHub 订阅不更新怎么排查:路由、缓存与阅读器
按 RSSHub 服务、真实路由、域名和阅读器的顺序定位订阅不更新与抓取失败。
先确认更新停在哪一段
源站更新、RSSHub 抓取和阅读器刷新是三个环节。本篇使用已经部署的 RSSHub 实例,按本机健康接口、真实路由、HTTPS 域名和阅读器的顺序检查。
注册推荐码:KuZhuJi
从服务健康接口开始
在 RSSHub 部署目录加载自己维护的 .env,带访问密钥检查本机接口:
set -a
. ./.env
set +a
curl -fsS --get \
--data-urlencode "key=$RSSHUB_ACCESS_KEY" \
http://127.0.0.1:1200/healthz失败先查容器状态、1200 监听和密钥。开启 ACCESS_KEY 后,健康检查也需带 key;Compose 中引用容器环境变量保留 $$ACCESS_KEY,避免提前被 Compose 展开。
检查真实路由与响应正文
以 GitHub Issues 路由为例,请求并保存响应头和正文:
curl -sS --get \
--data-urlencode "key=$RSSHUB_ACCESS_KEY" \
-D feed.headers \
-o feed.xml \
-w 'HTTP %{http_code}\n' \
http://127.0.0.1:1200/github/issue/DIYgod/RSSHub/open
head -n 12 feed.headers
head -c 400 feed.xml这次 curl 不使用 -f,便于保留错误正文。检查 HTTP 状态、Content-Type 和返回内容;HTML 验证页不是 Feed。404 查路径与上游页面,403 分清本实例密钥校验和源站拒绝,限流或登录过期看对应路由日志。
本机路由正常后,将地址换成自己的 HTTPS 域名,从服务器外访问。仅域名失败时查 DNS、证书、反向代理和入口端口。
XML 正常,却看不到新条目
比较源站是否确有新内容、路由参数是否过滤它、Feed 是否已包含它、阅读器何时刷新。CACHE_EXPIRE 控制缓存时间,900 秒不是定时抓取计划;阅读器还有自己的缓存与刷新周期。
云阅读器无法访问你的回环或局域网地址。完整订阅 URL 中多个查询参数用 & 连接;Feed 有新条目而客户端没有显示时,检查阅读器过滤、去重和当前视图。
为阅读器生成路径访问码
使用已加载到环境中的 RSSHUB_ACCESS_KEY,按路径生成 code:
python3 - <<'PY'
import hashlib, os
path = '/github/issue/DIYgod/RSSHub/open'
code = hashlib.md5((path + os.environ['RSSHUB_ACCESS_KEY']).encode()).hexdigest()
print('https://rss.example.com' + path + '?code=' + code)
PY当前规则为 MD5(pathname + 主密钥),查询参数不参与计算。输出 URL 保存到自己的阅读器;改变路径需要重新生成,更换主密钥会使旧码失效。向社区求助时移除 key、code、Cookie 和令牌。
需要浏览器的路由单独处理
路由提示缺少浏览器依赖时,按该路由说明配置带 Chromium 的镜像或独立 Browserless。增加依赖后用实际路由检查,查看内存、超时和浏览器连接日志。
GitHub 匿名 API 也有限流;需要时按 RSSHub 配置设置 GITHUB_ACCESS_TOKEN。网站已有原生 RSS 或 Atom 时可直接订阅原生源,不必经 RSSHub 转换。
