GNU/Linux >> LINUX-Kenntnisse >  >> Linux

502 Bad Gateway Error NGINX [Lösung]

Wie fühlen Sie sich, wenn Ihr Kunde einen Screenshot seiner Website mit der Aufschrift 502 Bad Gateway NGINX per WhatsApp sendet? Error? Nichts kann schlimmer sein als das (um in den Tag zu starten), oder? Obwohl ich wünschte, Sie sollten Ihren Tag nicht so beginnen, werde ich Ihnen erklären, wie Sie sich erholen können, wenn Sie in diese Situation geraten.

Bevor wir das Problem und seine Lösung diskutieren, möchte ich daran erinnern, dass meine Hosting-Umgebung von einem NGINX-Webserver mit einem FPM-PHP-Handler betrieben wird.

Grund für 502 Bad Gateway NGINX-Fehler

Ich habe mit dem Debuggen des Fehlers aus dem NGINX-Fehlerprotokoll (/var/log/nginx/nginx.log) begonnen und die folgende Fehlermeldung gefunden.

2019/12/11 04:30:43 [error] 27570#27570: *48599 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 17.58.98.98, server: techglimpse.com, request: "GET /pure-css3-shapes/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "techglimpse.com"

Es ist offensichtlich, dass die Fehlermeldung mit dem PHP-Handler zusammenhängt, und das hat mich umgeleitet, in das PHP-FPM-Fehlerprotokoll unter /var/log/php-fpm/error.log zu schauen und folgende Fehlermeldung bemerkt:

[08-Dec-2019 03:30:01] NOTICE: error log file re-opened
[10-Dec-2019 21:00:16] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it

Jetzt ist klar, dass der PHP-FPM-Masterprozess aufgrund von pm.max_children keine neuen untergeordneten Prozesse erzeugen kann Erreichen des Limits, verursacht 502 Bad Gateway-Fehler.

So beheben Sie den Fehler:Der Server hat die pm.max_children-Einstellung erreicht, erwägen Sie, ihn zu erhöhen

Die Lösung besteht darin, pm.max_children zu erhöhen Limit basierend auf den Serverspezifikationen. Beachten Sie, dass Sie das Limit nicht blind erhöhen, denn wenn die Website sehr viel Traffic erhält, werden die Worker nie wiederverwendet, die RAM-Nutzung wird mit der Zeit unbegrenzt zunehmen und der Server wird in einem Zustand mit unzureichendem Speicher sein.

Daher pm.max_children sollte vorsichtig und schrittweise erhöht werden, während die Swap-Nutzung überwacht wird.

pm.max_children = ((total RAM in MB) - (RAM usage by MySQL and others taken together in MB)) / 80
Notiz

Hier sind 80 MB das durchschnittliche Gewicht eines PHP-FPM-Worker-Prozesses.

Erhöhen Sie basierend auf der obigen Berechnung den pm.max_children-Wert in der entsprechenden Domänenkonfigurationsdatei von PHP-FPM. In meinem Fall:  /etc/php-fpm.d/techglimpse.conf

pm = ondemand
pm.max_children = 200

Starten Sie nun die PHP-FPM- und NGINX-Dienste neu

systemctl restart php-fpm nginx
Notiz

Filtern Sie alle betroffenen Domains mit pm.max_children und wenden Sie die obigen Einstellungen nur auf die betroffenen an.

So finden Sie den von Anwendungen verwendeten Speicher

Führen Sie den folgenden Befehl aus, um den von den jeweiligen Anwendungen verwendeten Speicher zu finden.

#ps -o pid,user,%mem,command ax | sort -b -k3 -r

PID USER %MEM COMMAND
1355 mysql 14.5 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
543 root 0.3 /usr/lib/systemd/systemd-journald
9254 nginx 0.3 php-fpm: pool www
9251 nginx 0.3 php-fpm: pool www

Im obigen Beispiel verwendet MySQL fast 14 % des Gesamtspeichers.


Linux
  1. Fehler bei der Installation von Nginx unter Ubuntu 16.04?

  2. „Bad id for repo:My Repo, byte =2“ yum update error

  3. nginx 504-Gateway-Timeout

  4. Wie wirkt sich ein Single-Bit-Speicherfehler auf Linux aus?

  5. Fehler:Ungültiger Befehl „nospoof on“ in der Datei /etc/host.conf

Behebung des Nginx-Fehlers:413 Request Entity Too Large

PlaySMS Kannel SMS Gateway-Integration auf NGINX+Debian

Wie man Worker-Verbindungen repariert, ist nicht genug Fehler auf Nginx

So beheben Sie das 504-Gateway-Timeout auf Nginx

So beheben Sie den Fehler 502 Bad Gateway auf Nginx

Der conda-Befehl zeigt den Fehler an:Bad Interpreter:No such file or directory