全局速率限制和节流的可用设置【 id_10_secs_limit.】

Discourse 附带 3 种不同的全局速率限制,可以由站点管理员进行配置。

Slow down, too many requests from this user.
Please retry again in 4 seconds.
Error code: id_10_secs_limit.

全局每个 IP 的速率限制

这些限制适用于每个独特的 IP 地址访问 Discourse 应用程序(直接从文件系统或 CDN 提供的文件除外)。

默认情况下,此速率限制已启用,你可以禁用它或设置为报告模式。

  • DISCOURSE_MAX_REQS_PER_IP_MODE:默认设置,此速率限制开箱即用。(其他选项包括 block、warn、warn+block 和 none)
  • DISCOURSE_MAX_REQS_PER_IP_PER_MINUTE:每个 IP 每分钟的请求数(默认值为 200)
  • DISCOURSE_MAX_REQS_PER_IP_PER_10_SECONDS:每个 IP 每 10 秒的请求数(默认值为 50)
  • DISCOURSE_MAX_ASSET_REQS_PER_IP_PER_10_SECONDS:每个 IP 每 10 秒的资产(头像/CSS)请求数(默认值为 200)
  • DISCOURSE_MAX_REQS_RATE_LIMIT_ON_PRIVATE:速率限制是否适用于访问 Discourse 的私有 IP?默认值为 false。
  • DISCOURSE_SKIP_PER_IP_RATE_LIMIT_TRUST_LEVEL:对于具有此信任级别或更高的用户,使用每个用户的速率限制,而不是 IP 限制(默认值为 1)。

用户 API 速率限制

移动应用程序为每个设备获取一个用户 API 密钥,以代表用户访问 Discourse(使用开放协议)。这些 API 密钥的限制非常严格。

  • DISCOURSE_MAX_USER_API_REQS_PER_MINUTE:默认值为 20
  • DISCOURSE_MAX_USER_API_REQS_PER_DAY:默认值为 2880

管理员 API 速率限制

管理员 API 密钥可以通过页面生成。这些密钥可以代表用户操作,但生成时需要管理权限。每分钟最多允许 60 次请求,所有密钥共享此限制。

自托管用户可以在 app.yml 文件中更改此设置。托管客户需要联系他们的托管服务提供商。

  • DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE:60

Data Explorer API 速率限制

  • DISCOURSE_MAX_DATA_EXPLORER_API_REQ_MODE:默认设置,此速率限制开箱即用。(其他选项包括 warn、block、warn+block 和 none)
  • DISCOURSE_MAX_DATA_EXPLORER_API_REQS_PER_10_SECONDS:每 10 秒 2 次请求

注意:通过数据探索用户界面进行的请求不计入速率限制。

如果我触及速率限制并被节流,我该怎么办?

如果你以编程方式使用 API,并收到状态代码 429 的节流回复,你应尊重该限制并减慢速度。
image

作为最终用户,你实际上不应该体验到速率限制。如果出现这种情况,请减慢速度。你可能会因为快速打开 50 个标签页等操作而触发限制。

防火墙和代理警告!

如果你运行的反向代理配置错误,Discourse 可能会认为所有请求都来自同一 IP 地址,这很可能会导致你过早触及速率限制。确保正确配置你的反向代理以转发 IP。

如何修改这些限制?

要修改限制,请在 app.yml 文件的 env 部分添加所需的更改。

2 Likes

我只调整了 API 的使用情况,对普通用户比较容易出现限制的就是用 Ctrl 加鼠标点击的方式一口气打开好几十个 Tab 标签页。

前面打开的标签页可能没有什么问题,但在后面打开的标签页就会出现连接的问题。