504 Gateway Timeout hatası, web sunucunuzda karşılaşabileceğiniz en can sıkıcı sorunlardan biridir. Özellikle yoğun trafik alan veya ağır işlemler yapan sitelerde sıkça görülür. Nginx, bir üst sunucudan (genelde PHP-FPM) yanıt alamadığında bu hatayı döndürür. Peki bu hatayı nasıl kesin olarak çözeriz? Gelin adım adım inceleyelim.
Hatanın Temel Sebebi: Zaman Aşımı
Nginx, proxy veya FastCGI üzerinden bir isteği arka uca ilettiğinde, belirli bir süre içinde yanıt alamazsa bağlantıyı keser ve 504 hatası üretir. Bu süre varsayılan olarak genelde 60 saniyedir. Eğer PHP betiğiniz bu süreyi aşarsa (örneğin veritabanı sorgusu, dosya işleme veya uzak API çağrısı gibi), kullanıcı 504 hatasıyla karşılaşır.
PHP-FPM Zaman Aşımı Ayarları
İlk olarak PHP-FPM tarafındaki request_terminate_timeout ve max_execution_time değerlerini kontrol etmelisiniz. Bu değerler, PHP betiğinin çalışma süresini sınırlar. Varsayılan 30 saniye olabilir. Bunu artırmak için:
- PHP-FPM pool yapılandırma dosyasını bulun (genelde /etc/php/8.x/fpm/pool.d/www.conf).
- request_terminate_timeout değerini 300 (5 dakika) veya ihtiyacınıza göre daha yüksek bir saniye olarak ayarlayın. Örnek: request_terminate_timeout = 300
- Aynı dosyada max_execution_time değerini de benzer şekilde artırın: php_admin_value[max_execution_time] = 300
- PHP-FPM servisini yeniden başlatın: sudo systemctl restart php8.x-fpm
Nginx Zaman Aşımı Ayarları
Nginx'in kendi zaman aşımı sürelerini de uzatmalısınız. Bunun için ilgili sunucu bloğunda veya http bloğunda aşağıdaki yönergeleri ekleyin:
- proxy_read_timeout (proxy kullanıyorsanız): proxy_read_timeout 300s;
- fastcgi_read_timeout (PHP-FPM ile doğrudan çalışıyorsanız): fastcgi_read_timeout 300s;
- Opsiyonel olarak proxy_connect_timeout ve proxy_send_timeout değerlerini de artırabilirsiniz.
Ayarları yaptıktan sonra Nginx'i yeniden yükleyin: sudo systemctl reload nginx
Önemli: Bu değerleri gereğinden fazla yüksek ayarlamak, sunucu kaynaklarını gereksiz yere tüketebilir. İhtiyacınızı doğru analiz edin.
Ek Çözümler ve İpuçları
Sunucu Kaynaklarını Kontrol Edin
Bazen zaman aşımı sorunu, yetersiz CPU, RAM veya disk I/O'dan kaynaklanır. top, htop veya free -m komutlarıyla kaynak kullanımını izleyin. Eğer VDS planınız yetmiyorsa, HızlıVDS üzerinden daha güçlü bir pakete yükseltmeyi değerlendirebilirsiniz.
PHP Kodunu Optimize Edin
Uzun süren sorguları iyileştirin. Örneğin, veritabanı indekslemesi, önbellek kullanımı (Redis, Memcached) veya asenkron işlemler (kullanıcıya sonucu hemen göstermek zorunda olmayan işleri arka planda çalıştırın) sorunu çözebilir.
Logları İnceleyin
Nginx error log (/var/log/nginx/error.log) ve PHP-FPM logları (/var/log/php8.x-fpm.log) size sorunun kaynağı hakkında ipucu verir. Hangi script'in zaman aşımına uğradığını görün.
Son Söz
504 Gateway Timeout hatası genellikle yapılandırma sorunudur. Yukarıdaki adımları uygulayarak PHP-FPM ve Nginx zaman aşımı değerlerini doğru ayarlayın, sunucu kaynaklarınızı optimize edin ve kodunuzu iyileştirin. Bu şekilde hatayı kalıcı olarak çözmüş olacaksınız. Unutmayın, her site farklıdır; bu nedenle ayarları ihtiyacınıza göre ince ayar yapın.