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 段早就被各大平台标记了。
解决方案:
- 混合使用(我选的):国内源用公共实例
rsshub.rssforever.com,国外源用自己的 - 配置 Cookie(会过期,麻烦)
- 配置代理(更麻烦)
坑 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 的价值在于把复杂的信息聚合变简单,但这个领域还有很大发展空间。