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
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:
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.