Amazon (AWS) ロードバランサーと Apache で断続的に HTTP 502 エラーが発生する

Amazon (AWS) ロードバランサーと Apache で断続的に HTTP 502 エラーが発生する

トラフィックを 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 上にあります。

関連情報