Ursachen und Lösungen für die Front-End-Ausnahme 502 Bad Gateway

Ursachen und Lösungen für die Front-End-Ausnahme 502 Bad Gateway

502 Bad Gateway: Wenn der Server als Gateway oder Proxy fungiert, greift er auf den nächsten Server zu, um die Anforderung abzuschließen, der Server gibt jedoch eine ungültige Antwort zurück. Die Lösung lautet: Aktualisieren Sie die Webseite oder bereinigen Sie die Cache-Dateien des Computers und öffnen Sie dann die Webseite, die Sie öffnen möchten. Im Allgemeinen funktioniert diese Methode, schließt jedoch nicht aus, dass die von Ihnen besuchte Webseite blockiert ist. Wenn die von Ihnen besuchte Webseite blockiert ist, ist sie nutzlos, egal wie Sie sie aktualisieren.

502 Bad Gateway Fehlerbildung

1. Was ist der 502 Bad Gateway-Fehler?

Einfach ausgedrückt ist 502 ein Fehlercode für ein fehlerhaftes Gateway.

2. Ursachen für 502-Fehler

Verbindungstimeout. Wir haben eine Anfrage an den Server gesendet. Da der Server derzeit zu viele Verbindungen hat, kann der Server keine normale Antwort geben, was zu diesem Fehlertyp führt:

Grund 1: DNS-Caching

DNS-Caching. Der häufigste Grund hierfür ist, dass Sie eine Site wie Facebook ohne VPN besuchen.

Zu diesem Zeitpunkt ist es natürlich nicht zugänglich, aber auf dem lokalen Computer bleibt ein Puffer übrig.

Normalerweise ist dieser Zustand innerhalb weniger Minuten behoben. Sie können auch versuchen, ipconfig /flushdns in einem DOS-Fenster auszuführen. Dieser Befehl leert den DNS-Cache.

Der zweite Grund: Browser-Proxy

In Ihrem Browser ist ein Proxy aktiviert. Denken Sie unbedingt daran, den Proxy auszuschalten.

Der dritte Grund: DNS wird gekapert

Der DNS wurde gekapert. Selbst wenn Sie einen fremden DNS verwenden, wird dieser gekapert. Auf einige Maschinen kann über VPN zugegriffen werden, auf andere nicht. Und die Ursachen Proxy, Firewall und lokales Netzwerk wurden ausgeschlossen. Pingen Sie jetzt Remote-Websites wie beispielsweise Facebook an. Die unzugängliche Maschine erhält normalerweise eine seltsame IP-Adresse, die von nirgendwo angepingt werden kann. Die IP-Adresse der erreichbaren Maschine kann von der nicht erreichbaren Maschine direkt abgerufen und auch angepingt werden. In diesem Fall können wir den DNS des VPN-Servers entfernen.

Wechseln Sie zu einem anderen DNS. Im Windows-System können Sie in den Eigenschaften der lokalen Netzwerkverbindung den Standard-DNS entfernen und einen fremden DNS, beispielsweise den von Google, auswählen. oder OpenDNS.

3.502 HTTP-Zyklusfehler

Jeder Client (wie ein Webbrowser oder unser CheckUpDown-Roboter) kommuniziert mit Ihrem Webserver, indem er die folgende Schleife durchläuft:

Ermitteln Sie die IP-Adresse Ihrer Website aus dem IP-Namen (dem führenden „http://“ in der URL Ihrer Website). Diese Suche (Konvertierung von IP-Namen in IP-Adressen) wird von Domain Name Servern (DNSs) bereitgestellt.

Öffnen Sie eine IP-Socket-Verbindung zu dieser IP-Adresse. Schreibt einen HTTP-Datenstrom über diesen Socket.

Empfangen Sie mit der Antwort einen HTTP-Datenstrom von Ihrem Webserver. Dieser Datenstrom enthält die vom HTTP-Protokoll generierten Statuscodewerte. Analysieren Sie diesen Datenstrom nach Statuscodes und anderen nützlichen Informationen.

Dieser Fehler tritt im letzten Schritt auf, wenn der obige Client einen HTTP-Statuscode empfängt, der seiner Bestätigung nach „502“ lautet.

4. 502-Fehler beheben

Im Allgemeinen ist dieses Problem auf eine schlechte IP-Kommunikation zwischen den Backend-Computern zurückzuführen, einschließlich der Website auf dem Webserver, auf die Sie möglicherweise zugreifen möchten. Bevor Sie dieses Problem analysieren, sollten Sie Ihren Browser-Cache vollständig leeren.

Wenn dieses Problem auf jeder Website auftritt, die Sie beim Surfen im Internet besuchen, gibt es zwei Möglichkeiten:

  • 1) Ihr ISP hat einen schwerwiegenden Geräteausfall/eine Überlastung
  • 2) Es liegt ein Problem mit der internen Internetverbindung vor, beispielsweise eine nicht ordnungsgemäß funktionierende Firewall.

Im ersten Fall kann Ihnen nur Ihr ISP helfen. Im zweiten Fall liegt es an Ihnen, alle Probleme zu lösen, die Ihren Internetzugang verhindern.

Wenn dieses Problem nur bei einigen der von Ihnen besuchten Websites auftritt, liegt das Problem höchstwahrscheinlich bei einer dieser Websites vor, deren Hardware nicht richtig funktioniert oder überlastet ist. Wenden Sie sich an den Siteadministrator.

5. So lösen Sie das Problem des 502 Bad Gateway

Die einfachste Methode: STRG+F5 Force Refresh

Die beste Lösung ist natürlich, es auf dem Server zu machen, was aber nicht für jeden möglich ist, also welche Lösung haben wir? Um es einfach auszudrücken, es ist sehr einfach, nämlich - Aktualisieren (nicht nur ein normales Aktualisieren)

Das Prinzip der Aktualisierung: Viele Leute wissen möglicherweise nicht, dass es zwei Arten der Aktualisierung gibt. Das sogenannte Aktualisieren bedeutet eigentlich, Daten vom Server auf den lokalen Festplattenbrowser herunterzuladen und dann Daten von der lokalen Festplatte in den Browser zu lesen, um sie uns anzuzeigen.

  • ① Einfache Aktualisierung: Klicken Sie auf „Aktualisieren“ oder verwenden Sie die Tastenkombination F5. Die einfache Aktualisierung ruft nur Daten von der lokalen Festplatte in den Browser ab und sendet keine erneute Anforderung an den Server. Die meisten Benutzer aktualisieren die Seite meistens auf diese Weise, und wenn ein 502-Fehler auftritt, hat dies keine Auswirkungen.
  • ② Vom Server aktualisieren: Wenn Sie direkt auf den Weblink klicken, den Sie erneut durchsuchen möchten, werden Sie feststellen, dass die Seite, die gerade 502 Bad Getway angezeigt hat, jetzt normal durchsucht werden kann! Verstehen Sie die Logik? Wenn Sie auf den Link der Webseite klicken, die Sie durchsuchen möchten, werden die Daten erneut vom Server heruntergeladen. Die Lösung besteht darin, vom Server aus zu aktualisieren: Tastenkombination Strg+F5, wodurch die Anforderung erneut an den Server gesendet wird. Wenn der Server Ihnen normal antworten kann, können Sie die Seite sehen.

Anbei: Ursachen und Lösungen für den Nginx 502 Bad Gateway-Fehler

Ursachen und Lösungen für den Nginx 502 Bad Gateway-Fehler

Der Nginx 502 Bad Gateway-Fehler ist mir schon mehrmals begegnet. Ich werde ihn hier zur Erinnerung notieren.

Es gibt viele Situationen, in denen 502-Fehler auftreten können. Lassen Sie uns über jede Situation einzeln sprechen.

1. Der FastCGI-Puffer ist zu klein eingestellt

Wenn ein Fehler auftritt, suchen Sie zuerst nach der nginx-Protokolldatei im Verzeichnis /var/log/nginx. Der folgende Fehler wird im Protokoll gefunden.

17.01.2013 13:33:47 [Fehler] 15421#0: *16 Upstream hat beim Lesen des Antwortheaders vom Upstream einen zu großen Header gesendet

Nachdem ich die Informationen überprüft hatte, stellte ich fest, dass ein Fehler im Nginx-Puffer vorliegt und die Seiten auf unserer Website möglicherweise zu viel Puffer verbrauchen.

Ich habe online nach einer Lösung gesucht und auf einer fremden Website eine Methode zum Erhöhen des Puffers gefunden, die das Nginx 502 Bad Gateway-Problem vollständig gelöst hat. So geht's:

http {
    ...
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
    ...
}

Bitte erhöhen Sie die beiden oben genannten Konfigurationselemente entsprechend der Situation des Servers und der Website.

2. Der Proxy-Puffer ist zu klein eingestellt

Wenn Sie den Reverse-Proxy von Nginx verwenden und der Header zu groß ist und den Standardwert von 1 KB überschreitet, wird der oben erwähnte „Upstream Send Too Big Header“ ausgelöst (um es einfach auszudrücken: Nginx sendet die externe Anforderung zur Verarbeitung an das Backend, und der vom Backend zurückgegebene Header ist zu groß, sodass Nginx ihn nicht verarbeiten kann, was zu 502 führt).

Server {
        hören Sie 80;
        Servername *.lxy.me;
 
        Standort / {
 
##################Fügen Sie diese 3 Zeilen hinzu: proxy_buffer_size 64k;
            Proxy-Puffer 32 32k;
            Proxy_Busy_Buffer_Größe 128k;
#################Fügen Sie diese 3 Zeilen hinzu: proxy_set_header Host $host;
            Proxy_Set_Header X-Real-IP $Remote_Addr;
            proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
............
}

3. Die Standardanzahl der PHP-CGI-Prozesse ist zu gering

Wenn während der Installation und Verwendung ein 502-Fehler auftritt, liegt dies normalerweise daran, dass die Standardanzahl der php-cgi-Prozesse 5 beträgt. 502 kann durch unzureichende phpcgi-Prozesse verursacht werden. Sie müssen /usr/local/php/etc/php-fpm.conf ändern und den max_children-Wert entsprechend erhöhen. Es ist auch möglich, dass der max_requests-Wert nicht ausreicht. Es ist zu beachten, dass diese beiden Konfigurationselemente viel Speicher beanspruchen. Bitte stellen Sie sie entsprechend der Serverkonfiguration ein. Andernfalls könnte es den gegenteiligen Effekt haben.

4. PHP-Ausführungstimeout

PHP-Ausführungstimeout, ändern Sie /usr/local/php/etc/php.ini und ändern Sie max_execution_time auf 300

5. Nginx-Wartezeit-Timeout

Die Ausführungszeit einiger PHP-Programme überschreitet die Wartezeit von Nginx. Sie können die Timeout-Zeit von FastCGI in der Konfigurationsdatei nginx.conf entsprechend erhöhen.

http {
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  ......
  }

So beheben Sie Probleme mit dem fehlerhaften Nginx 502-Gateway

Einige Websites, die auf Nginx laufen, erhalten manchmal den Fehler „502 Bad Gateway“, manchmal sogar häufig. Nachfolgend sind einige vom Herausgeber gesammelte und sortierte Methoden zur Fehlerbehebung beim Nginx 502-Fehler als Referenz aufgeführt:

Es gibt viele Gründe für Nginx 502-Fehler, die durch Probleme mit dem Backend-Server im Proxy-Modus verursacht werden. Bei diesen Fehlern handelt es sich im Allgemeinen nicht um Probleme von nginx selbst, die Ursachen müssen im Backend gesucht werden! Aber nginx hat die ganze Schuld für diese Fehler auf sich genommen, was die Nginx-Promoter wirklich in Frage stellt. Bedeutet das aus sprachlicher Sicht schließlich „schlechtes Gateway“? Ist es nicht einfach schlechtes Nginx? Wenn Leute, die das Problem nicht verstehen, das sehen, werden sie die Schuld direkt auf nginx schieben. Ich hoffe, dass die Fehlermeldung in der nächsten Version von nginx etwas freundlicher wird, zumindest nicht das einfache 502 Bad Gateway, das es jetzt hat, und nicht vergisst, seinen eigenen Namen anzugeben.

Nginx 502 Auslösebedingungen

Am häufigsten tritt ein 502-Fehler auf, wenn der Backend-Host abstürzt. In der Upstream-Konfiguration gibt es eine Konfiguration: proxy_next_upstream. Diese Konfiguration gibt an, welche Art von Fehler nginx beim Abrufen von Daten von einem Backend-Host feststellt und diese an den nächsten Backend-Host weiterleitet. Sie enthält alle Situationen, in denen 502 auftritt. Der Standardwert ist Fehler-Timeout. „Fehler“ bedeutet Absturz, Verbindungsabbruch usw., und „Timeout“ bedeutet eine Zeitüberschreitung bei Leseüberlastung, was leichter zu verstehen ist. Normalerweise schreibe ich das Ganze:

Proxy_next_upstream-Fehler, Timeout, ungültiger Header, http_500, http_503;

Aber jetzt muss ich möglicherweise das Element http_500 entfernen. http_500 gibt an, dass das Backend, wenn es einen 500-Fehler zurückgibt, zu einem anderen Host umleitet. Wenn im Backend-JSP ein Fehler auftritt, werden eine Reihe von Stacktrace-Fehlerinformationen gedruckt, die jetzt jedoch durch 502 ersetzt werden. Aber die Programmierer im Unternehmen waren anderer Meinung. Sie glaubten, dass es einen Fehler in nginx gab. Ich hatte wirklich keine Zeit, ihnen das Prinzip von 502 zu erklären ...

Der 503-Fehler kann beibehalten werden, da das Backend normalerweise Apache Resin ist. Wenn Apache abstürzt, ist dies ein Fehler, aber wenn Resin abstürzt, ist es nur 503, sodass es weiterhin beibehalten werden muss.

Lösung

Wenn Sie auf ein 502-Problem stoßen, können Sie dessen Lösung priorisieren, indem Sie die folgenden beiden Schritte ausführen.

1. Prüfen Sie, ob die aktuelle Anzahl an PHP-FastCGI-Prozessen ausreicht:

netstat -anpo | grep "php-cgi" | wc -l

Wenn die Anzahl der tatsächlich verwendeten FastCGI-Prozesse nahe an der voreingestellten Anzahl von FastCGI-Prozessen liegt, bedeutet dies, dass die Anzahl der FastCGI-Prozesse nicht ausreicht und erhöht werden muss.

2. Die Ausführungszeit einiger PHP-Programme überschreitet die Wartezeit von Nginx. Sie können die Timeout-Zeit von FastCGI in der Konfigurationsdatei nginx.conf entsprechend erhöhen, zum Beispiel:

http {
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  ......
  }
  ......

Wenn das Memory_limit in php.ini zu niedrig eingestellt ist, tritt ein Fehler auf. Ich habe das Memory_limit in php.ini auf 64 MB geändert, nginx neu gestartet und festgestellt, dass es behoben war. Es stellte sich heraus, dass PHP nicht genügend Speicher hatte.

Wenn diese Änderung das Problem immer noch nicht löst, können Sie die folgenden Lösungen verwenden:

1. Max-Children und Max-Requests

Nginx php(fpm) xcache läuft auf einem Server mit einem durchschnittlichen täglichen Datenverkehr von etwa 3 Millionen PV.

In letzter Zeit tritt häufig die folgende Situation auf: PHP-Seiten werden sehr langsam geöffnet, die CPU-Auslastung fällt plötzlich auf ein sehr niedriges Niveau, die Systemlast steigt plötzlich auf ein sehr hohes Niveau und beim Überprüfen des Datenverkehrs der Netzwerkkarte wird festgestellt, dass dieser plötzlich auf ein sehr niedriges Niveau gefallen ist. Diese Situation dauerte nur wenige Sekunden, bevor sie sich wieder beruhigte.

Die Überprüfung der php-fpm-Protokolldateien ergab einige Hinweise.

30. Sep 08:32:23.289973 [HINWEIS] fpm_unix_init_main(), Zeile 271: getrlimit(nofile): max:51200, cur:51200 30. Sep 08:32:23.290212 [HINWEIS] fpm_sockets_init_main(), Zeile 371: verwende geerbten Socket fd=10, „127.0.0.1:9000″ 30. Sep 08:32:23.290342 [HINWEIS] fpm_event_init_main(), Zeile 109: libevent: verwende epoll 30. Sep 08:32:23.296426 [HINWEIS] fpm_init(), Zeile 47: fpm läuft, PID 30587

Vor diesen Sätzen stehen über 1.000 Zeilen Protokoll zum Schließen und Öffnen von Kindern.

Es stellt sich heraus, dass php-fpm einen Parameter max_requests hat, der die maximale Anzahl von Anfragen angibt, die jedes untergeordnete Element verarbeiten kann, bevor es heruntergefahren wird. Die Standardeinstellung ist 500. Da PHP die Anforderung an jedes untergeordnete Element abfragt, ist bei starkem Datenverkehr die Zeit, die jedes untergeordnete Element zum Erreichen von max_requests benötigt, nahezu gleich, was dazu führt, dass alle untergeordneten Elemente praktisch gleichzeitig geschlossen werden.

Während dieser Zeit kann nginx keine PHP-Dateien zur Verarbeitung an php-fpm übertragen, sodass die CPU-Leistung auf ein sehr niedriges Niveau sinkt (PHP muss nicht verarbeitet werden, geschweige denn SQL ausgeführt werden), während die Belastung auf ein sehr hohes Niveau steigt (untergeordnete Elemente werden geschlossen und geöffnet, nginx wartet auf php-fpm) und der Netzwerkkartenverkehr ebenfalls auf ein sehr niedriges Niveau sinkt (nginx kann keine Daten zur Übertragung an den Client generieren).

Die Lösung ist einfach: Erhöhen Sie die Anzahl der untergeordneten Elemente und setzen Sie max_requests auf 0 oder einen höheren Wert:

Öffnen Sie /usr/local/php/etc/php-fpm.conf und erhöhen Sie die folgenden beiden Parameter (je nach tatsächlicher Situation des Servers funktioniert ein zu großer Wert nicht).

<Wertname="max_children">5120</Wert> <Wertname="max_requests">600</Wert>

Starten Sie dann php-fpm neu.

2. Erhöhen Sie die Puffergröße

Ich habe das Nginx-Fehlerprotokoll geöffnet und eine Fehlermeldung wie „pstream hat beim Lesen des Antwortheaders vom Upstream einen zu großen Header gesendet“ gefunden. Nachdem ich die Informationen überprüft hatte, stellte ich fest, dass ein Fehler im Nginx-Puffer vorliegt und die Seiten auf unserer Website möglicherweise zu viel Puffer verbrauchen. Unter Bezugnahme auf die von einem Ausländer geschriebene Änderungsmethode wurde die Einstellung der Pufferkapazitätsgröße hinzugefügt und das 502-Problem vollständig gelöst. Später passte der Systemadministrator die Parameter an und behielt nur zwei Einstellungen bei: Client-Head-Puffer und FastCGI-Puffergröße.

3. request_terminate_timeout

Wenn der Fehler 502 hauptsächlich während einiger Post- oder Datenbankvorgänge und nicht während statischer Seitenvorgänge auftritt, können Sie eine der Einstellungen von php-fpm.conf überprüfen:

Anforderung_Beenden_Zeitüberschreitung

Dieser Wert ist max_execution_time, also die Ausführungszeit des Fast-CGI-Skripts.

0 Sekunden

0 s bedeutet Herunterfahren, was bedeutet, dass die Ausführung auf unbestimmte Zeit erfolgt. (Ich habe bei der Installation eine Nummer geändert, ohne darauf zu achten) Das Problem ist behoben und es treten bei längerer Ausführung keine Fehler mehr auf. Bei der Optimierung von FastCGI können Sie diesen Wert auch auf 5 s ändern, um den Effekt zu sehen.

Ein 502-Fehler kann auftreten, wenn die Anzahl der PHP-CGI-Prozesse nicht ausreicht, die PHP-Ausführungszeit lang ist oder der PHP-CGI-Prozess abbricht.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Fehlerbehebung bei der Ursache des 502 Bad Gateway-Fehlers auf dem Nginx-Server
  • Ursachen und Lösungen für den Nginx 502 Bad Gateway-Fehler
  • 4 häufige Ursachen und Lösungen für den Nginx 502 Bad Gateway-Fehler
  • Deep Dive: So beheben Sie den Nginx 502 Bad Gateway-Fehler

<<:  Eine kurze Erläuterung zu Leerzeichen und Leerzeilen im HTML-Code

>>:  CSS3 zum Erzielen eines einfachen schwebenden Hintergrundeffekts mit weißen Wolken

Artikel empfehlen

So ändern Sie den Standardspeicherort von Docker-Images (Lösung)

Aufgrund der anfänglichen Partitionierung des Sys...

Docker-Installation von Nginx Probleme und Fehleranalyse

Frage: Beim Installieren Nginx in Docker ist der ...

Beispiele für die MySQL-Verschlüsselung und -Entschlüsselung

Beispiele für die MySQL-Verschlüsselung und -Ents...

Mit Mailto ist das Senden von E-Mails im HTML-Format ganz einfach

Kürzlich habe ich dem Footer-Postfach des Kunden e...

Nachteile und sinnvolle Verwendung des MySQL-Datenbankindex

Inhaltsverzeichnis Richtige Verwendung von Indize...

MySQL 8.0.25 Installations- und Konfigurations-Tutorial unter Linux

Das neueste Tutorial zur Installation von MySQL 8...

So legen Sie eine Verzeichnis-Whitelist und eine IP-Whitelist in Nginx fest

1. Legen Sie eine Verzeichnis-Whitelist fest: Leg...

Über die Position des H1-Tags in XHTML

In letzter Zeit wurde viel über H1 diskutiert (auf...

So behandeln Sie einen Überlauf numerischer MySQL-Typen

Lassen Sie mich Ihnen nun eine Frage stellen. Was...

VScode Remote SSH-Remote-Bearbeitung und -Debugging von Code

Die neueste Insider-Version von Visual Studio Cod...

MySQL-Prozesssteuerung: IF()-, IFNULL()-, NULLIF()-, ISNULL()-Funktionen

In MySQL können Sie die Funktionen IF(), IFNULL()...