Heim Betrieb und Instandhaltung Nginx Was soll ich tun, wenn Nginx den Fehler 502 meldet? Lösungsaustausch

Was soll ich tun, wenn Nginx den Fehler 502 meldet? Lösungsaustausch

Mar 04, 2022 pm 04:07 PM
nginx

Was soll ich tun, wenn Nginx den Fehler 502 meldet? In diesem Artikel geht es um die Lösung des Nginx-Fehlers 502. Ich hoffe, dass er für alle hilfreich ist!

Was soll ich tun, wenn Nginx den Fehler 502 meldet? Lösungsaustausch

HTTP-Anfrageprozess: Unter normalen Umständen überträgt Nginx beim Senden einer dynamischen Anfrage die Anfrage direkt an PHP-FPM, und PHP-FPM weist den PHP-CGI-Prozess für die Verarbeitung der zugehörigen Anfragen zu und kehrt dann zurück wiederum und schließlich gibt Nginx die Ergebnisse an den Client-Browser zurück.

Nginx 502 Bad Gateway-Fehler ist ein Problem mit FastCGI

Lösung

Wenn Sie auf ein 502-Problem stoßen, können Sie die folgenden zwei Schritte zur Lösung priorisieren.

1. Prüfen Sie, ob die aktuelle Anzahl der PHP-FastCGI-Prozesse ausreicht (max_children-Wert)

netstat -anpo | grep "php-cgi"| wc -l
Nach dem Login kopieren

Wenn die tatsächliche „Anzahl der verwendeten FastCGI-Prozesse“ nahe an der voreingestellten „Anzahl der FastCGI-Prozesse“ liegt, dann geben Sie die „Anzahl der verwendeten FastCGI-Prozesse“ an. „Anzahl der FastCGI-Prozesse“ reicht nicht aus und muss erhöht werden.

2. Die Ausführungszeit einiger PHP-Programme übersteigt die Wartezeit von Nginx (PHP hat keinen Speicher).

Erhöhen Sie die FastCGI-Timeout-Zeit in der Konfigurationsdatei nginx.conf, zum Beispiel:

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
Nach dem Login kopieren

in php .ini memory_limit=64M, starten Sie Nginx neu. memory_limit=64M,重启nginx。

如果这样修改了还解决不了问题,可以参考下面这些方案:

3、max-children和max-requests

一台服务器上运行着nginx php(fpm) xcache,访问量日均 300W pv左右

最近经常会出现这样的情况: php页面打开很慢,cpu使用率突然降至很低,系统负载突然升至很高,查看网卡的流量,也会发现突然降到了很低。这种情况只持续数秒钟就恢复了

检查php-fpm的日志文件发现了一些线索:

    Sep3008:32:23.289973[NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200,cur:51200
    Sep3008:32:23.290212[NOTICE] fpm_sockets_init_main(), line 371:using inherited socket fd=10,“127.0.0.1:9000″
    Sep3008:32:23.290342[NOTICE] fpm_event_init_main(), line 109: libevent:using epoll
    Sep3008:32:23.296426[NOTICE] fpm_init(), line 47: fpm is running, pid 30587
Nach dem Login kopieren

在这几句的前面,是1000多行的关闭children和开启children的日志

原来,php-fpm有一个参数 max_requests,该参数指明了,每个children最多处理多少个请求后便会被关闭,默认的设置是500。因为php是把请求轮询给每个children,在大流量下,每个childre到达max_requests所用的时间都差不多,这样就造成所有的children基本上在同一时间被关闭。

在这期间,nginx无法将php文件转交给php-fpm处理,所以cpu会降至很低(不用处理php,更不用执行sql),而负载会升至很高(关闭和开启children、nginx等待php-fpm),网卡流量也降至很低(nginx无法生成数据传输给客户端)

增加children的数量,并且将 max_requests 设置未 0 或者一个比较大的值:

打开 /usr/local/php/etc/php-fpm.conf

调大以下两个参数(根据服务器实际情况,过大也不行)

    <valuename=”max_children”>5120</value>
    <valuename=”max_requests”>600</value>
Nach dem Login kopieren

然后重启php-fpm。

5、增加缓冲区容量大小

将nginx的error log打开,发现“pstream sent too big header while reading response header from upstream”这样的错误提示。查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修改办法增加了缓冲区容量大小设置,502问题彻底解决。后来系统管理员又对参数做了调整只保留了2个设置参数:client head buffer,fastcgi buffer size。

6、request_terminate_timeout

如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:request_terminate_timeout

这个值是max_execution_time

Wenn das Problem nach dieser Änderung nicht gelöst werden kann, können Sie auf die folgenden Lösungen zurückgreifen:

3, Max-Children und Max-Requests

Nginx PHP (FPM) Xcache läuft auf einem Server, mit einem Durchschnitt tägliches Besuchsvolumen von ca. 300W pv

Situationen wie diese kommen in letzter Zeit häufig vor: Die PHP-Seite öffnet sich sehr langsam, die CPU-Auslastung sinkt plötzlich auf ein sehr niedriges Niveau, die Systemlast steigt plötzlich auf ein sehr hohes Niveau, und wenn man das überprüft Wenn der Datenverkehr der Netzwerkkarte abnimmt, werden Sie auch feststellen, dass dieser plötzlich auf ein sehr niedriges Niveau sinkt. Diese Situation dauerte nur ein paar Sekunden und erholte sich dann.

Überprüfen Sie die Protokolldatei von php-fpm und finden Sie einige Hinweise:

netstat -anpo | grep “php-cgi” | wc -l
Nach dem Login kopieren
Nach dem Login kopieren

Vor diesen Sätzen gibt es mehr als 1.000 Protokollzeilen zum Schließen und Öffnen von untergeordneten Elementen

Es Es stellt sich heraus, dass php-fpm einen Parameter max_requests hat, der die maximale Anzahl von Anfragen angibt, die jedes Kind verarbeiten kann, bevor es heruntergefahren wird. Die Standardeinstellung ist 500. Da PHP Anfragen an jedes untergeordnete Element abfragt, dauert es bei starkem Datenverkehr jedes untergeordnete Element ungefähr gleich lange, bis es max_requests erreicht, was dazu führt, dass alle untergeordneten Elemente praktisch gleichzeitig geschlossen werden.

Während dieser Zeit kann Nginx keine PHP-Dateien zur Verarbeitung an PHP-FPM übertragen, sodass die CPU auf ein sehr niedriges Niveau fällt (keine Notwendigkeit, PHP zu verarbeiten, geschweige denn SQL auszuführen) und die Last auf ein sehr hohes Niveau ansteigt Ebene (Schließen und Öffnen von Kindern, Nginx Warten auf PHP-FPM), der Netzwerkkartenverkehr ist ebenfalls auf ein sehr niedriges Niveau gesunken (Nginx kann keine Daten zur Übertragung an den Client generieren)🎜🎜Erhöhen Sie die Anzahl der Kinder und setzen Sie max_requests auf kleiner als 0 oder ein größerer Wert: 🎜🎜Öffnen Sie /usr/local/php/etc/php-fpm.conf🎜🎜Fügen Sie die folgenden zwei Parameter hinzu (auch entsprechend der tatsächlichen Situation des Servers). groß wird nicht funktionieren)🎜rrreee🎜Dann starten Sie php-fpm neu. 🎜🎜🎜5. Erhöhen Sie die Pufferkapazität 🎜🎜🎜Öffnen Sie das Nginx-Fehlerprotokoll und finden Sie eine Fehlermeldung wie „pstream hat beim Lesen des Antwortheaders vom Upstream einen zu großen Header gesendet“. Nach Überprüfung der Informationen besteht die allgemeine Annahme, dass ein Fehler im Nginx-Puffer vorliegt. Der durch den Seitenverbrauch unserer Website belegte Puffer ist möglicherweise zu groß. Unter Bezugnahme auf die von einem Ausländer geschriebene Änderungsmethode wird die Einstellung der Pufferkapazität erhöht und das 502-Problem vollständig gelöst. Später passte der Systemadministrator die Parameter an und behielt nur zwei Einstellungsparameter bei: Client-Kopfpuffer und Fastcgi-Puffergröße. 🎜🎜🎜6. request_terminate_timeout🎜🎜🎜Wenn 502 hauptsächlich bei einigen Beiträgen oder Datenbankvorgängen auftritt und nicht bei statischen Seitenvorgängen üblich ist, können Sie eine der php-fpm.conf-Einstellungen überprüfen: request_terminate_timeout 🎜🎜Dieser Wert ist max_execution_time, was die Ausführungszeit des Skripts von Fast-CGI ist. 🎜🎜0s ist geschlossen, was bedeutet, dass es auf unbestimmte Zeit weitergehen wird. (Beim Anziehen habe ich eine Zahl geändert, ohne genau hinzusehen) 🎜🎜 Bei der Optimierung von fastcgi kann man diesen Wert auch 5 Sekunden lang ändern, um den Effekt zu sehen. 🎜🎜Wenn die Anzahl der PHP-CGI-Prozesse nicht ausreicht, die PHP-Ausführungszeit lang ist oder der PHP-CGI-Prozess abstürzt, tritt ein 502-Fehler auf. 🎜🎜🎜Erweiterte Kenntnisse: 🎜🎜🎜Nginx 502 Bad Gateway bedeutet, dass das angeforderte PHP-CGI ausgeführt wurde, aber aus irgendeinem Grund (normalerweise ein Problem beim Lesen von Ressourcen) nicht ausgeführt wurde und der PHP-CGI-Prozess beendet wurde Im Allgemeinen scheint Nginx 502 Bad Gateway mit den Einstellungen von php-fpm.conf zusammenzuhängen. 🎜🎜 php-fpm.conf hat zwei entscheidende Parameter, einen ist max_children und der andere ist request_terminate_timeout, aber dieser Wert ist nicht universell und muss selbst berechnet werden. Wenn während der Installation und Verwendung ein 502-Problem auftritt, liegt das normalerweise daran, dass der Standard-PHP-CGI-Prozess 5 ist. Dies kann durch nicht genügend PHP-CGI-Prozesse verursacht werden. Sie müssen /usr/local/php/etc/php- ändern. fpm.conf Erhöhen Sie den max_children-Wert entsprechend. 🎜🎜 Die Berechnungsmethode ist wie folgt: 🎜

如果你服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话你可以直接将 request_terminate_timeout设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。而如果你做不到这一点,也就 是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI假死那么就建议你给 request_terminate_timeout赋一个值,这个值可以根据服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分 钟都可以。而max_children这个值又是怎么计算出来的呢?这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。 设置max_children也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右

按照官方的答案,排查了相关的可能,并结合了网友的答案,得出了下面的解决办法。

1、查看php fastcgi的进程数(max_children值)

netstat -anpo | grep “php-cgi” | wc -l
Nach dem Login kopieren
Nach dem Login kopieren

5(假如显示5)

2、查看当前进程

 top观察fastcgi进程数,假如使用的进程数等于或高于5个,说明需要增加(根据你机器实际状况而定)

 3、调整/usr/local/php/etc/php-fpm.conf 的相关设置

 <value name=”max_children”>10</value><value name=”request_terminate_timeout”>60s</value>max_children最多10个进程,按照每个进程20MB内存,最多200MB。request_terminate_timeout执行的时间为60秒,也就是1分钟。

推荐教程:nginx教程

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn Nginx den Fehler 502 meldet? Lösungsaustausch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erlauben Sie den externen Netzwerkzugriff auf den Tomcat-Server So erlauben Sie den externen Netzwerkzugriff auf den Tomcat-Server Apr 21, 2024 am 07:22 AM

Um dem Tomcat-Server den Zugriff auf das externe Netzwerk zu ermöglichen, müssen Sie Folgendes tun: Ändern Sie die Tomcat-Konfigurationsdatei, um externe Verbindungen zuzulassen. Fügen Sie eine Firewallregel hinzu, um den Zugriff auf den Tomcat-Server-Port zu ermöglichen. Erstellen Sie einen DNS-Eintrag, der den Domänennamen auf die öffentliche IP des Tomcat-Servers verweist. Optional: Verwenden Sie einen Reverse-Proxy, um Sicherheit und Leistung zu verbessern. Optional: Richten Sie HTTPS für mehr Sicherheit ein.

So führen Sie thinkphp aus So führen Sie thinkphp aus Apr 09, 2024 pm 05:39 PM

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

Willkommen bei Nginx! Wie kann ich es lösen? Willkommen bei Nginx! Wie kann ich es lösen? Apr 17, 2024 am 05:12 AM

Um den Fehler „Willkommen bei Nginx!“ zu beheben, müssen Sie die Konfiguration des virtuellen Hosts überprüfen, den virtuellen Host aktivieren, Nginx neu laden. Wenn die Konfigurationsdatei des virtuellen Hosts nicht gefunden werden kann, erstellen Sie eine Standardseite und laden Sie Nginx neu. Anschließend wird die Fehlermeldung angezeigt verschwindet und die Website wird normal angezeigt.

So kommunizieren Sie zwischen Docker-Containern So kommunizieren Sie zwischen Docker-Containern Apr 07, 2024 pm 06:24 PM

In der Docker-Umgebung gibt es fünf Methoden für die Containerkommunikation: freigegebenes Netzwerk, Docker Compose, Netzwerk-Proxy, freigegebenes Volume und Nachrichtenwarteschlange. Wählen Sie abhängig von Ihren Isolations- und Sicherheitsanforderungen die am besten geeignete Kommunikationsmethode, z. B. die Nutzung von Docker Compose zur Vereinfachung von Verbindungen oder die Verwendung eines Netzwerk-Proxys zur Erhöhung der Isolation.

So registrieren Sie phpmyadmin So registrieren Sie phpmyadmin Apr 07, 2024 pm 02:45 PM

Um sich für phpMyAdmin zu registrieren, müssen Sie zunächst einen MySQL-Benutzer erstellen und ihm Berechtigungen erteilen, dann phpMyAdmin herunterladen, installieren und konfigurieren und sich schließlich bei phpMyAdmin anmelden, um die Datenbank zu verwalten.

So stellen Sie das NodeJS-Projekt auf dem Server bereit So stellen Sie das NodeJS-Projekt auf dem Server bereit Apr 21, 2024 am 04:40 AM

Serverbereitstellungsschritte für ein Node.js-Projekt: Bereiten Sie die Bereitstellungsumgebung vor: Erhalten Sie Serverzugriff, installieren Sie Node.js, richten Sie ein Git-Repository ein. Erstellen Sie die Anwendung: Verwenden Sie npm run build, um bereitstellbaren Code und Abhängigkeiten zu generieren. Code auf den Server hochladen: über Git oder File Transfer Protocol. Abhängigkeiten installieren: Stellen Sie eine SSH-Verbindung zum Server her und installieren Sie Anwendungsabhängigkeiten mit npm install. Starten Sie die Anwendung: Verwenden Sie einen Befehl wie node index.js, um die Anwendung zu starten, oder verwenden Sie einen Prozessmanager wie pm2. Konfigurieren Sie einen Reverse-Proxy (optional): Verwenden Sie einen Reverse-Proxy wie Nginx oder Apache, um den Datenverkehr an Ihre Anwendung weiterzuleiten

So generieren Sie eine URL aus einer HTML-Datei So generieren Sie eine URL aus einer HTML-Datei Apr 21, 2024 pm 12:57 PM

Für die Konvertierung einer HTML-Datei in eine URL ist ein Webserver erforderlich. Dazu sind die folgenden Schritte erforderlich: Besorgen Sie sich einen Webserver. Richten Sie einen Webserver ein. Laden Sie eine HTML-Datei hoch. Erstellen Sie einen Domainnamen. Leiten Sie die Anfrage weiter.

Was tun, wenn die Installation von phpmyadmin fehlschlägt? Was tun, wenn die Installation von phpmyadmin fehlschlägt? Apr 07, 2024 pm 03:15 PM

Schritte zur Fehlerbehebung bei fehlgeschlagener phpMyAdmin-Installation: Überprüfen Sie die Systemanforderungen (PHP-Version, MySQL-Version, Webserver); aktivieren Sie die PHP-Erweiterungen (mysqli, pdo_mysql, mbstring, token_get_all); überprüfen Sie die Konfigurationsdatei Berechtigungen (Verzeichnisbesitz, Dateiberechtigungen); Firewall-Einstellungen überprüfen (Webserver-Ports auf die Whitelist setzen); Fehlerprotokolle anzeigen (/var/log/apache2/error.log); phpMyAdmin

See all articles