RSSHub
Github Repo
官方文档
RSSHub 是什么
RSSHub 是一个开源 RSS 生成服务。它的目标很直接:把原本没有 RSS、RSS 不完整、或者官方订阅体验很差的网站内容,转换成标准 RSS/Atom/JSON Feed。
典型场景:
- 订阅 B 站、微博、知乎、GitHub、Telegram、YouTube 等平台内容。
- 把网页列表、公告页、搜索结果页转换成订阅源。
- 给 FreshRSS、Miniflux、Folo、Reeder、NetNewsWire 等阅读器提供 feed。
- 在自己的服务器上部署私有实例,减少公共实例不稳定、限流、封禁、隐私泄漏的问题。
一句话:RSSHub 不是 RSS 阅读器,而是 RSS 源生成器。
为什么建议自建
RSSHub 有公共实例,但长期使用更建议自建。
原因主要有四个:
- 公共实例容易被热门路由拖慢,也容易被目标站点限流。
- 某些路由需要 Cookie、Token、API Key,不适合放在公共实例。
- 自建实例可以配置 Redis 缓存、代理、访问密钥和反向代理。
- 订阅器的稳定性取决于 feed 可用性,自建更容易排错。
如果只是临时测试某个路由,可以先用公共实例;如果要作为长期信息入口,应当自建。
部署方式选择
RSSHub 官方推荐 Docker Compose 部署。原因是 RSSHub 的完整运行环境不只一个 Node.js 服务:
rsshub:主服务,默认监听1200。redis:缓存服务,建议生产环境启用。browserless:给需要真实浏览器渲染的路由使用。
如果只用 docker run diygod/rsshub,可以启动主服务,但没有 Redis 和 browserless。部分路由会慢,部分需要浏览器的路由可能不能正常工作。
所以服务器部署建议使用:
Docker Compose + Redis + browserless + 反向代理前置准备
1. 准备目录
建议放在 /opt/rsshub:
sudo mkdir -p /opt/rsshub
cd /opt/rsshub目录结构:
/opt/rsshub
├─ .env
└─ docker-compose.yml2. 准备域名
建议给 RSSHub 单独准备一个子域名:
rsshub.example.com不建议直接暴露 http://服务器IP:1200 给公网。生产环境更合理的做法是:
用户 -> HTTPS 反向代理 -> 127.0.0.1:1200 -> RSSHubDocker Compose 部署
可直接复制的 1Panel / Docker Compose 模板放在这里:
主指南不再重复维护完整 docker-compose.yml。实际部署时只需要:
- 在服务器上创建
/opt/rsshub。 - 按上面的 compose 专文写入
docker-compose.yml和.env。 - 用
openssl rand -hex 32分别生成REDIS_PASSWORD和ACCESS_KEY。 - 保持
HOST_IP=127.0.0.1,再用 1Panel / OpenResty / Nginx 反向代理到127.0.0.1:1200。
如果开启 ACCESS_KEY,健康检查必须带 key,并且 compose 里要写成 $${ACCESS_KEY},让变量在容器内部解析。
OpenResty 反向代理
如果你已经按本站的 OpenResty 方式管理反向代理,可以新建配置:
sudo nano /usr/local/openresty/nginx/conf/conf.d/rsshub.confHTTP 到 HTTPS 跳转:
server {
listen 80;
server_name rsshub.example.com;
return 301 https://$host$request_uri;
}HTTPS 反向代理:
server {
listen 443 ssl;
server_name rsshub.example.com;
ssl_certificate /usr/local/openresty/nginx/conf/ssl/example.com.crt;
ssl_certificate_key /usr/local/openresty/nginx/conf/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:1200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 10s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}检查配置:
sudo openresty -t重载:
sudo systemctl reload openresty访问方式
假设域名是:
https://rsshub.example.com假设访问密钥是:
ILoveRSSHub那么访问路由时加上:
?key=ILoveRSSHub例如 GitHub 用户动态:
https://rsshub.example.com/github/received_events/DIYgod?key=ILoveRSSHub如果不想在订阅链接里直接暴露 ACCESS_KEY,可以使用 RSSHub 的 access code。access code 是:
md5(路由路径 + ACCESS_KEY)例如:
md5("/github/received_events/DIYgod" + "ILoveRSSHub")然后访问:
https://rsshub.example.com/github/received_events/DIYgod?code=生成出的md5实际使用中,如果只是自己用,key 最简单;如果要把某条 feed 分享给别人,code 更合适。
常用路由示例
RSSHub 路由非常多,应以官方文档为准。下面只列一些常见类型。
GitHub
用户动态:
/github/received_events/:user仓库 releases:
/github/repos/:owner/:repo/releases仓库 commits:
/github/repos/:owner/:repo/commits/:branchBilibili
用户投稿:
/bilibili/user/video/:uid用户动态:
/bilibili/user/dynamic/:uidTelegram
频道:
/telegram/channel/:usernameYouTube
频道:
/youtube/channel/:id用户:
/youtube/user/:username路由怎么找
最直接的方法是查官方文档:
也可以安装浏览器扩展:
它的作用是:打开一个页面后,自动提示这个页面是否有官方 RSS 或 RSSHub 路由。
和 RSS 阅读器配合
RSSHub 只负责生成 feed,不负责阅读。
常见组合:
RSSHub -> FreshRSS
RSSHub -> Miniflux
RSSHub -> Folo
RSSHub -> Reeder
RSSHub -> NetNewsWire如果你有自己的服务器,比较推荐:
RSSHub + FreshRSS / Miniflux这样 RSSHub 负责抓取和转换,阅读器负责订阅、去重、已读状态、全文搜索和跨设备同步。
更新
进入部署目录:
cd /opt/rsshub拉取新镜像:
docker compose pull重建并启动:
docker compose up -d清理旧镜像:
docker image prune -f日志管理
如果担心 Docker 日志过大,可以在 rsshub 服务里加:
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"也可以在 Docker 全局配置 /etc/docker/daemon.json 里统一限制日志大小。
代理配置
部分路由会遇到目标站点访问限制。这时可以给 RSSHub 配置 HTTP/HTTPS 代理。
.env 示例:
PROXY_URI=http://proxy.example.com:7890
PROXY_URL_REGEX=.*如果代理需要认证:
PROXY_AUTH=base64后的用户名密码注意:RSSHub 官方配置里 PROXY_URI 的协议支持 http 和 https。如果你的代理是 socks5,需要先转换成 HTTP 代理,或者使用支持 HTTP 入站的代理服务。
常见问题
1. 访问 RSSHub 首页正常,但某个路由 500
先看日志:
docker compose logs -f rsshub常见原因:
- 目标站点改版,路由暂时失效。
- 目标站点反爬,需要 Cookie、Token 或代理。
- 该路由需要 browserless,但 browserless 没启动。
- 目标站点响应慢,
REQUEST_TIMEOUT太短。
2. 阅读器刷新太频繁,目标站点限流
调大缓存时间:
CACHE_EXPIRE=1800
CACHE_CONTENT_EXPIRE=7200含义:
CACHE_EXPIRE=1800:路由结果缓存 30 分钟。CACHE_CONTENT_EXPIRE=7200:内容缓存 2 小时。
3. 设置了 ACCESS_KEY 后健康检查失败
如果启用了:
ACCESS_KEY=xxx健康检查必须带上:
/healthz?key=xxx也就是 compose 里应写成:
healthcheck:
test: ["CMD-SHELL", "curl -f \"http://localhost:1200/healthz?key=$${ACCESS_KEY}\""]4. 不想让别人直接访问我的 RSSHub
有三种做法:
- 设置
ACCESS_KEY。 - 在 OpenResty / Nginx / Cloudflare 层做访问控制。
- 只监听
127.0.0.1:1200,不开放容器端口到公网。
我个人建议至少做第 1 和第 3 项。
5. 某些路由需要登录态怎么办
部分路由需要 Cookie、Token 或 API Key。做法是把对应变量写进 .env,再重启容器。
docker compose up -d具体变量名要看对应路由文档,不同平台不一样。
推荐配置
个人自用实例建议:
HOST_IP=127.0.0.1
RSSHUB_PORT=1200
CACHE_TYPE=redis
CACHE_EXPIRE=600
CACHE_CONTENT_EXPIRE=3600
REQUEST_TIMEOUT=5000
ACCESS_KEY=强随机字符串
PLAYWRIGHT_WS_ENDPOINT=ws://browserless:3000如果服务器内存很小,且你确定不用需要浏览器渲染的路由,可以删掉 browserless 服务,同时删除:
PLAYWRIGHT_WS_ENDPOINT=ws://browserless:3000以及 compose 里的:
depends_on:
browserless:
condition: service_healthy但这会牺牲部分路由的可用性。