これは仕方のない問題かもしれません。私はすべてを試しました。どこかの配電盤で口ひげをたくわえている男がいる気がする。
問題:
Amazon EC2 でアプリケーションを実行しています。インスタンスが 1 つしかなく、ロード バランサーがない場合は、問題なく機能します。
しかし、私の本番環境では、2 つの同一のインスタンスが 1 つのロードバランサーの背後で実行されており、特定のタスク (PDF を生成してメールに添付する機能など) を実行すると、何も起こらず、ネットワークで Google 開発者ツールを使用すると、タイムアウトになると「504 Gateway Timeout」というエラーが表示されます (30 秒に設定しています)。
私のデータベースは外部で、Amazon RDS にあります。
私は思う....クライアントがログインした最初のサーバーに強制的に接続したままにすることができれば、この問題は解決されるでしょう.instance-1が接続しようとしたときに504ゲートウェイタイムアウトが発生していることを私は理解しているからです. instance-2 がタスクを実行します。
これは、負荷分散を使用している場合にのみ発生しますが、2 台のサーバーのいずれかに直接接続している場合は発生しません。
ロード バランサの設定:
- app.myapplication.com が myloadbalancerDNSname.elb.amazonaws.com を指すように、ロード バランサーのレジストラーに CRECORD がある
- ロード バランサーには 2 つの正常なインスタンスがあり、それぞれが同じリージョンにありますが、それらは異なるアベイラビリティ ゾーンにあります。
- ロード バランサーは、インスタンスと同じセキュリティ グループを使用しています (ポート 22、80、および 443 ですべての IP を許可します)。
- ロード バランサーでクロスゾーン ロード バランシングがオンになっています。
- CORS (Amazon S3 内) は、* から * への GET、POST、PUT、DELETE が有効になっています (これがどのようにインスタンスに関連付けられているのかわかりませんが、指示に従って実行しました)
- ロードバランサーには、次のように構成されたリスナーがあります。
- ロード バランサ プロトコル:HTTP ロード バランサ ポート:80 インスタンス プロトコル:HTTP インスタンス ポート:80
- ロード バランサー プロトコル:HTTPS ロード バランサー ポート:443 インスタンス プロトコル:HTTP インスタンス ポート:80 (証明書プロバイダーごとに正しく選択された暗号、および SSL フィールドは 100% 確実に正しい)
いくつかのアイデア:
そうは言っても、私は HTTPS ではなく、通常の HTTP でテストしています。SSL が適切にセットアップされていると確信していません。私が疑わしい理由は、https ://app.myapplication.com をキー入力しようとすると、Google 開発者ツールの [ネットワーク] タブに "(failed) net::ERR_CONNECTION_CLOSED" というエラーが表示されるためです。ただし、通常の HTTP を使用しても問題が発生するため、これは適用できないはずです。SSL のトラブルシューティングは後で行うことができます。
繰り返しますが、私の問題は、一部の機能を使用するときに「504 Gateway Timeout」の問題が発生することですが、ページをロードする代わりにランダムに発生することもあります (ただし、めったにありません)。この 504 問題は、ロード バランシングを使用している場合にのみ発生しますが、2 つのインスタンスのいずれかに直接接続している場合には発生しません。
どの質問をすればよいかわかりません。すべてのドキュメントを T までたどり、Web 上のすべての提案を 2 回、3 回チェックしましたが、何もしていないからです。