Dieser Artikel kann Ihnen bei der Behebung von Problemen im Zusammenhang mit 504/502/Gateway-Fehlern helfen. Bei der Fehlerbehebung kann es hilfreich sein zu verstehen, wie die Verarbeitung zwischen nginx und PHP funktioniert, das häufig für das Hosting von Hochleistungs-Webanwendungen wie WordPress verwendet wird.
Häufig auftretende Fehler im Zusammenhang mit dieser Konfiguration:
- 504-Gateway-Zeitüberschreitung
- Gateway-Zeitüberschreitung (504)
- HTTP-Fehler 504 – Gateway-Zeitüberschreitung
- Gateway-Timeout-Fehler
- 502 schlechtes Gateway
- Schlechtes Gateway
Warum gibt es ein Gateway?
Wenn eine Anfrage über einen Webbrowser eingeht, trifft sie zuerst auf nginx, unseren leichtgewichtigen Front-End-Webserver, und nginx entscheidet dann, wohin die Anfrage gehen soll, wie ein Zugbegleiter. Nginx verarbeitet normalerweise einfachere Anfragen für Ressourcen (wie Bilder und zwischengespeicherte Seiten) selbst, während Anfragen für dynamische Seiten (wie eine WordPress-Admin-Seite oder ein Einkaufswagen) an Apache (für Modsecurity- und .htaccess-Verarbeitung) und dann an PHP gesendet werden. Es sieht so aus:
nginx -> Apache -> PHP -fpm
nginx fungiert als Gateway, das die richtigen Arten von Anfragen an Apache und PHP sendet. Wenn es „downstream“ ein Problem gibt – etwa mit Apache oder PHP – erhalten Sie ein Gateway Fehler wie 502 Bad Gateway oder 504 Gateway Timeout .
Dieses Problem kann extrem langsam ausgeführter Code oder ein tatsächliches Problem mit dem Apache- oder PHP-Dienst sein, obwohl das Problem bei unserem Hosting meistens ein Codeproblem ist.
Verwenden Sie Serverprotokolle, um weitere Informationen zu erhalten
Um die Ursache des Gateway-Fehlers zu ermitteln, überprüfen Sie die Protokolle, um zu sehen, was gemeldet wird. Manchmal melden die Protokolle einfach einen 502- oder 504-Fehler – genau wie Sie ihn im Browser sehen – was nicht hilfreich ist. Aber manchmal sehen Sie möglicherweise einen Fehler oder eine Warnung, die kurz vor dem Gateway-Fehler protokolliert wird, die genau angeben, welches Plugin oder Thema den Fehler verursacht.
Hier erfahren Sie, wie Sie mit Plesk Protokolle anzeigen. Wenn Sie diese Fehler verwenden können, um dem Problem auf den Grund zu gehen, dann tun Sie dies auf jeden Fall! Lesen Sie andernfalls weiter, um weitere Möglichkeiten zur Eingrenzung zu finden.
Hilfe! Ich kann nicht einmal auf den Admin-Bereich meiner Website zugreifen! (Wie wp-admin für WordPress)
Manchmal, wenn Sie ständig Gateway-Fehler erhalten, können Sie nicht auf den Admin-Bereich Ihrer Website zugreifen (wie wp-admin von WordPress), aber Sie finden, dass Sie dies tun müssen, um dieses Problem zu beheben. Die einzige Möglichkeit, den Zugriff wiederherzustellen, besteht darin, den Zugriff zu sperren, bis das Problem behoben ist.
Um den Zugriff zu blockieren, können Sie auf zwei Arten vorgehen:1) Blockieren Sie den Zugriff auf den bestimmten Teil der Website, der Ressourcen verschlingt, oder 2) Sie können den Zugriff auf alle IPs außer Ihrer eigenen vorübergehend blockieren, um den Zugriff wiederzuerlangen.
Zum Blockieren des Zugriffs auf alle IPs außer Ihrer eigenen (einfacher)
Melden Sie sich bei Plesk an und besuchen Sie die Apache- und Nginx-Einstellungen Seite. Unter „Zugriff auf die Website verweigern ” Geben Sie einen benutzerdefinierten Wert ein und ändern Sie ihn zu "*
„ (ohne die Anführungszeichen). Dann unter „Ausschließen ” Geben Sie Ihre eigene IP-Adresse ein und speichern Sie die Änderungen. Möglicherweise müssen Sie nach dem Speichern Ihrer Änderungen bis zu 3 Minuten warten, bis der Server neu gestartet wird (~1 Min.) und alle laufenden PHP-Prozesse ihre Zeitüberschreitung erreichen (~2 Min.).
Achten Sie darauf, diesen Block zu entfernen, wenn Sie mit der Fehlerbehebung fertig sind.
Um den Zugriff auf die ressourcenintensive Anfrage zu blockieren (komplexer)
Wenn es nur eine Seite oder Ressource auf der Website gibt, die dieses Problem verursacht (z. B. eine einzelne Seite, die langsam geladen wird), verwenden Sie die Protokolle, um diesen bestimmten Anforderungs-URI zu identifizieren. Fügen Sie dann das folgende Code-Snippet oben in Ihrer .htaccess-Datei hinzu, um die problematische Ressource (auch nur vorübergehend) zu blockieren, damit Sie auf das Admin-Panel zugreifen können. Ersetzen Sie filename\.php
mit dem tatsächlichen Anforderungs-URI, der in den Protokollen angezeigt wird (dies ist der Teil, der nach der Domäne kommt). Wenn der Dateipfad Punkte enthält, stellen Sie sicher, dass Sie ihnen einen umgekehrten Schrägstrich voranstellen, wie im Beispiel gezeigt.
<FilesMatch filename\.php> Order Allow,Deny Deny from all </FilesMatch>
Häufige Gründe für Gateway-Fehler
Die mögliche schnelle Lösung:
Wenn das Problem nur ein einmaliges Problem war (wenn Sie beispielsweise ein Skript ausgeführt haben und es nicht mehr aufhört zu laufen), besteht die Lösung darin, die zugrunde liegenden Dienste direkt neu zu starten , wodurch das Skript beendet wird.
Wenn Sie keinen Root-Zugriff auf den Server oder keinen Administratorzugriff auf Plesk haben, können Sie einen solchen Neustart oft auslösen, indem Sie Änderungen an Ihrer Website-Konfiguration in Plesk vornehmen. Versuchen Sie beispielsweise, für Ihre Domain auf die Schaltfläche „PHP-Einstellungen“ zu gehen, dort kleine Änderungen vorzunehmen (z. B. den Arbeitsspeicher von 32 MB auf 48 MB zu erhöhen) und speichern Sie dann Ihre Änderungen. Dieses Update löst einen Neustart der Apache- und PHP-Verarbeitung aus und könnte Ihren Fehler beheben!
Es kann bis zu 3 Minuten (je nach Anbieter auch länger) dauern, bis die Änderungen wirksam werden.
Wenn dies nicht hilft oder das Problem erneut auftritt, müssen Sie die folgenden möglichen Ursachen/Symptome durchgehen, um festzustellen, welche für Ihren Fall am besten geeignet sind.
Ich versuche, einen Export, Import oder großen Bericht auszuführen, der eine Weile dauert
Wenn Ihre Website normal läuft, aber jedes Mal, wenn Sie versuchen, einen großen Export, Import oder Bericht für die Daten Ihrer Website auszuführen, erhalten Sie Gateway-Fehler, weil Sie Zeitüberschreitungen erreichen, bevor der Bericht verarbeitet werden kann. Obwohl es keine supereinfache Möglichkeit gibt, dieses Problem langfristig zu beheben, gibt es eine Möglichkeit, es kurzfristig zu beheben:Erhöhen Sie vorübergehend die Zeitüberschreitungen.
Sie können dies im Plesk Control Panel tun, indem Sie die Schritte in unserem Leitfaden zum Ändern einer PHP-Einstellung befolgen. Sie müssen die Werte (sie sind in Sekunden) für max_execution_time
ändern und max_input_time
auf etwa 300, damit Prozesse 5 Minuten lang ausgeführt werden können. Vergessen Sie nicht, diese Werte wieder zurückzusetzen, nachdem Sie Ihre lang andauernde Aktion abgeschlossen haben.
Warum können Sie die Timeouts nicht einfach dauerhaft erhöhen?
Technisch gesehen können Sie dies jedoch tun, das dauerhafte Erhöhen von Timeouts wird sich sehr wahrscheinlich nachteilig auf die Leistung Ihrer Website auswirken . Timeouts werden absichtlich auf Werte wie 30 oder 60 Sekunden gesetzt:Wenn ein Prozess so lange dauert, bis er abgeschlossen ist, und Sie zu viele lang laufende Prozesse auslösen, können sie alle verfügbaren Verarbeitungsslots auffressen und Ihre gesamte Website für alle Besucher zum Erliegen bringen. Wenn Sie Ihre Timeout-Werte um 30-60 Sekunden halten, wird daher sichergestellt, dass dies höchstens so lange passieren kann.
Die Bearbeitung fast jeder Anfrage an meine Website oder Homepage dauert sehr lange
Sie werden erkennen, ob dies das Problem ist, wenn eine oder mehrere Seiten auf der Website länger als ~10 Sekunden brauchen, um überhaupt mit dem Laden zu beginnen, und Ihr Browser nichts anzeigt, bis dieser Zeitraum von über 10 Sekunden verstrichen ist.
Dafür gibt es zwei häufige Gründe:
1) Probleme mit der Codeleistung :Auf der Website wird Code ausgeführt, der nicht für die Leistung optimiert ist, oder Sie haben ein Problem. Ein Beispiel hierfür wäre eine Endlosschleife im Code oder etwas, das versucht, Millionen von Datenbankeinträgen in einer Abfrage abzurufen (anstatt sie in Stapeln abzurufen). Das erste, was Sie überprüfen sollten, ist jeglicher Code, der kürzlich zur Website hinzugefügt wurde, wie Plugins, ein neues Design, benutzerdefinierter Code usw. Sie sollten wahrscheinlich Ihren Entwickler einbeziehen, um dies einzugrenzen. Wir haben einen KB-Artikel mit einigen allgemein anerkannten Versionen davon, aber wenn Sie die Ursache mit diesen Vorschlägen nicht ermitteln können, dann bleibt Ihre verbleibende Option eine umfassende Fehlerbehebung. Wir haben hier eine Anleitung zur umfassenden Fehlerbehebung mit WordPress.
2) Langsame oder nicht antwortende externe Ressourcenanfragen: Einige PHP-Codes versuchen, mit einer externen Ressource (die an anderer Stelle gehostet wird) zu kommunizieren, die zu lange braucht, um zu antworten, oder überhaupt nicht antwortet. Um Probleme mit externen Ressourcen zu lösen, müssen Sie untersuchen, welche Teile des PHP-Codes Ihrer Website (benutzerdefinierter Code oder Plug-ins/Designcode) versuchen, externe Ressourcen abzurufen. Dies ist am häufigsten Code, der eine Verbindung zu einem Drittanbieterdienst wie einem Zahlungsprozessor oder Wetterdatenabruf über eine API oder Scraping herstellt. Hier sind ein paar Beispiele:
- Einige Zahlungs-Gateways oder XML-API-Dienste verwenden nicht standardmäßige Ports (obwohl dies heutzutage sehr ungewöhnlich ist, da Standardports jetzt viel häufiger verwendet werden). Wenn es Port 80 oder 443 nicht verwendet, versucht es wahrscheinlich, über einen blockierten Port zu kommunizieren, und schlägt fehl.
- Ältere Twitter-Widgets sind dafür bekannt, Tweets mithilfe von Back-End-Code abzurufen, und dann führt ein Verbindungsfehler zu den Twitter-Servern zu solchen Hängern. Dies gilt nicht für Twitter-eigene Feed-Einbettungen, die über Javascript asynchron arbeiten.
Wenn Sie WordPress oder ein anderes CMS mit Plugins verwenden, versuchen Sie unbedingt, alle Plugins zu deaktivieren, die möglicherweise nach außen kommunizieren, um zu sehen, ob es das Problem löst.
Wenn Sie nicht intuitiv feststellen können, welches Plugin der Fehler sein könnte, bleibt Ihnen eine umfassende Fehlerbehebung. Wir haben hier eine Anleitung zur umfassenden Fehlerbehebung mit WordPress.
Ursache:Es werden zu viele PHP-Prozesse benötigt, um Anfragen zu bedienen
Wenn Ihre Website viele PHP-Prozesse erfordert, da eine große Menge an Datenverkehr dynamische Verarbeitungsanforderungen erzeugt, dann sollte Ihr primäres Ziel darin bestehen, die Menge an dynamischer Verarbeitung zu reduzieren, die bei jedem Seitenladevorgang stattfinden muss. So geht's:
- Wenn Sie WordPress verwenden, erfahren Sie hier, wie Sie Ihren Cache installieren und optimieren.
- Wenn Sie Caching bereits aktiviert haben, besteht der nächste Schritt darin, Fälle zu erkennen und zu reduzieren, in denen eine dynamische Verarbeitung stattfindet.
Ursache:Begrenzte Puffer
Apache- oder PHP-Prozesse erzeugen möglicherweise größere Datenmengen, als nginx verarbeiten darf. Da sowohl Apache als auch PHP diese Daten durch nginx leiten müssen, um den Website-Besucher zu erreichen, wird ein 502-Fehler mit der Meldung „Upstream gesendet zu großer Header“ generiert. Wir haben diesen Fehler bei Kunden gesehen, die das WordPress-Plugin OptInMonster verwenden, aber jede Software könnte dies tun.
Unser Shared Hosting sollte bereits mit größeren Puffern für nginx optimiert sein, aber wenn Sie Ihren eigenen VPS haben oder nicht bei uns gehostet werden, müssen Sie diese Werte selbst auf die nginx-Konfiguration anwenden:
fastcgi_buffers 128 4096k; fastcgi_buffer_size 4096k;
Dies teilt nginx mit, dass es in Ordnung ist, große (4 MB) Header zu akzeptieren. Sie können diese in eine Datei einfügen wie:/etc/nginx/conf.d/increase_buffers.conf
Starten Sie dann nginx neu, um die Änderungen zu übernehmen. Beispiel:
echo 'fastcgi_buffers 128 4096k; fastcgi_buffer_size 4096k;' > /etc/nginx/conf.d/increase_buffers.conf
Ursache:PHP-FPM falsch konfiguriert oder muss optimiert werden (nur VPS/dedizierter Server)
Manchmal, wenn Sie ständig Gateway-Timeout-Fehler erhalten und das einzige, was sie löscht, ein Neustart von PHP ist (wie oben beschrieben), oder wenn Sie sich auf einem VPS befinden und Sie sehen, dass Ihre PHP-Prozesse mit hoher CPU-Leistung weiterlaufen und lange halten länger als sie sollten (oder Ihnen wurde von Servertechnikern gesagt, dass dies der Fall ist), müssen Sie einige Schritte unternehmen, um sie einzudämmen.
Hinweis:Wenn Sie unser Shared-Hosting verwenden, ist unsere PHP-FPM-Konfiguration bereits für eine Shared-Hosting-Umgebung optimiert, sodass diese Lösung nicht zutrifft, wenn Gateway-Fehler auftreten.
Im Folgenden sind einige Optionen aufgeführt, die für uns funktioniert haben. Es ist jedoch sehr wichtig zu beachten, dass dies Problemumgehungen für das eigentliche Problem sind. Den Code zu identifizieren, der nicht schnell genug reagiert, und seine Leistung zu optimieren, ist die wahre Lösung.
- PHP-FPM ermöglicht es Ihnen, den PHP Process Manager (FastCGI Process Manager =FPM) zu optimieren, indem Sie einige Änderungen in Plesk vornehmen. Wenn Sie den PHP-FPM-Prozess im „ondemand“-Stil verwenden, möchten Sie möglicherweise die Anzahl der Anforderungen reduzieren, die jeder Prozess verarbeitet, bevor Sie einen neuen Prozess ordnungsgemäß beenden/neu starten. Dies wird als pm.max_requests bezeichnet. Probieren Sie 100 oder 150 aus, wenn Sie Leistungsprobleme haben
- Wenn Ihre PHP-Prozesse nicht sterben, müssen Sie sie möglicherweise *zum Sterben bringen*. Es gibt ein paar gute Möglichkeiten, dies zu tun. Zunächst muss definitiv ein Leerlaufzeitlimit für die PHP-FPM-Prozesse festgelegt werden, indem pm.process_idle_timeout festgelegt wird – versuchen Sie es auf 10s einzustellen (Sie können dies im Feld unter den FPM-Einstellungen tun.
- Falls Ihr PHP noch verarbeitet nicht aussterben, müssen Sie möglicherweise noch aggressiver mit ihnen umgehen. Versuchen Sie, request_terminate_timeout einzustellen auf ein paar Sekunden höher als Ihre max_execution_time-Einstellung. Wenn max_execution_time den Prozess nicht beendet, wird request_terminate_timeout dies sicherlich tun.
Wenn Sie diesen Leitfaden hilfreich fanden, sehen Sie sich die anderen verfügbaren Leitfäden und Beiträge an. Wenn Sie einen leistungsstarken kanadischen Webhost oder VPS-Hostingpartner benötigen, sehen Sie sich unsere Dienstleistungen an!