Heim > Artikel > Backend-Entwicklung > Nginx-Timeout
In letzter Zeit erscheint auf der Website immer 504 Gateway Timeout bei der Verarbeitung großer Datenmengen, daher habe ich einige Informationen im Internet gefunden
Die Bedeutung von Nginx 502 Bad Gateway ist das angeforderte PHP -CGI Es wurde ausgeführt, aber aus irgendeinem Grund (normalerweise ein Problem beim Lesen von Ressourcen) wurde es nicht abgeschlossen und der PHP-CGI-Prozess wurde beendet.
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.
Die Lösung dieser beiden Probleme erfordert tatsächlich umfassendes Denken. Im Allgemeinen hängt Nginx 502 Bad Gateway mit den Einstellungen von php-fpm.conf zusammen, während Nginx 504 Gateway Timeout mit den Einstellungen von nginx.conf zusammenhängt verwandt.
Die richtigen Einstellungen müssen mehrere Faktoren berücksichtigen, wie zum Beispiel die Leistung des Servers selbst und die Anzahl der Besucher.
Am Beispiel meines aktuellen Servers ist die CPU Pen4 1,5G, der Speicher 1 GB und es ist ein CENTOS-System. Es sind etwa 50 Besucher gleichzeitig online.
Aber die meisten Leute online müssen PHP-CGI für die Verarbeitung vieler Informationen anfordern, deshalb habe ich nginx.conf auf Folgendes gesetzt:
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
fastcgi_buffer_size 128k;
fastcgi_temp_file_write_size 256k;
Fastcgi_ intercept_errors on;
Die wichtigsten Einstellungen hier sind die ersten drei, nämlich
fastcgi_connect_timeout 300s;
Dies legt fest, dass die Zeit zum Verbinden, Senden und Lesen von PHP-CGI ausreicht. Daher tritt auf meinem Server selten der Fehler 504 Gateway Timeout auf. Am kritischsten ist die Einstellung von php-fpm.conf, die direkt zu 502 Bad Gateway und 504 Gateway Timeout führt.
Schauen wir uns einige wichtige Parameter von php-fpm.conf genauer an:
php-fpm.conf hat zwei entscheidende Parameter, einer ist „max_children“ und der andere ist „ request_terminate_timeout"
Einer der Werte meiner beiden Einstellungen ist „40“ und der andere ist „900“, aber dieser Wert ist nicht universell und muss selbst berechnet werden.
Die Berechnungsmethode lautet wie folgt:
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 festlegen „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 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? Je größer der Wert, desto besser. Je mehr PHP-CGI-Prozesse ausgeführt werden, desto weniger Anfragen werden in der Warteschlange angezeigt. . 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, dann ist PHP-CGI „sehr müde“, die Verarbeitungsgeschwindigkeit ist sehr langsam und die Wartezeit wird sehr gering sein Auch länger. Wenn eine Anfrage längere Zeit nicht verarbeitet wurde, wird der Fehler 504 Gateway Timeout angezeigt. Wenn das PHP-CGI, das sehr müde verarbeitet wird, auf ein Problem stößt, wird der Fehler 502 Bad Gateway angezeigt.
fastcgi_read_timeout 300s;
Das Obige stellt das Nginx-Timeout vor, einschließlich seiner Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.