Lösung für 502 Bad Gateway und 504 Gateway Timeout Error auf Linux Server
Eine Schritt-für-Schritt-Anleitung zur Lösung von Nginx-, Apache-, PHP-FPM- und Service-Timeout-Problemen.
auf Websites gesehen 502 Schlechtes Gateway und 504 Gateway-Zeitüberschreitung Fehler treten normalerweise auf, weil der Webserver nicht die richtige Antwort vom Back-End-Dienst erhält. Bei diesem Dienst kann es sich um PHP-FPM, ein Apache-Backend, eine Node.js-Anwendung, einen Game-Panel-API-Dienst oder eine andere Anwendung hinter dem Proxy handeln.
Diese Fehler treten besonders häufig bei Hosting-, Game-Panel-, WHMCS-, Pterodactyl-, benutzerdefinierten Administrations-Panel- und webbasierten Launcher-Systemen auf.
1. Unterschied zwischen 502- und 504-Fehler
- 502 Schlechtes Gateway: Der Webserver kann keine Verbindung zum Backend-Dienst herstellen oder erhält eine verstümmelte Antwort.
- 504 Gateway-Timeout: Der Backend-Dienst scheint zu antworten, die Antwort wird jedoch nicht rechtzeitig zurückgegeben.
Bei 502 handelt es sich also eher um einen Verbindungs-/Dienstabsturz und bei 504 um ein Langsamkeits- oder Zeitüberschreitungsproblem.
2. Überprüfen des Servicestatus
Überprüfen Sie zunächst, ob der Webserver und die PHP-Dienste ausgeführt werden.
systemctl status nginx systemctl status apache2 systemctl status php-fpm
Auf CentOS-, AlmaLinux- oder Rocky Linux-Systemen kann der PHP-FPM-Dienst wie folgt benannt werden:
systemctl status php-fpm systemctl status httpd
Wenn der Dienst gestoppt wurde, starten Sie ihn neu:
systemctl restart nginx systemctl restart php-fpm
3. Protokolldateien überprüfen
Es ist nicht korrekt, bei den Fehlern 502 und 504 mit Vermutungen fortzufahren. Die Protokolldatei zeigt die wahre Ursache des Fehlers.
tail -n 100 /var/log/nginx/error.log tail -n 100 /var/log/apache2/error.log
Auf CentOS-basierten Systemen:
tail -n 100 /var/log/httpd/error_log
In den Protokollen sind folgende Aussagen zu sehen:
- connect() fehlgeschlagen: Es kann keine Verbindung zum Backend-Dienst hergestellt werden.
- Upstream-Zeitüberschreitung: Der Backend-Dienst antwortet spät.
- Verbindung abgelehnt: Der Dienst ist ausgefallen oder die Weiterleitung erfolgt an den falschen Port.
- Erlaubnis verweigert: Es liegt ein Socket- oder Dateiberechtigungsproblem vor.
4. PHP-FPM-Socket- oder Port-Steuerung
Nginx stellt über Socket oder Port eine Verbindung zu PHP-FPM her. Der PHP-FPM-Pfad in der Nginx-Konfigurationsdatei und der tatsächliche PHP-FPM-Listenwert müssen identisch sein.
grep -R "fastcgi_pass" /etc/nginx/sites-enabled/ grep -R "listen =" /etc/php/*/fpm/pool.d/www.conf
Wenn Nginx beispielsweise Folgendes verwendet:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
Derselbe Socket sollte auf der PHP-FPM-Seite abgehört werden:
listen = /run/php/php8.2-fpm.sock
5. Erhöhen der Timeout-Einstellungen
504-Fehler können in großen Verarbeitungspanels, Spielmärkten, APIs oder langsam laufenden PHP-Skripten auftreten. Nginx-Timeout-Werte können erhöht werden.
nano /etc/nginx/nginx.conf
Dem http-Block bzw. dem entsprechenden Server-Block können folgende Werte hinzugefügt werden:
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; fastcgi_read_timeout 300;
Testen Sie die Einstellungen und starten Sie Nginx neu:
nginx -t systemctl restart nginx
6. Überprüfen der PHP-FPM-Prozessgrenzen
Wenn der Datenverkehr zunimmt, reichen die PHP-FPM-Transaktionslimits möglicherweise nicht aus. In diesem Fall werden Anforderungen in die Warteschlange gestellt und es kommt zu einer Zeitüberschreitung.
nano /etc/php/8.2/fpm/pool.d/www.conf
Beispieleinstellungen:
pm = dynamic pm.max_children = 30 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10
Diese Werte sollten entsprechend der RAM-Größe des Servers angepasst werden. Ein zu hoher Wert erhöht den RAM-Verbrauch.
Häufige Fehler
- Einstellungen ändern, ohne die Protokolldatei anzusehen
- Der Nginx-Socket-Pfad wird nicht aktualisiert, obwohl sich die PHP-Version geändert hat
- Die tatsächlich langsame Abfrage wird nicht durch Erhöhen des Zeitlimits behoben
- PHP-FPM-Limits erhöhen, ohne RAM zu berechnen
- Neustart des Dienstes, ohne die Nginx-Konfiguration zu testen
FAQ
Wird der 502-Fehler immer durch Nginx verursacht?
Nein. Nginx ist nur derjenige, der den Fehler anzeigt. Das eigentliche Problem kann in PHP-FPM, dem Apache-Backend, der Node.js-Anwendung oder einem anderen Dienst liegen.
Ist eine Erhöhung des Timeouts die endgültige Lösung für 504-Fehler?
Nicht immer. Eine Erhöhung des Timeouts bietet vorübergehende Erleichterung. Die eigentliche Lösung besteht darin, das Problem mit der langsamen Abfrage, der starken Verarbeitung oder der Leistung zu finden.
Ist es sicher, PHP-FPM neu zu starten?
Es ist im Allgemeinen sicher, aktive Anfragen können jedoch für kurze Zeit beeinträchtigt sein. In stark ausgelasteten Systemen sollten verkehrsarme Stunden bevorzugt werden.
Leistungsempfehlungen
- Überprüfen Sie regelmäßig die PHP-FPM-Version und den Socket-Pfad.
- Untersuchen Sie langsame Abfrageprotokolle in Webpanel- und API-Diensten.
- Wenn der Arbeitsspeicher nicht ausreicht, erhöhen Sie den PHP-FPM-Wert max_children nicht unbewusst.
- Reduzieren Sie die Backend-Last durch den Einsatz eines Cache-Systems.
- Verwalten Sie Fehlerprotokolle, bevor sie mit Logrotate wachsen.
Dieser Artikel ist speziell für PvPServer vorbereitet.