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.
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:
Şimdi ne yapabileceğinizden ve 504 Ağ Geçidi Zaman Aşımı hatasını nasıl düzeltebileceğinizden bahsedelim.
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.