バックアップファイルをアップロードする際のレート制限の問題 / レート制限を無効にできません

既存の Discourse インスタンスを、現在の場所から AWS EC2 VM に移行しています。

サイトは Amazon ロードバランサーの後ろにあります。すでに適切な set_real_ip_from ディレクティブで app.yml を正常に調整しており、NGINX はロードバランサーの IP を認識しています。ユーザーの最後の IP を確認すると実際の IP が表示されるため、これが機能していることはわかっています。

しかし、375 MB のバックアップを古いサーバーからアップロードしようとすると、ファイルが約 35% アップロードされたときに新しいサイトが 429 エラーを出し始め、アップロードプロセスが失敗します。429 レスポンスのヘッダーには「discourse-rate-limit-error-code: id_10_secs_limit」と表示されます。

これは驚くべきことでした。ブラウザのデベロッパーツールウィンドウを「ネットワーク」タブで開いており、たくさんの小さなチャンクが比較的速くアップロードされているのを見ました(おそらく 5 MB だったと思います)。私は高速な 200mbps のインターネット接続を使用しているため、デフォルトのレートリミッター設定では速すぎるだけでしょうか?それとも、管理タスクは通常プライベートネットワークから実行されることが期待されていましたか(私の AWS セットアップでは不可能です)。

しかし、まだあります! app.yml から「templates/web.ratelimited.template.yml」行をコメントアウトしてアプリを再構築することでレートリミッターを無効にしようとしましたが、うまくいきませんでした。ファイルが約 35% アップロードされたときに、まだ 429 エラーが発生しました。

そこで、すぐに以下の環境変数を app.yml ファイルに追加し、再構築したところ、ようやく復元するバックアップをアップロードできるようになりました。

DISCOURSE_MAX_REQS_PER_IP_MODE: none
DISCOURSE_MAX_REQS_PER_IP_PER_10_SECONDS: 1000

これらはレートリミッターの設定だと思いますので、レートリミッターが無効になっているはずなのに、これらの設定に応答するものがあるのは奇妙でした。

結論として、以下の点についてガイダンスをいただければ幸いです。

  1. レートリミッターは、このようなバックアップアップロードをブロックすべきでしょうか?
  2. その行をコメントアウトしてアプリを再構築したときに、レートリミッターが無効にならなかったのはなぜですか?

ありがとうございます!

バックアップをアップロードしようとしている場合は、scp を使用するか、S3 に配置してください。

「scp を使用する」とは、ファイルを直接 VM に転送し、その後 Discourse が見つけられる特定のフォルダーに配置することを意味しますか?試していませんが、その特定のフォルダーは /var/discourse/shared/standalone/backups/default のようになりますか?

また、S3 を使用すると Amazon のロードバランサーを本当にバイパスできますか?

ありがとうございます!

「いいね!」 1

そのフォルダが存在する場合、おそらくそこでしょう。

はい、できます。

「いいね!」 1

デフォルトの復元ガイドでは default フォルダの作成が求められているため、存在しない場合でも手動で作成できます。

参照: Restore a backup from the command line

「いいね!」 2