グローバルレートリミットとスロットリングの利用可能な設定

Discourse には、サイト管理者が設定できる 3 種類のグローバルレート制限が同梱されています。

グローバル IP ごとのレート制限

これらの制限は、Discourse アプリケーションにアクセスするすべてのユニークな IP アドレスに適用されます (ファイルシステムや CDN から直接提供されるファイルは除外されます)。

デフォルトでは、このレート制限は有効になっています。無効にするか、レポートモードに設定することができます。

DISCOURSE_MAX_REQS_PER_IP_MODE: デフォルトは block で、このレート制限が標準で適用されます。(その他のオプションは warnwarn+blocknone です)

DISCOURSE_MAX_REQS_PER_IP_PER_MINUTE: 1 分あたりの IP ごとのリクエスト数 (デフォルトは 200)

DISCOURSE_MAX_REQS_PER_IP_PER_10_SECONDS: 10 秒あたりの IP ごとのリクエスト数 (デフォルトは 50)

DISCOURSE_MAX_ASSET_REQS_PER_IP_PER_10_SECONDS: 10 秒あたりのアセット (アバター/CSS) の IP ごとのリクエスト数 (デフォルトは 200)

DISCOURSE_MAX_REQS_RATE_LIMIT_ON_PRIVATE: プライベート IP が Discourse にアクセスする際にレート制限を適用するかどうか。デフォルトは false です。

DISCOURSE_SKIP_PER_IP_RATE_LIMIT_TRUST_LEVEL: このトラストレベル以上のユーザーに対して、IP 制限ではなくユーザーごとの制限を使用するかどうか (デフォルトは 1)

DISCOURSE_MAX_REQS_PER_IP_EXCEPTIONS: IP ごとのレート制限から除外する IP アドレスまたは CIDR ブロックのスペース区切りのリスト。例: 14.15.16.32/27 216.148.1.2

ユーザー API レート制限

モバイルアプリケーションは、ユーザーに代わって Discourse にアクセスするためにデバイスごとにユーザー API キーを取得します (オープンプロトコルを使用)。これらの API キーは非常に厳しく制限されています。

DISCOURSE_MAX_USER_API_REQS_PER_MINUTE: デフォルト 20
DISCOURSE_MAX_USER_API_REQS_PER_DAY: デフォルト 2880

管理者 API レート制限

管理者 API キーは、yoursite.com/admin/api/keys ページから生成できます。これらのキーはユーザーの代理として操作できますが、生成には管理者権限が必要です。すべてのキー間で共有される 1 分あたり 60 リクエストの制限があります。

自己ホスト型ユーザーは、app.yml ファイルでこれを変更できます。ホスト型のお客様は、ホスティングプロバイダーに連絡する必要があります。

DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE : 60

Data Explorer プラグイン API レート制限

DISCOURSE_MAX_DATA_EXPLORER_API_REQ_MODE: デフォルトは warn で、このレート制限が標準で適用されます。(その他のオプションは blockwarn+blocknone です)

DISCOURSE_MAX_DATA_EXPLORER_API_REQS_PER_10_SECONDS: 2

注: Data Explorer UI 経由で行われたリクエストは、レート制限のカウントには含まれません。

レート制限に達してスロットリングされた場合はどうすればよいですか?

API をプログラムで利用していて、429 ステータスコードのスロットリング応答が返された場合は、それに従い速度を落とす必要があります。

エンドユーザーとしては、レート制限を経験することはほとんどないはずですが、もし経験した場合は速度を落としてください。これは、50 個のタブを素早く開くような操作でトリガーされる可能性があります。

ファイアウォールとプロキシに関する警告! :warning:

リバースプロキシを実行している場合で設定が不適切な場合、Discourse はすべてのリクエストが単一の IP アドレスから来ていると誤認する可能性があり、すぐにレート制限に達する可能性が非常に高いです。リバースプロキシが IP を正しく転送するように設定されていることを確認してください。

これらの制限を変更するにはどうすればよいですか?

制限を変更するには、app.yml ファイルの env セクションに変更したい内容を追加します。

:discourse: Discourse によってホストされており、Enterprise プランをご利用の場合は、これらの制限のいずれかを調整する必要がある場合は team@discourse.org までご連絡ください。

グローバルレート制限は、starter、pro、または business プランでは調整できません。

「いいね!」 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

実際には、これらの設定の1つ以上を指定する必要がないため、存在しませんでした。

my script は、元の101行目からわかるように、常に Retry-After ヘッダーを尊重していました。

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

しかし、この同じスクリプトに対して、1日の異なる時間に実行されるように複数のサービスユニットをスケジュールしていたため、このヘッダーは不必要に大きくなっていました。

したがって、mail-receiver を介したデフォルトの改善されたメール配信可能性からのこれらの設定のいくつかは、依然として重要です。