Ödeme Yöntemleri Abuse

Nginx 504 ağ geçidi zaman aşımını düzeltme

20.02.2024, 23:31

Nginx'te 504 Ağ Geçidi Zaman Aşımı hatası, Nginx çalıştıran sunucunun belirtilen süre içinde proxy sunucudan yanıt alamadığı anlamına gelir. Bu genellikle proxy sunucusunun belirtilen süre içinde isteği işleyememesi veya Nginx ile proxy sunucusu arasındaki bağlantı sorunları nedeniyle olur.

504 Ağ Geçidi Zaman Aşımı neden görünür?

Hata, Nginx sunucusu proxy modunda çalışırken ortaya çıkar. Bu php-fpm veya Apache kullanıldığında olur. İngilizce'den Rusça'ya çevirirsek, aşağıdakileri elde ederiz - sunucudan yanıt bekleme süresi aşıldı.

Bu davranışın birkaç nedeni olabilir:

  • PHP veya başka bir dil betiği tamamen kilitlenmiştir ve artık yanıt vermeyecektir;
  • betik çok uzun bir süredir çalışıyor, ancak Nginx, hedef sunucu ayrılan süre içinde isteğe yanıt vermediyse bağlantıyı sıfırlamak için yapılandırılmış bir aralığa sahip;
  • sunucu aşırı yüklenmiştir ve tüm istemcilere hizmet vermek ve tüm Nginx isteklerine yanıt döndürmek için zamanı yoktur.

Şimdi ne yapabileceğinizden ve 504 Ağ Geçidi Zaman Aşımı hatasını nasıl düzeltebileceğinizden bahsedelim.

504 ağ geçidi zaman aşımı Nginx nasıl düzeltilir?

Pratikte denenmesi gereken ilk şey, sunucunuz, php-fpm veya apache bellek veya CPU gibi sistem kaynaklarından yoksunsa, free komutunu kullanarak boş RAM'e bakın:

$ free -h

CPU yükünü htop komutu ile öğrenebilirsiniz:

$ htop

PHP'nin tüm CPU zamanını aldığını görürseniz, sorun sunucu kaynaklarıyla ilgili demektir. Site motoru ile uğraşmayı deneyebilir, kaynağı optimize edebilir veya güçlü bir VPS sunucusu seçebilirsiniz.

İkinci seçenek - betiğin uzun süre çalışması planlanmışsa. Bu durumda, Nginx'i Apache veya php-fpm'den yanıt bekleyecek şekilde yapılandırmanız gerekir. Php-fpm durumunda sorunu çözmek için, fastgci yapılandırma bloğuna yalnızca iki satır eklemeniz gerekir:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300, 300 saniye anlamına gelir, çoğu komut dosyası için bu yeterlidir, ancak gerekirse daha fazlasını ayarlamak da zor değildir. Ayrıca Nginx, Apache veya başka bir web sunucusu için proxy olarak kullanıldığında 504 hatası oluşabilir, bu durumda proxy zaman aşımını da yapılandırmanız gerekir.

Bu satırları sunucu bölümüne ekleyin:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

Bu durumda 600 saniyelik bir zaman aşımımız var.

Şimdi Nginx'i yeniden başlatmamız gerekiyor:

$ sudo systemctl restart nginx

Betik takılırsa başka bir neden ve çözümü. Eğer betiği kendiniz çalıştırırsanız neyin takıldığını hemen görürsünüz ancak kullanıcılar tarafından böyle bir hata ile karşılaşılıyorsa bu daha ciddi bir sorundur. Kullanıcılarınızın bu tür hatalarla karşılaşıp karşılaşmadığını ve nerede oluştuğunu komutu kullanarak görebilirsiniz:

$ fgrep -i " 504 " /var/log/nginx/access.log

Daha detaylı bilgi bazen error.log dosyasında görülebilir:

$ fgrep -i " 504 " /var/log/nginx/error.log

Ayrıca, eğer sorun php-fpm ise, yerleşik slow-log fonksiyonunu kullanarak hangi betiklerin yavaş çalıştığını takip edebilirsiniz.

Bunu etkinleştirmek için aşağıdaki satırları havuz yapılandırmanıza ekleyin:

$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

Bu talimatları tamamlar.