RSSHub 部署踩坑:当免费云服务器遇上反爬虫

目录

给 FreshRSS 加个 RSSHub,结果踩了一堆坑。记录一下。


🚀 部署

复用之前的 Oracle Cloud VPS,1GB 内存有点紧张,先加 Swap:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

启动容器:

docker run -d \
  --name rsshub \
  --restart always \
  -p 1200:1200 \
  -e CACHE_EXPIRE=300 \
  diygod/rsshub:latest

Nginx 反向代理、Cloudflare DNS 配置和 FreshRSS 一样,略过。


🔥 踩坑

坑 1:B 站直接返回「非法访问」

兴冲冲试了下 B 站路由:

https://rsshub.yourdomain.com/bilibili/user/video/946974

结果:

{"code":-401,"message":"非法访问"}

原因:Oracle Cloud 的 IP 被 B 站反爬虫拉黑了。免费云服务器的 IP 段早就被各大平台标记了。

解决方案

  1. 混合使用(我选的):国内源用公共实例 rsshub.rssforever.com,国外源用自己的
  2. 配置 Cookie(会过期,麻烦)
  3. 配置代理(更麻烦)

坑 2:chromium-bundled 镜像卡死

有些路由需要无头浏览器,官方有 diygod/rsshub:chromium-bundled 镜像。

但在 1GB 内存机器上,请求直接超时。Chromium 太吃资源了。

解决方案:放弃,用普通镜像。需要浏览器的路由走公共实例。

坑 3:Cookie 不能热更新

想配置 B 站 Cookie 绕过反爬?可以,但改了要重启容器。

RSSHub 有个 REMOTE_CONFIG 可以从远程 URL 加载配置,但也只是启动时加载,不是真正的热更新。

结论:这就是个人工具,别指望企业级体验。


📝 最终方案

源类型 用哪个实例
Telegram、GitHub、Hacker News 自己的 RSSHub
B 站、微博等国内平台 公共实例 rsshub.rssforever.com

在 FreshRSS 里混着用就行。


💭 总结

RSSHub 很实用,但在免费云服务器上跑有天然劣势:

  • IP 被反爬虫标记
  • 内存不够跑 Chromium
  • Cookie 管理不方便

对于国内平台,老老实实用公共实例更省心。自建的主要价值是订阅国外源 —— 这些通常不需要登录,也没那么严格的反爬。

RSS 的价值在于把复杂的信息聚合变简单,但这个领域还有很大发展空间。