Die ultimative Lösung für Nginx löst 502- und 504-Fehler aus

WBOY
Freigeben: 2016-08-08 09:32:43
Original
1533 Leute haben es durchsucht

Großer Speicher kann die folgenden Parameter erhöhen, wodurch 502-Fehler effektiv reduziert werden können


php-fpm Hauptsächlich geänderte Parameter in
128 //Jeder verbraucht etwa 20 MB Speicher, eingestellt entsprechend der Speichergröße
//Wenn jeder max_children-Prozess diese Zahl überschreitet, wird er automatisch beendet und bei zukünftiger Verwendung automatisch neu erstellt. Im Allgemeinen auf etwa 1000 eingestellt.
0s //Wenn Ihre Serverleistung gut genug ist, die Breitbandressourcen ausreichend sind und keine Schleifen oder Fehler im PHP-Skript vorhanden sind, können Sie dies direkt tun Setzen Sie „request_terminate_timeout“ auf 0s. Die Bedeutung von Nullen besteht darin, PHP-CGI ohne zeitliche Begrenzung weiter ausführen zu lassen. Und wenn Sie dies nicht tun können, das heißt, Ihr PHP-CGI hat möglicherweise einen Fehler, Ihre Bandbreite reicht nicht aus oder andere Gründe führen dazu, dass Ihr PHP-CGI angehalten wird, dann wird es Ihnen empfohlen Weisen Sie „request_terminate_timeout“ zu. Ein Wert, der basierend auf der Leistung Ihres Servers festgelegt werden kann. Im Allgemeinen gilt: Je besser die Leistung, desto höher können Sie sie einstellen, zwischen 20 und 30 Minuten. Da die PHP-Skripte meines Servers sehr lange laufen müssen, können einige mehr als 10 Minuten dauern. Deshalb habe ich sie auf 900 Sekunden eingestellt, damit PHP-CGI nicht abstürzt und 502 angezeigt wird Ungültiger Gateway-Fehler.


Wichtigste geänderte Parameter in Nginx
fastcgi_connect_timeout 1800;
fastcgi_send_timeout 1800;
fastcgi_read_timeout 1800;
fastcgi_buffer_ size. 10 24k ;
fastcgi_buffers 32 1024k;
fastcgi_busy_buffers_size 2048k;
fastcgi_temp_file_write_size 2048k;
Hinweis: Die beiden 1024k-Werte müssen gleich sein, sonst wird ein Fehler gemeldet


Die folgenden sind Standardparameter
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4. 64k;
fastc gi_busy_buffers_size 128k ;
fastcgi_temp_file_write_size 128k;

---------------------------------- -------------- ------------------------------------ -------------- ----

[ Autor des Artikels: Wei Shaoqian, bitte geben Sie den Originallink zum Nachdruck an: http:/ /mven.cn/nginx-502-504/ ]

1. Beschreibung der Fehlermeldung:

Nginx 502 Bad Gateway bedeutet dass das angeforderte PHP-CGI ausgeführt wurde, aber aus irgendeinem Grund (normalerweise ein Problem beim Abrufen von Ressourcen) die Ausführung nicht abgeschlossen hat und den PHP-CGI-Prozess beendet hat.

Nginx 504 Gateway Timeout bedeutet, dass das angeforderte Gateway nicht angefordert wurde. Einfach ausgedrückt bedeutet dies, dass kein ausführbares PHP-CGI angefordert wurde.

2. Analyse der Fehlerursache:

Die Lösung dieser beiden Probleme erfordert tatsächlich umfassendes Denken Gateway Es hängt mit den Einstellungen von php-fpm.conf zusammen,

und Nginx 504 Gateway Timeout hängt mit den Einstellungen von nginx.conf zusammen.

php-fpm.conf hat zwei entscheidende Parameter, einer ist „max_children“ und der andere ist „request_terminate_timeout“, aber dieser Wert ist nicht universell, sondern erfordert eine eigene Berechnung.

Die Berechnungsmethode lautet wie folgt:

Wenn Ihre Serverleistung gut genug ist und die Breitbandressourcen ausreichend sind, kommt es zu keinen Systemschleifen oder BUGs im PHP-Skript. Wenn ja, können Sie „request_terminate_timeout“ direkt auf 0s setzen. Die Bedeutung von Nullen besteht darin, PHP-CGI ohne zeitliche Begrenzung weiter ausführen zu lassen. Und wenn Sie dies nicht tun können, das heißt, Ihr PHP-CGI hat möglicherweise einen Fehler, Ihre Bandbreite reicht nicht aus oder andere Gründe führen dazu, dass Ihr PHP-CGI angehalten wird, dann wird es Ihnen empfohlen Weisen Sie „request_terminate_timeout“ zu. Ein Wert, der basierend auf der Leistung Ihres Servers festgelegt werden kann. Im Allgemeinen gilt: Je besser die Leistung, desto höher können Sie sie einstellen, zwischen 20 und 30 Minuten. Da die PHP-Skripte meines Servers sehr lange laufen müssen, können einige mehr als 10 Minuten dauern. Deshalb habe ich 900 Sekunden eingestellt, damit PHP-CGI nicht abstürzt und eine 502 angezeigt wird. Ungültiger Gateway-Fehler.

Und wie wird der Wert von „max_children“ berechnet? Grundsätzlich gilt: Je größer der Wert, desto besser. Je mehr PHP-CGI-Prozesse vorhanden sind, desto schneller werden sie verarbeitet und es stehen weniger Anfragen in der Warteschlange. Die Einstellung von „max_children“ muss auch entsprechend der Leistung des Servers festgelegt werden. Im Allgemeinen beträgt der von jedem PHP-CGI auf einem Server verbrauchte Speicher unter normalen Umständen etwa 20 MB, daher setze ich meine „max_children“ auf 40, 20 MB*. 40 = 800 MB bedeutet, dass der von allen PHP-CGI verbrauchte Speicher zu Spitzenzeiten innerhalb von 800 MB liegt, was 1 GB weniger als mein effektiver Speicher ist. Und wenn mein „max_children“ auf einen kleineren Wert eingestellt ist, z. B. 5-10, ist PHP-CGI „sehr müde“, die Verarbeitungsgeschwindigkeit ist sehr langsam und die Wartezeit ist länger. Wenn die Anfrage längere Zeit nicht bearbeitet wurde, wird 504 angezeigt. Gateway-Timeout-Fehler, und wenn die PHP-CGI-Dateien, die sehr langsam verarbeitet werden, auf Probleme stoßen, wird der Fehler 502 Bad Gateway angezeigt.

3. Vorübergehende Lösung:

Zusammenfassend lautet die vorübergehende Lösung für Nginx, die 502- und 504-Fehler auslöst:

1. Passen Sie die relevanten Einstellungen von php-fpm.conf an:

32

30s

2. Passen Sie die relevanten Einstellungen von nginx.conf an:

fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600 ;
fastcgi_buffer_size 256k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 🎜>
Die im Titel gezeigte Lösung 3 kann das Problem nur vorübergehend lösen, Und wenn der Datenverkehr auf der Website wirklich sehr, sehr groß ist, kann Nginx + FastCGI eine hohe Parallelität nur in einem Moment oder in kurzer Zeit bewältigen. Daher besteht derzeit die einzige ultimative Lösung darin, PHP-CGI regelmäßig reibungslos neu zu starten.

Die spezifische Konfiguration ist wie folgt:

1. Schreiben Sie ein sehr einfaches Skript:

# vi /home/www/scripts/php-fpm.sh

Der Inhalt ist wie folgt:

#! /bin/bash

# Dieses Skript läuft unter */1

/usr/local/php/sbin/php-fpm reload

2. Fügen Sie die hinzu Skript zur geplanten Aufgabe:

#crontab -e

Der Inhalt ist wie folgt:

*/1 * * * * /home/www/scripts/php-fpm.sh

Hinweis: Um Ärger zu sparen, können Sie auch PHP schreiben - direkt in crontab, ohne den Smooth-Restart-Befehl von fpm zu schreiben.

Originalartikel, bitte beim Nachdruck angeben: Nachdruck aus Wei Shaoqian [Zhao Bingliang] – Server System Architecture

Das Obige stellt die ultimative Lösung für Nginx-Fehler 502 und 504 vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die an PHP-Tutorials interessiert sind.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage