Discourse 内置了 3 种不同的全局速率限制,可由站点管理员进行配置。
全局按 IP 的速率限制
这些限制适用于访问 Discourse 应用程序的每个唯一 IP 地址。(直接从文件系统或 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)
DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS:一个以空格分隔的 IP 地址或 CIDR 块列表,这些地址将被排除在按 IP 速率限制之外。例如:14.15.16.32/27 216.148.1.2
用户 API 速率限制
移动应用程序会为每个设备获取一个用户 API 密钥,以代表用户访问 Discourse(使用开放协议)。这些 API 密钥受到非常严格的限制。
DISCOURSE_MAX_USER_API_REQS_PER_MINUTE:默认值为 20
DISCOURSE_MAX_USER_API_REQS_PER_DAY:默认值为 2880
管理员 API 速率限制
管理员 API 密钥可以通过 yoursite.com/admin/api/keys 页面生成。这些密钥可以代表用户进行操作,但需要管理员权限才能生成。所有密钥共享每分钟 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:2
注意:通过 Data Explorer 界面发出的请求不计入速率限制。
如果我触发了速率限制并被节流,该怎么办?
如果您正在以编程方式使用 API,并且收到 429 状态代码的节流响应,您应该尊重该响应并降低请求速度。
作为最终用户,您通常不应该遇到速率限制。如果确实遇到了,请降低操作速度。例如,快速打开 50 个标签页或进行类似操作可能会触发此限制。
防火墙和代理警告! 
如果您运行的是配置错误的反向代理,Discourse 可能会认为所有请求都来自同一个 IP 地址,这极有可能导致您很快触发速率限制。请务必正确配置您的反向代理以转发 IP 地址。
我该如何修改这些限制?
要修改这些限制,请将所需的更改添加到 app.yml 文件的 env 部分中。
如果您由 Discourse 托管,并且订阅了 企业版计划,如需调整这些限制中的任何一项,请联系 team@discourse.org。
在 免费、入门版、专业版或商业版计划 中,全局速率限制是不可调整的。