Wie löst man den Nginx-Fehler "(110: Connection timed out) while reading response header from upstream"?

Veröffentlicht 27. August 2024

Problem: Nginx-Verbindungszeitüberschreitung

Der Fehler "(110: Connection timed out) while reading response header from upstream" in Nginx tritt auf, wenn der Server keine schnelle Antwort von einem Upstream-Dienst erhält. Dieses Problem kann Webanwendungen beeinträchtigen und zu langsamer Inhaltsauslieferung führen. Benutzer können langsame Seitenladungen erleben oder keinen Zugriff auf Teile einer Website haben, wenn dieser Fehler auftritt.

Lösungen für das Nginx-Upstream-Timeout-Problem

Anpassen der Nginx-Timeout-Einstellungen

Um das Nginx-Upstream-Timeout-Problem zu beheben, können Sie die Timeout-Einstellungen ändern. Passen Sie die proxy_read_timeout-Direktive in Ihrer Nginx-Konfiguration an. Diese Einstellung steuert, wie lange Nginx auf eine Antwort vom Upstream-Server wartet. Eine Erhöhung dieses Wertes gibt dem Upstream-Server mehr Zeit zum Antworten, bevor Nginx die Verbindung beendet.

Sie können auch die Direktiven proxy_connect_timeout und proxy_send_timeout festlegen. Der proxy_connect_timeout legt fest, wie lange Nginx auf eine Verbindung zum Upstream-Server wartet. Der proxy_send_timeout bestimmt, wie lange Nginx beim Senden einer Anfrage an den Upstream-Server wartet.

Optimierung der Backend-Server-Leistung

Sie können auch die Leistung Ihrer Backend-Server verbessern. Beginnen Sie damit, langsame Antwortzeiten von Upstream-Servern zu beheben. Dies kann die Beschleunigung von Datenbankabfragen, das Caching von Daten oder das Hinzufügen von mehr Serverressourcen zur Bewältigung höherer Lasten umfassen.

Die Beschleunigung von API- und PHP-Verarbeitung kann ebenfalls Timeout-Fehler reduzieren. Sie können Opcode-Caching für PHP verwenden, Ihren Anwendungscode verbessern und APIs effizienter gestalten. Diese Schritte können zu schnelleren Antwortzeiten und weniger Timeout-Problemen führen.

Fortgeschrittene Fehlerbehebung für Nginx-Controller-Fehler

Untersuchung von Nginx-Ingress-Controller-Problemen

Wenn Sie auf Nginx-Upstream-Timeout-Fehler stoßen, überprüfen Sie den Nginx-Ingress-Controller. Sehen Sie sich kürzlich vorgenommene Konfigurationsänderungen an. Überprüfen Sie Ihre Nginx-Konfigurationsdateien auf Änderungen, die das Timeout-Problem verursachen könnten. Konzentrieren Sie sich auf Einstellungen für Upstream-Server, Lastverteilung und Proxy-Konfigurationen.

Überprüfen Sie den Status des Nginx-Prozesses. Verwenden Sie die Befehlszeile, um zu sehen, ob der Nginx-Dienst läuft. Suchen Sie in den Nginx-Fehlerprotokollen nach Fehlermeldungen, die das Timeout-Problem erklären könnten.

Behebung von Nginx-Reload-Auslösern

Häufige Nginx-Neustarts können zu Timeout-Fehlern führen. Finden Sie die Ursachen dieser Neustarts, indem Sie Ihre Systemprotokolle auf Muster oder Ereignisse überprüfen, die sie auslösen. Häufige Ursachen sind Konfigurationsänderungen, Zertifikatsaktualisierungen oder automatisierte Bereitstellungen.

Um den Bedarf an Backend-Neustarts zu adressieren, überprüfen Sie Ihre Anwendungsbereitstellungsmethode. Erwägen Sie den Einsatz von Rolling Updates oder Blue-Green-Deployments, um Ausfallzeiten und die Notwendigkeit häufiger Nginx-Neustarts zu reduzieren. Verbessern Sie außerdem Ihre Backend-Dienste, um Anfragen schneller zu bearbeiten und die Wahrscheinlichkeit von Timeouts während der Neustarts zu verringern.

Alternative Ansätze zur Behebung des Timeout-Fehlers

Implementierung von Nginx-Keepalive-Einstellungen

Die Konfiguration von keepalive_timeout in Nginx kann helfen, Timeout-Fehler zu reduzieren. Diese Einstellung bestimmt, wie lange Nginx inaktive Verbindungen offen hält. Legen Sie einen Wert basierend auf den Anforderungen Ihres Servers und den Verkehrsmustern fest. Ein typischer Ausgangspunkt ist 65 Sekunden:

keepalive_timeout 65;

Die Verwendung von proxy_http_version 1.1 und proxy_set_header connection hilft, Verbindungen zwischen Nginx und Upstream-Servern aufrechtzuerhalten. Fügen Sie diese Direktiven zu Ihrer Nginx-Konfiguration hinzu:

proxy_http_version 1.1;
proxy_set_header Connection "";

Diese Einstellungen ermöglichen es Nginx, Verbindungen wiederzuverwenden, was die Erstellung neuer Verbindungen reduziert und möglicherweise Timeout-Fehler verringert.

Überprüfung des SSL-Zertifikat-Ladens

Die Überprüfung der Gültigkeit von TLS-Zertifikaten ist wichtig bei der Fehlerbehebung von Timeout-Fehlern. Stellen Sie sicher, dass Ihre SSL-Zertifikate aktuell und korrekt installiert sind. Verwenden Sie OpenSSL, um das Ablaufdatum und die Gültigkeit des Zertifikats zu überprüfen:

openssl x509 -in zertifikat.crt -text -noout

Wenn Sie auf Probleme beim Laden von Zertifikaten stoßen, überprüfen Sie die Nginx-Fehlerprotokolle auf SSL-bezogene Fehler. Häufige Probleme sind falsche Dateiberechtigungen, nicht übereinstimmende private Schlüssel oder unvollständige Zertifikatsketten. Stellen Sie sicher, dass die Zertifikatsdateien für den Nginx-Prozess lesbar sind und dass die vollständige Zertifikatskette bei Bedarf bereitgestellt wird.

Zur Fehlerbehebung bei Problemen mit dem Laden von Zertifikaten:

  1. Überprüfen Sie die Dateiberechtigungen von SSL-bezogenen Dateien.
  2. Stellen Sie sicher, dass das Zertifikat und der private Schlüssel übereinstimmen.
  3. Bestätigen Sie, dass die vollständige Zertifikatskette bei Bedarf vorhanden ist.
  4. Überprüfen Sie die Nginx-SSL-Konfigurationsdirektiven auf Fehler.