我正在将现有的 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
我相信这些是速率限制器设置,所以当我禁用速率限制器时,看到有东西响应这些设置真是奇怪。
总而言之——我很想获得关于以下方面的指导:
- 速率限制器是否应该阻止备份上传?
- 当我注释掉那一行并重建应用程序时,为什么速率限制器没有被禁用?
谢谢!