GNU/Linux >> Belajar Linux >  >> Linux

502 Kesalahan Gateway Buruk NGINX [Solusi]

Bagaimana perasaan Anda ketika klien Anda mengirimkan tangkapan layar situs webnya melalui WhatsApp yang bertuliskan 502 bad gateway NGINX  kesalahan? Tidak ada yang lebih buruk dari ini (untuk memulai hari Anda), bukan? Meskipun saya berharap Anda tidak memulai hari Anda seperti itu, saya akan menjelaskan cara memulihkan diri jika Anda berada dalam situasi itu.

Sebelum kita membahas masalah &solusinya, saya ingin mengingatkan bahwa lingkungan hosting saya didukung oleh server web NGINX dengan pengendali FPM PHP.

Alasan untuk kesalahan NGINX Gateway 502 Buruk

Saya mulai men-debug kesalahan dari log kesalahan NGINX (/var/log/nginx/nginx.log) dan menemukan pesan kesalahan di bawah ini.

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"

Jelas bahwa pesan kesalahan terkait dengan penangan PHP dan itu mengarahkan saya untuk melihat log kesalahan PHP-FPM di /var/log/php-fpm/error.log dan perhatikan pesan kesalahan di bawah ini:

[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

Sekarang jelas bahwa proses master PHP-FPM tidak dapat menelurkan proses anak baru karena pm.max_children mencapai batas, menyebabkan 502 kesalahan gateway yang buruk.

Cara memperbaiki kesalahan:server mencapai setelan pm.max_children, pertimbangkan untuk menaikkannya

Solusinya adalah meningkatkan pm.max_children batas berdasarkan spesifikasi server. Catatan, jangan membabi buta meningkatkan batas, karena jika situs web menerima lalu lintas besar, maka pekerja tidak pernah didaur ulang, penggunaan RAM akan bertambah tanpa batas dari waktu ke waktu dan server akan kehabisan memori.

Oleh karena itu, pm.max_children harus ditingkatkan secara hati-hati dan bertahap sambil memantau penggunaan swap.

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

Di sini 80MB adalah bobot rata-rata dari proses pekerja PHP-FPM.

Berdasarkan perhitungan di atas, naikkan nilai pm.max_children di masing-masing file konfigurasi domain PHP-FPM. Dalam kasus saya:  /etc/php-fpm.d/techglimpse.conf

pm = ondemand
pm.max_children = 200

Sekarang restart layanan PHP-FPM dan NGINX

systemctl restart php-fpm nginx
Catatan

Filter semua domain yang terpengaruh dengan pm.max_children dan terapkan setelan di atas hanya untuk yang terpengaruh.

Cara menemukan memori yang digunakan oleh aplikasi

Jalankan perintah di bawah ini untuk menemukan memori yang digunakan oleh masing-masing aplikasi.

#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

Dalam contoh di atas, MySQL menggunakan hampir 14% dari total memori.


Linux
  1. Hulu mengirim tajuk terlalu besar saat membaca tajuk respons dari hulu – kesalahan NGINX

  2. Kesalahan OpenCA – Panjang Kunci Simetris Terlalu Pendek [Solusi]

  3. Kesalahan Saat Menginstal Nginx Di Ubuntu 16.04?

  1. “Id buruk untuk repo:Repo Saya, byte =2” kesalahan pembaruan yum

  2. batas waktu gateway nginx 504

  3. perintah conda akan meminta kesalahan:Penerjemah Buruk:Tidak ada file atau direktori seperti itu

  1. nginx - 413 Permintaan Entitas Terlalu Besar

  2. Bagaimana kesalahan memori bit tunggal memengaruhi Linux?

  3. getpwnam(www) gagal di /etc/nginx/nginx.conf