グローバルレート制限とスロットリングで利用可能な設定

Discourseには、サイト管理者によって設定可能な3つの異なるグローバルレート制限が組み込まれています。

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

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

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

DISCOURSE_MAX_REQS_PER_IP_MODE : デフォルトは block。このレート制限は初期状態で適用されます。(その他のオプションは warnwarn+blocknone

DISCOURSE_MAX_REQS_PER_IP_PER_MINUTE: IPごとの1分あたりのリクエスト数(デフォルトは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: プライベート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によってホスティングされており、エンタープライズプランを利用している場合、これらの制限のいずれかを調整する必要がある場合は team@discourse.org までご連絡ください。

グローバルレート制限は、Free、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?
Rate limit errors although IP is whitelisted
API rate limits
How to edit "hidden" site_settings?
How-to disable or tune rate limiting by ip address?
Error code 429 when utilising a Zapier integration
429 error when opening multiple topics
Why semrushbot and ahrefsbot are blocked by default?
Understanding /logs/report_js_error 429
Remove the ip limits
User API keys specification
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
Discourse REST API Documentation
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
Fetch All Posts from a Topic Using the API
Issues when I enable Component, maybe Right Sidebar Blocks?
Create and configure an API key
Direct URL for the "email me a login link" feature
Direct URL for the "email me a login link" feature
Do not see discourse/config/site_settings.yml to set USER API limits
API rate limits
Very slow discobot certificate generation on our server
Api call returns nothing when too many requests
Uncaught (in promise) error
You Have Performed this Action Too Many Times Error
Import posts through API (time delay)
Discourse-topic-organizer causing "Slow down, too Many Requests from this IP Address"
429 too many requests good or bad ? (please help)
Enable user to Generate API key
Changing/removing API rate limit with category creation
Webhook connect to post comments to WordPress working unreliably

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 を介したデフォルトの改善されたメール配信可能性からのこれらの設定のいくつかは、依然として重要です。