上传备份文件时出现速率限制器问题/无法禁用速率限制器

我正在将现有的 Discourse 实例从其当前位置迁移到 AWS EC2 虚拟机。
该站点位于 Amazon 负载均衡器后面。我已经成功调整了 app.yml 中的适当 set_real_ip_from 指令,以便 NGINX 了解负载均衡器 IP。我知道这有效,因为当我检查用户的最后一个 IP 时,我可以看到我的真实 IP。

但是,当我尝试上传旧服务器上的 375 MB 备份时,当文件上传到大约 35% 时,新站点开始发出 429 错误,并且上传过程失败。429 响应中的标头标识“discourse-rate-limit-error-code: id_10_secs_limit”。

我对此感到惊讶。我打开了浏览器开发者工具窗口的“网络”选项卡,看到大量小块文件(我认为是 5 MB)很快被上传。我的互联网连接速度为 200mbps,所以也许它太快了,无法满足默认的速率限制器设置?或者也许期望管理员任务通常是从私有网络完成的(这在我的 AWS 设置中是不可能的)?

**但等等,还有更多!**我尝试通过从 app.yml 中注释掉“templates/web.ratelimited.template.yml”行并重建应用程序来禁用速率限制器,但这不起作用。当我的文件上传到大约 35% 时,我仍然收到 429 错误。

因此,我迅速将以下环境变量添加到 app.yml 文件中,重建后终于能够上传备份以进行恢复。

DISCOURSE_MAX_REQS_PER_IP_MODE: none
DISCOURSE_MAX_REQS_PER_IP_PER_10_SECONDS: 1000

我相信这些是速率限制器设置,所以当我禁用速率限制器时,看到有东西响应这些设置真是奇怪。

总而言之——我很想获得关于以下方面的指导:

  1. 速率限制器是否应该阻止备份上传?
  2. 当我注释掉那一行并重建应用程序时,为什么速率限制器没有被禁用?

谢谢!

如果您正在尝试上传备份,请使用 scp 或将其放在 S3 上。

您说的“使用 scp”是指直接将文件传输到虚拟机,然后将其放置在 Discourse 可以找到的特定文件夹中吗?我还没有尝试过,但看起来那个特定文件夹是 /var/discourse/shared/standalone/backups/default

另外,使用 S3 真的可以绕过 Amazon 的负载均衡器吗?

谢谢!

1 个赞

如果该文件夹存在,那么可能就是那里。

会的。

1 个赞

默认恢复指南要求创建 default 文件夹,因此即使它不存在,也可以手动创建它。

参考:Restore a backup from the command line

2 个赞