反向代理与限制
只要不是仅在自己的电脑上使用,就请在 Balnana 前面放一个 TLS 反向代理,例如 Caddy、Traefik 或 nginx。
| 设置 | 原因 |
|---|---|
BALNANA_PUBLIC_URL=https://balnana.example.com |
群组链接与电子邮件中的链接都以它为基础。 |
BALNANA_TRUST_PROXY=true |
频率限制才会从 X-Forwarded-For 看到真实的客户端地址。否则所有客户端都共用代理的地址,只要有一个客户端在猜密码或群组链接,就会挡住所有人。 |
BALNANA_BIND=127.0.0.1 |
代理在同一台机器上时,Compose 只会在 loopback 上开放 8080 端口。 |
在同一台机器上最简单的 Caddy 配置,证书也会自动帮你获取:
balnana.example.com { reverse_proxy 127.0.0.1:8080}打开中的群组通过 Server-Sent Events(/api/v1/g/<token>/events)实时更新,因此:
- 代理不能缓冲这些响应。nginx 会遵守服务器发出的
X-Accel-Buffering: no标头;Caddy 与 Traefik 无需设置。 - 尽量使用 HTTP/2。浏览器对每个网站只允许六条 HTTP/1.1 连接,而每个打开着的群组标签页都会占用一条。
- 由于实时更新会保持连接,服务器没有设置整体读取超时。请让代理去限制过慢的客户端。
BALNANA_RATE_LIMIT 设置每个客户端地址每分钟的 API 请求数(默认 600;0 为关闭)。开启时,每个客户端地址还有以下限制:
- 一次最多创建 30 个群组,之后每分钟一个;
- 一次最多创建 10 个账号,之后每小时六个;
- 一次最多为 20 部手机注册通知,之后每天 20 部;
- 最多保持 100 条实时连接。
每个账号一次最多发出 20 封电子邮件邀请(之后每分钟一封),一次最多更改电子邮件地址五次(之后每小时六次),因此服务器无法被拿来发送垃圾邮件。每个账号以及管理员,不论来源为何,一次最多接受 20 次错误密码,之后每小时 30 次。每个群组最多向 200 部手机发送通知。
这些限制由每个服务器程序各自保存在内存中。