トラフィックを Apache Ubuntu サーバーにルーティングするロードバランサーを AWS に設定しました。
URL を参照すると、すべてがうまくいくこともあります。その後、[更新] ボタンを押すと、一部のファイルをダウンロードするときに 502 エラーが発生します。毎回異なるファイルです。
その後、もう一度「更新」をクリックすると、すべて正常に戻ります。
現在、サーバーを使用しているのは私だけです。
私のロードバランサーは次のように設定されています:
- 可用性ゾーン: us-east-1a および us-east-1b
- セキュリティグループ: ポート80と443が開かれている
- リスナー: ポート 80 はポート 443 にリダイレクトされ、ポート 443 はターゲットに転送されます
私のターゲットグループは次のように構成されています。
- ターゲットタイプ: インスタンス
- プロトコル: HTTP: 80
- ロードバランサー: ロードバランサー名
- ターゲットを登録します。各ゾーンで 1 つのインスタンスが実行されています。
私の Auto Scaling グループは次のように構成されています。
- 希望人数: 2
- 最小収容人数: 2
- 最大収容人数: 5
- 可用性ゾーン: us-east-1a、us-east-1b
私の Apache サーバーは、デフォルトのインストール値に加えて、次の値で構成されています。
- キープアライブオン
- タイムアウト 120
- キープアライブタイムアウト 120
- 最大キープアライブリクエスト 100
- AcceptFilter http なし
- AcceptFilter https なし
私はサーバー担当者ではなくプログラマーなので、何をチェックすればよいのか本当にわかりません。ロード バランサーの構成は簡単だと思っていましたが...
ご協力いただきありがとうございます
編集 2020-08-27 15時39分
VPC とロードバランサーのログを有効にして、ページを更新しました。特定のファイルで 502 エラーが発生しました。
ロードバランサーのログには、特定のファイルの502エントリがあります。これは、JSON形式のエントリで、センシティブなデータを置き換えたものです。
[
{
"type": "h2",
"time": "2020-08-27T19:20:52.547402Z",
"elb": "app/web-server-load-balancer/**my-load-balancer-id**",
"client:port": "*my-ip-address*:60831",
"target:port": "10.0.0.106:80",
"request_processing_time": 0,
"target_processing_time": 0.013,
"response_processing_time": -1,
"elb_status_code": 502,
"target_status_code": "-",
"received_bytes": 45,
"sent_bytes": 610,
"request": "GET https://**my-url** HTTP/2.0",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
"ssl_cipher": "ECDHE-RSA-AES128-GCM-SHA256",
"ssl_protocol": "TLSv1.2",
"target_group_arn": "**my-target-group-arn**",
"trace_id": "Root=1-5f480794-150df3bcad7fd0ac6bdfc41c",
"domain_name": "**my-domain-name**",
"chosen_cert_arn": "session-reused",
"matched_rule_priority": 0,
"request_creation_time": "2020-08-27T19:20:52.534000Z",
"actions_executed": "forward",
"redirect_url": "-",
"error_reason": "-",
"target:port_list": "10.0.0.106:80",
"target_status_code_list": "-",
"classification": "-",
"classification_reason": "-"
}
]
これらのデータがあなたを助けるのに役立つかどうかはわかりません。
編集 2020-08-31 (1)
ファイアウォールで 2 つの VM を開いて直接アクセスしました。各サーバーに直接アクセスすると、502 エラーはまったく発生しません。ロード バランサー経由でアクセスすると、502 エラーが発生します。
編集 2020-08-31 (2)
ロードバランサーを変更して、HTTP トラフィックを 443 ポートにリダイレクトするのではなく、インスタンスにルーティングするようにしました。
ポート 80 では、502 エラーは発生しません。何度もハードリフレッシュしましたが、502 は発生しませんでした。ロード バランサーに https でアクセスするとすぐに、502 エラーが発生し始めます。VM に https で直接アクセスすると、502 エラーが発生しないことを覚えています。
答え1
私はこのフォーラムの投稿に出会いました: AWS 開発者フォーラム
最後のエントリーで実際に答えが分かりました:
ALB/ELB の背後にある場合は、Apache のイベント MPM モジュール (デフォルト) を使用していないことを確認してください。接続が動的に閉じられます。ワーカー MPM を試してください。
Apache の設定を変更してワーカー MPM を使用するようにしましたが、502 エラーは発生しませんでした。
答え2
ワーカー MPM とイベント MPM の両方を試しましたが、どちらもランダム 502 を完全に排除できませんでした。最終的に、prefork MPM に切り替えて、これで問題が解決しました。これは、ALB と Tomcat の中間にある Apache 上にあります。