全局速率限制和节流的可用设置

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 个标签页或类似操作来触发它。

防火墙和代理警告!:warning:

如果您运行的反向代理配置不当,Discourse 可能会认为所有请求都来自单个 IP 地址,您很可能会很快达到速率限制。请确保正确配置您的反向代理以转发 IP。

如何修改这些限制?

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

:discourse: 如果您由 Discourse 托管,并且在 企业版 计划中,请联系 team@discourse.org 如果您需要调整这些限制中的任何一个。

入门版、专业版或商业版 计划上,全局速率限制不可调整。

60 个赞
Troubleshooting a 429 (rate limit)
Is there a limit of API requests?
Rate limits for API users
Any way to turn off RateLimiter temporarily for bulk creation by admin?
Changing/removing API rate limit with category creation
Internal links not oneboxing in private messages
How to improve the forum api call number limit?
Discourse-topic-organizer causing "Slow down, too Many Requests from this IP Address"
How-to disable or tune rate limiting by ip address?
How to edit "hidden" site_settings?
Rate limit errors although IP is whitelisted
API rate limits
User API keys specification
Why semrushbot and ahrefsbot are blocked by default?
429 error when opening multiple topics
Remove the ip limits
Error code 429 when utilising a Zapier integration
Understanding /logs/report_js_error 429
Direct URL for the "email me a login link" feature
Do not see discourse/config/site_settings.yml to set USER API limits
Uncaught (in promise) error
Webhook connect to post comments to WordPress working unreliably
Changing/removing API rate limit with category creation
Enable user to Generate API key
Import posts through API (time delay)
You Have Performed this Action Too Many Times Error
Api call returns nothing when too many requests
Very slow discobot certificate generation on our server
API rate limits
Create and configure an API key
Fetch All Posts from a Topic Using the API
Discourse REST API Documentation
Discourse API Generating 429
How to disable api limits?
Global rate API Limit is not working on live server
How to avoid throttling limits with admin API key?
Set Environmental Variables
Increase rate limit for API?
How do I disable rate limiting from a single IP
Generate User Api Key Without User Approval
Default value for id_10_secs_limit
Semantic Search API
Self-hosting Index
Issues when I enable Component, maybe Right Sidebar Blocks?
Direct URL for the "email me a login link" feature

在我看来,如果你安装了 web.ratelimited.template.yml,那么这些就没有意义了,因为 NGINX 会在它们到达 Discourse 之前进行速率限制,对吗?

从我的 nginx 日志来看似乎是这样。

我的短期解决方案是将我的 IP 地址添加到本地 IP 列表中,这样它就可以绕过 NGINX。我想要做的事情是删除 ratelimited 模板,让这些设置有意义?

2 个赞

关于以下文本:

防火墙和代理警告! :warning:

如果您运行的反向代理配置不当,Discourse 可能会认为所有请求都来自单个 IP 地址,您很可能会很快达到速率限制。请务必配置您的反向代理以正确转发 IP。

在我们的设置中,我们通过代理隧道传输所有 API 调用。此代理在有时查询 Discourse 之前会处理身份验证和许多其他事务。

转发原始请求者 IP 地址的推荐方法(特定标头?)是什么?

相关

1 个赞

有人能帮我理解这个配置设置吗?

我的理解是,这个设置已经设置为 1,并且默认情况下速率限制是按用户而不是按 IP 地址设置的*(如果用户是 TL1 或更高)*?

1 个赞

它实际上并不存在,因此我不需要指定其中一个或多个设置。

我的脚本 始终遵守 Retry-After 标头,正如我们在原始第 101 行所见;

retry_after = r.headers.get("Retry-After")

然而,由于我安排同一脚本在一天中不同时间运行不同的服务单元,因此此标头变得不必要地庞大。

因此,通过 mail-receiver 改进的默认电子邮件可传递性中的某些设置的倍数仍然很重要。