Zeitweise auftretender HTTP 502-Fehler mit Amazon (AWS) Load Balancher und Apache

Zeitweise auftretender HTTP 502-Fehler mit Amazon (AWS) Load Balancher und Apache

Ich habe in AWS einen Load Balancer eingerichtet, der den Datenverkehr an einen Apache-Ubuntu-Server weiterleitet.

Wenn ich zu meiner URL navigiere, läuft manchmal alles reibungslos. Dann klicke ich auf die Schaltfläche „Aktualisieren“ und beim Herunterladen einiger Dateien erhalte ich 502-Fehler. Es sind jedes Mal andere Dateien.

Dann klicke ich erneut auf „Aktualisieren“ und alles läuft einwandfrei.

Ich bin derzeit der Einzige, der den Server nutzt.

Mein Load Balancer ist folgendermaßen eingerichtet:

  • Verfügbarkeitszonen: us-east-1a und us-east-1b
  • Sicherheitsgruppen: Port 80 und 443 geöffnet
  • Listener: Port 80 leitet auf Port 443 um, Port 443 leitet an mein Ziel weiter

Meine Zielgruppe ist wie folgt konfiguriert:

  • Zieltyp: Instanz
  • Protokoll: HTTP: 80
  • Load Balancer: Mein Load Balancer-Name
  • Ziele registrieren: Ich habe in jeder Zone 1 Instanz laufen.

Meine Auto Scaling-Gruppe ist folgendermaßen konfiguriert:

  • Gewünschte Kapazität: 2
  • Mindestteilnehmerzahl: 2
  • Maximale Kapazität: 5
  • Verfügbarkeitszonen: us-east-1a, us-east-1b

Mein Apache-Server ist mit den Standardinstallationswerten konfiguriert, plus:

  • KeepAlive Ein
  • Zeitüberschreitung 120
  • KeepAliveTimeout 120
  • MaxKeepAliveAnfragen 100
  • AcceptFilter http keine
  • AcceptFilter https keine

Ich bin kein Server-Typ, sondern Programmierer, also weiß ich wirklich nicht, was ich überprüfen soll. Ich dachte, die Konfiguration eines Load Balancers wäre unkompliziert ...

Vielen Dank für Ihre Hilfe

BEARBEITEN 27.08.2020 15:39

Ich habe die Protokolle im VPC und im Load Balancer aktiviert und meine Seite aktualisiert. Bei einer bestimmten Datei ist ein 502-Fehler aufgetreten.

In den Load Balancer-Protokollen sehe ich den Eintrag 502 für die spezifische Datei. Hier ist der Eintrag - JSON-formatiert - in dem ich alle sensiblen Daten ersetzt habe

[
  {
    "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": "-"
  }
]

Ich weiß nicht, ob Ihnen diese Daten helfen können, mir zu helfen!

BEARBEITEN 2020-08-31 (1)

Ich habe die beiden VMs in der Firewall geöffnet, um direkt darauf zuzugreifen. Wenn ich direkt auf die einzelnen Server zugreife, erhalte ich die 502-Fehler überhaupt nicht. Wenn ich über den Load Balancer zugreife, erhalte ich die 502-Fehler.

BEARBEITEN 2020-08-31 (2)

Ich habe meinen Load Balancer geändert, um den HTTP-Verkehr an die Instanz zu leiten, anstatt ihn an Port 443 umzuleiten.

Auf Port 80 bekomme ich keine 502-Fehler. Ich habe viele Male einen Hard-Refresh durchgeführt und keine 502-Fehler bekommen. Sobald ich mit https auf den Load Balancer zugreife, bekomme ich 502-Fehler. Ich erinnere mich, dass ich keine 502-Fehler bekomme, wenn ich direkt mit https auf die VM zugreife.

Antwort1

Dabei bin ich auf diesen Forumsbeitrag gestoßen: AWS-Entwicklerforum

Der letzte Eintrag gab mir tatsächlich die Antwort:

Stellen Sie sicher, dass Sie Apaches Event-MPM-Modul (Standard) nicht verwenden, wenn Sie sich hinter einem ALB/ELB befinden. Es schließt Verbindungen dynamisch. Versuchen Sie es mit Worker-MPM.

Ich habe meine Apache-Konfiguration geändert, um Worker-MPM zu verwenden, und hatte bisher keine 502-Fehler.

Antwort2

Ich habe sowohl Worker- als auch Event-MPMs ausprobiert und keines davon hat den zufälligen 502-Fehler vollständig beseitigt. Schließlich bin ich auf Prefork-MPM umgestiegen und das hat das Problem für mich behoben. Dies ist auf Apache in der Mitte zwischen ALB und Tomcat.

verwandte Informationen