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:每 10 秒每个 IP 的请求数(默认为 50)
DISCOURSE_MAX_ASSET_REQS_PER_IP_PER_10_SECONDS:每 10 秒每个 IP 的资源(头像/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
数据资源管理器 插件 API 速率限制
DISCOURSE_MAX_DATA_EXPLORER_API_REQ_MODE:默认为 warn(警告),此速率限制开箱即用。(其他选项是 block(阻止)、warn+block(警告+阻止)和 none(无))
DISCOURSE_MAX_DATA_EXPLORER_API_REQS_PER_10_SECONDS:2
注意:通过数据资源管理器用户界面发出的请求不计入速率限制。
如果我遇到速率限制并被限速,该怎么办?
如果您以编程方式使用 API 并且收到 429 状态码的限速回复,您应该遵守它并放慢速度。
作为最终用户,您实际上不应该遇到速率限制,如果遇到了,请放慢速度。您可能会通过快速打开 50 个标签页或类似操作来触发它。
防火墙和代理警告!
如果您运行的反向代理配置不当,Discourse 可能会认为所有请求都来自单个 IP 地址,您很可能会很快达到速率限制。请确保正确配置您的反向代理以转发 IP。
如何修改这些限制?
要修改限制,请在 app.yml 文件中的 env 部分添加所需的更改。
如果您由 Discourse 托管,并且在 企业版 计划中,请联系 team@discourse.org 如果您需要调整这些限制中的任何一个。
在 入门版、专业版或商业版 计划上,全局速率限制不可调整。