配置
通过设置环境变量来配置 RSSHub
网络配置
PORT: 监听端口,默认为 1200
SOCKET: 监听 Unix Socket,默认 null
LISTEN_INADDR_ANY: 是否允许公网连接,默认 1
REQUEST_RETRY: 请求失败重试次数,默认 2
REQUEST_TIMEOUT: 请求超时毫秒数,默认 3000
UA: 用户代理,默认为随机用户代理用户代理(macOS 上的 Chrome)
NO_RANDOM_UA: 是否禁用随机用户代理,默认 null
跨域请求
RSSHub 默认对跨域请求限制为当前连接所在的域名,即不允许跨域。可以通过 ALLOW_ORIGIN: * 或者 ALLOW_ORIGIN: www.example.com 以对跨域访问进行修改。
缓存配置
RSSHub 支持 memory 和 redis 两种缓存方式
CACHE_TYPE: 缓存类型,可为 memory 和 redis,设为空可以禁止缓存,默认为 memory
CACHE_EXPIRE: 路由缓存过期时间,单位为秒,默认 5 * 60
CACHE_CONTENT_EXPIRE: 内容缓存过期时间,每次访问会重新计算过期时间,单位为秒,默认 1 * 60 * 60
REDIS_URL: Redis 连接地址(redis 缓存类型时有效),默认为 redis://localhost:6379/
MEMORY_MAX: 最大缓存数量(memory 缓存类型时有效),默认 256
代理配置
部分路由反爬严格,可以配置使用代理抓取。
可通过代理 URI 或代理选项或代理自动配置文件 (PAC) 或反向代理等方式来配置代理。
代理 URI
PROXY_URI: 代理 URI,支持 socks4, socks5(本地查询域名的 SOCKS5,不推荐使用), socks5h(传域名的 SOCKS5,推荐使用,以防止 DNS 污染或 DNS 泄露), http, https,具体以 socks-proxy-agent NPM 包的支持为准,也可参考 curl 中 SOCKS 代理协议的用法。
代理 URI 的 格式为:
{protocol}://{host}:{port}{protocol}://{username}:{password}@{host}:{port}(带身份凭证)一些示例:
socks4://127.0.0.1:1080socks5h://user:pass@127.0.0.1:1080(用户名为user, 密码为pass)socks://127.0.0.1:1080(protocol 为 socks 时表示socks5h)http://127.0.0.1:8080http://user:pass@127.0.0.1:8080https://127.0.0.1:8443
代理选项
PROXY_PROTOCOL: 使用代理,支持 socks,http,https
PROXY_HOST: 代理服务器域名或 IP
PROXY_PORT: 代理服务器端口
PROXY_AUTH: 给代理服务器的身份验证凭证,Proxy-Authorization: Basic ${process.env.PROXY_AUTH}
PROXY_URL_REGEX: 启用代理的 URL 正则表达式,默认全部开启 .*
代理自动配置文件 (PAC)
该方法会覆盖 PROXY_URI, PROXY_PROTOCOL, PROXY_HOST 以及 PROXY_PORT。
关于代理自动配置文件 (PAC),请查看代理自动配置文件(PAC)文件。
PAC_URI: PAC 文件 URI,支持 http, https, ftp, file, data。具体以 pac-proxy-agent NPM 包的支持为准。
PAC_SCRIPT: 硬编码的 PAC 脚本字符串。覆盖 PAC_URI。
反向代理
这种代理方式无法代理包含 cookie 的请求。
REVERSE_PROXY_URL: 反向代理地址,RSSHub 将会使用该地址作为前缀来发起请求,例如 https://proxy.example.com/?target=,对 https://google.com 发起的请求将被自动转换为 https://proxy.example.com/?target=https%3A%2F%2Fgoogle.com
你可以使用 Cloudflare Workers 来搭建一个简易的反向代理,例如:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
let target = url.searchParams.get('target')
if (!target) {
return new Response('Hello, this is Cloudflare Proxy Service. To proxy your requests, please use the "target" URL parameter.')
} else {
target = decodeURIComponent(target)
const newRequest = new Request(target, {
headers: request.headers,
method: request.method,
body: request.body
})
return await fetch(newRequest)
}
}
用户认证
protected_route.js 内的路由将启用 HTTP Basic Authentication 认证
支持该认证协议的阅读器,在添加源地址时,需要在源地址前添加认证信息,例如:http://usernam3:passw0rd@rsshub.moeyy.cn/protected/rsshub/routes。
对于不支持该认证协议的阅读器,请参考 访问控制配置。
HTTP_BASIC_AUTH_NAME: Http basic authentication 用户名,默认为 usernam3,请务必修改
HTTP_BASIC_AUTH_PASS: Http basic authentication 密码,默认为 passw0rd,请务必修改
访问控制配置
RSSHub 支持使用访问密钥 / 码,允许清单和拒绝清单三种方式进行访问控制。开启任意选项将会激活全局访问控制,没有访问权限将会导致访问被拒绝。同时可以通过 ALLOW_LOCALHOST: true 赋予所有本地 IP 访问权限。
允许清单/拒绝清单
-
ALLOWLIST: 允许清单,设置允许清单后拒绝清单无效 -
DENYLIST: 拒绝清单
允许清单/拒绝清单支持 IP、路由和 UA,模糊匹配,设置多项时用英文逗号 , 隔开,例如 ALLOWLIST=1.1.1.1,2.2.2.2,/qdaily/column/59
访问密钥 / 码
ACCESS_KEY: 访问密钥,用于直接访问所有路由或者生成访问码
访问码为 访问密钥 + 路由 共同生成的 md5,例如:
| 访问密钥 | 路由 | 生成过程 | 访问码 |
|---|---|---|---|
| ILoveRSSHub | /qdaily/column/59 | md5('/qdaily/column/59' + 'ILoveRSSHub') | 0f820530128805ffc10351f22b5fd121 |
-
此时可以通过
code访问路由,例如:https://rsshub.moeyy.cn/qdaily/column/59?code=0f820530128805ffc10351f22b5fd121 -
或使用访问密钥
key直接访问所有路由,例如:https://rsshub.moeyy.cn/qdaily/column/59?key=ILoveRSSHub
访问密钥 / 码与允许清单/拒绝清单的访问控制关系如下:
| 正确访问密钥 / 码 | 错误访问密钥 / 码 | 无访问密钥 / 码 | |
|---|---|---|---|
| 在允许清单中 | ✅ | ✅ | ✅ |
| 在拒绝清单中 | ✅ | ❌ | ❌ |
| 无允许清单/拒绝清单 | ✅ | ❌ | ❌ |
日志配置
DEBUG_INFO: 是否在首页显示路由信息。值为非 true false 时,在请求中带上参数 debug 开启显示,例如:https://rsshub.moeyy.cn/?debug=value_of_DEBUG_INFO 。默认 true
LOGGER_LEVEL: 指明输出到 console 和日志文件的日志的最大 等级,默认 info
NO_LOGFILES: 是否禁用日志文件输出,默认 false
SHOW_LOGGER_TIMESTAMP: 在控制台输出中显示日志时间戳,默认 false
SENTRY: Sentry dsn,用于错误追踪
SENTRY_ROUTE_TIMEOUT: 路由耗时超过此毫秒值上报 Sentry,默认 3000
图片处理
我们正在试验新的,更灵活的配置方式。如果有需要,请转到 通用参数 -> 多媒体处理 了解更多。
在使用新配置时,请将下方环境变量留空。否则默认图片模版会继续遵循下方配置 。
HOTLINK_TEMPLATE: 用于处理描述中图片的 URL,绕过防盗链等限制,留空不生效。用法参考 #2769。可以使用 URL 的所有属性(加上后缀 _ue 则会对其进行 URL 编码),格式为 JS 变量模板。例子:${protocol}//${host}${pathname}, https://i3.wp.com/${host}${pathname}, https://images.weserv.nl?url=${href_ue}
HOTLINK_INCLUDE_PATHS: 限制需要处理的路由,只有匹配成功的路由会被处理,设置多项时用英文逗号 , 隔开。若不设置,则所有路由都将被处理
HOTLINK_EXCLUDE_PATHS: 排除不需处理的路由,所有匹配成功的路由都不被处理,设置多项时用英文逗号 , 隔开。可单独使用,也可用于排除已被前者包含的路由。若不设置,则没有任何路由会被过滤
HOTLINK_INCLUDE_PATHS 和 HOTLINK_EXCLUDE_PATHS 均匹配路由根路径及其所有递归子路径,但并非子字符串匹配。注意必须以 / 开头,且结尾不需要 /。
例:/example, /example/sub 和 /example/anthoer/sub/route 均可被 /example 匹配,但 /example_route 不会被匹配。
也可带有路由参数,如 /weibo/user/2612249974 也是合法的。
功能特性
这个板块控制的是一些新特性的选项,他们都是默认关闭的。如果有需要请阅读对应说明后按需开启
ALLOW_USER_HOTLINK_TEMPLATE: 通用参数 -> 多媒体处理特性控制
FILTER_REGEX_ENGINE: 控制 通用参数 -> 内容过滤 使用的正则引擎。可选[re2, regexp],默认re2。我们推荐公开实例不要调整这个选项,这个选项目前主要用于向后兼容。
ALLOW_USER_SUPPLY_UNSAFE_DOMAIN: 允许用户为路由提供域名作为参数。建议公共实例不要调整此选项,开启后可能会导致 服务端请求伪造(SSRF)
其他应用配置
DISALLOW_ROBOT: 阻止搜索引擎收录,默认开启,设置 false 或 0 关闭
ENABLE_CLUSTER: 是否开启集群模式,默认 false
NODE_ENV: 是否显示错误输出,默认 production (即关闭输出)
NODE_NAME: 节点名,用于负载均衡,识别当前节点
PUPPETEER_WS_ENDPOINT: 用于 puppeteer.connect 的浏览器 websocket 链接,见 browserWSEndpoint
CHROMIUM_EXECUTABLE_PATH: Chromium(或 Chrome)的可执行路径。若 puppeteer 没有下载捆绑的 Chromium(主动跳过下载或体系架构为 arm/arm64),设置此项可启用 puppeteer。或者,偏好 Chrome 而不是 Chromium 时,此项也很有用。注意:PUPPETEER_WS_ENDPOINT 被设置时,此项不生效;仅在手动部署时有用,对于 Docker 部署,请改用 chromium-bundled 版本镜像。
TITLE_LENGTH_LIMIT: 限制输出标题的字节长度,一个英文字符的长度为 1 字节,部分语言如中文,日文,韩文或阿拉伯文等,统一算作 2 字节,默认 150
OPENAI_API_KEY: OpenAI API Key,用于使用 ChatGPT 总结文章
OPENAI_MODEL: OpenAI 模型名称,用于使用 ChatGPT 总结文章,默认gpt-3.5-turbo-16k,详见 OpenAI API 文档
OPENAI_TEMPERATURE: OpenAI 温度参数,用于使用 ChatGPT 总结文章,默认0.2,详见 OpenAI API 文档
OPENAI_MAX_TOKENS: OpenAI 最大 token 数,用于使用 ChatGPT 总结文章,默认null,详见 OpenAI API 文档
OPENAI_API_ENDPOINT: OpenAI API 地址,用于使用 ChatGPT 总结文章,默认https://api.openai.com/v1,详见 OpenAI API 文档
OPENAI_PROMPT: OpenAI 提示语,用于使用 ChatGPT 总结文章,详见 OpenAI API 文档
REMOTE_CONFIG: 远程配置地址,用于动态更新配置,地址应返回一个环境变量名作为 key 的 JSON,会在应用启动时加载并合并本地配置,与本地配置冲突时以远程配置为准,但请注意部分基础配置项不支持从远程获取
部分 RSS 模块配置
此处信息不完整。完整配置请参考路由对应的文档和 lib/config.js。
4399 论坛
GAME_4399: 对应登录后的 cookie 值,获取方式:- 在 4399 首页登录。
- 打开开发者工具,切换到 Network 面板,刷新
- 查找
www.4399.com的访问请求,点击请求,在右侧 Headers 中找到 Cookie.
bilibili
用于用户关注动态系列路由
BILIBILI_COOKIE_{uid}: 对应 uid 的 b 站用户登录后的 Cookie 值,{uid}替换为 uid,如BILIBILI_COOKIE_2267573,获取方式:- 打开 https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=0&type=8
- 打开控制台,切换到 Network 面板,刷新
- 点击 dynamic_new 请求,找到 Cookie
- 视频和专栏,UP 主粉丝及关注只要求
SESSDATA字段,动态需复制整段 Cookie
Bitbucket
BITBUCKET_USERNAME: 你的 Bitbucket 用户名BITBUCKET_PASSWORD: 你的 Bitbucket 密码
BTBYR
BTBYR_HOST: 支持 ipv4 访问的 BTBYR 镜像,默认为原站https://bt.byr.cn/。BTBYR_COOKIE: 注册用户登录后的 Cookie 值,获取方式:- 登录后打开网站首页
- 打开控制台,刷新
- 找到
https://bt.byr.cn/index.php请求 - 找到请求头中的 Cookie
BUPT
BUPT_PORTAL_COOKIE: 登录后获得的 Cookie 值,获取方式- 打开 https://webapp.bupt.edu.cn/wap/login.html?redirect=https://>并登录
- 无视掉报错,并打开 https://webapp.bupt.edu.cn/extensions/wap/news/list.html?p-1&type=xnxw
- 打开控制台,刷新
- 找到
https://webapp.bupt.edu.cn/extensions/wap/news/list.html?p-1&type=xnxw请求 - 找到 请求头中的 Cookie
Civitai
CIVITAI_COOKIE: Civitai 登录后的 cookie 值
Discourse
DISCOURSE_CONFIG_{id}: 一个 Discourse 驱动的论坛的配置信息,id可自由设定为任意数字或字符串。值应形如{"link":link,"key":key}。其中:link:论坛的链接。key访问论坛 API 的密钥,可参考 此处代码 以获取。需要确保有足够权限访问对应资源。
Discuz
DISCUZ_COOKIE_{cid}: 某 Discuz 驱动的论坛,用户注册后的 Cookie 值,cid 可自由设定,取值范围 [00, 99], 使用 discuz 通用路由时,通过指定 cid 来调用该 cookie
Disqus
DISQUS_API_KEY: Disqus API
E-Hentai
EH_IPB_MEMBER_ID: E-Hentai 账户登录后 cookie 的ipb_member_id值EH_IPB_PASS_HASH: E-Hentai 账户登录后 cookie 的ipb_pass_hash值EH_SK: E-Hentai 账户登录后 cookie 中的sk值EH_IGNEOUS: ExHentai 账户登录后 cookie 中的igneous值。若设置此值,RSS 数据将全部从里站获取EH_STAR: E-Hentai 账户获得捐赠等级后将出现该 cookie。若设置此值,图片访问量限制将与账号关联而非 IP 地址EH_IMG_PROXY: 封面代理访问地址。若设置此值,封面图链接将被替换为以此值开头。使用 ExHentai 时,封面图需要有 Cookie 才能访问,在一些阅读软件上没法显示封面,可以使用此值搭配一个加 Cookie 的代理服务器实现阅读软件无 Cookie 获取封面图。
Fantia
FANTIA_COOKIE: 登录后的cookie, 可以在控制台中查看请求头获取。如果不填会导致部分需要登录后才能阅读的帖子获取异常
Gitee
GITEE_ACCESS_TOKEN: Gitee 私人令牌
GitHub
GITHUB_ACCESS_TOKEN: GitHub Access Token
Google Fonts
GOOGLE_FONTS_API_KEY: API key
Instagram
IG_USERNAME: Instagram 用户名(仅 Private API)IG_PASSWORD: Instagram 密码(仅 Private API)IG_PROXY: Instagram 代理 URL(仅 Private API,可选)IG_COOKIE: Instagram 登录后的 Cookie(仅 Cookie)
注意,暂不支持两步验证。
Iwara
IWARA_USERNAME: Iwara 用户名IWARA_PASSWORD: Iwara 密码
Last.fm
LASTFM_API_KEY: Last.fm API Key
LightNovel.us
SECURITY_KEY: 在token中security_key的值,请去除%22,例如{%22security_key%22:%223cXXXX%22},只需要3cXXXX部分
Mastodon
用户时间线路由:访问 https://mastodon.example/settings/applications 申请(替换掉 mastodon.example)。需要 read:search 权限
MASTODON_API_HOST: API 请求的实例,仅域名,不包括http://或https://协议头MASTODON_API_ACCESS_TOKEN: 用户 access token, 申请应用后,在应用配置页可以看到申请者的 access tokenMASTODON_API_ACCT_DOMAIN: 该实例本地用户 acct 标识的域名,Webfinger account URI,形如user@host
Medium
打开控制台,复制 Cookie(理论上只需要 uid 和 sid 即可)
MEDIUM_ARTICLE_COOKIE:请求全文时使用的 Cookie,存在活跃的 Member 订阅时可获取付费内容全文MEDIUM_COOKIE_{username}:对应 username 的用户的 Cookie,个性推荐相关路由需要
MiniFlux
MINIFLUX_INSTANCE: 用户所用的实例,默认为 MiniFlux 官方提供的 付费服务地址MINIFLUX_TOKEN: 用户的 API 密钥,请登录所用实例后于设置->API 密钥->创建一个新的 API 密钥处获取