sithmein
(Thorsten Meinl)
1
我们正在 Docker 容器中使用 Discourse。我们设置了带有白名单 IP 的速率限制。但是,当我们从该 IP 发出请求时,仍然收到速率限制错误。我确信 nginx 配置是正确的,它看起来是这样的:
geo $limit {
default 1;
1.1.1.1 0; # 不是真实的 IP
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=flood:10m rate=12r/s;
limit_req_zone $limit_key zone=bot:10m rate=200r/m;
limit_req_status 429;
limit_conn_zone $limit_key zone=connperip:10m;
limit_conn_status 429;
...
location @discourse {
limit_conn connperip 20;
limit_req zone=flood burst=12 nodelay;
limit_req zone=bot burst=100 nodelay;
...
}
nginx 配置为在达到速率限制时记录错误,我们确实看到了一些日志消息 - 但没有一条来自白名单 IP。尽管如此,我们仍然收到大量来自白名单 IP 的 429 错误。请求的 URL 是用户配置文件(例如 /users/foo.json)。Discourse 本身是否存在某种速率限制?
2 个赞
MrBuBBLs
(Philippe Boblet)
2
您好,Nginx 确实如您所述在管理速率限制,但 Discourse 也有自己的应用程序级别速率限制管理方式。Sam 有一篇关于此的有趣文章:
我唯一想知道的是,我们是否真的可以通过例外情况(即通过这些规则将 IP 列入白名单)来限制速率。我还在寻找方法…… 
MrBuBBLs
(Philippe Boblet)
3
好的,我觉得我有点眉目了:
也许 DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS 正是我们需要的东西 
1 个赞
我也遇到了每分钟 60 次 API 调用速率限制的问题,似乎无法解决。我已经设置了所有这些:
- DISCOURSE_MAX_REQS_PER_IP_MODE=none
- DISCOURSE_MAX_USER_API_REQS_PER_MINUTE=20000
- DISCOURSE_MAX_USER_API_REQS_PER_DAY=30000
- DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE=20000
- DISCOURSE_MAX_REQS_PER_IP_PER_MINUTE=20000
- DISCOURSE_MAX_REQS_PER_IP_PER_10_SECONDS=2000
- DISCOURSE_MAX_ASSET_REQS_PER_IP_PER_10_SECONDS=2000
- DISCOURSE_SKIP_PER_IP_RATE_LIMIT_TRUST_LEVEL=0
- DISCOURSE_MAX_ADMIN_API_REQS_PER_KEY_PER_MINUTE=20000
- DISCOURSE_MESSAGE_BUS_MAX_BACKLOG_SIZE=1000
- DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS=....
我知道不是 nginx 的问题,因为我收到了“您执行此操作的次数过多”的消息,这意味着 Discourse 的 RateLimiter 正在处理它。
您找到解决方案了吗?
2 个赞