Linux Sunucuda 502 Bad Gateway ve 504 Gateway Timeout Hatası Çözümü
Nginx, Apache, PHP-FPM ve servis timeout problemlerini adım adım çözme rehberi.
Web sitelerinde görülen 502 Bad Gateway ve 504 Gateway Timeout hataları, genellikle web sunucusunun arka taraftaki servisten doğru yanıt alamaması nedeniyle oluşur. Bu servis PHP-FPM, Apache backend, Node.js uygulaması, oyun paneli API servisi veya proxy arkasındaki başka bir uygulama olabilir.
Bu hatalar özellikle hosting, oyun paneli, WHMCS, Pterodactyl, özel yönetim paneli ve web tabanlı launcher sistemlerinde sık görülür.
1. 502 ve 504 Hatası Arasındaki Fark
- 502 Bad Gateway: Web sunucusu backend servise bağlanamıyor veya bozuk cevap alıyor.
- 504 Gateway Timeout: Backend servis cevap veriyor gibi görünüyor ama zamanında yanıt dönmüyor.
Yani 502 daha çok bağlantı/servis çökmesi, 504 ise yavaşlık veya timeout problemidir.
2. Servis Durumlarını Kontrol Etme
İlk olarak web sunucusu ve PHP servislerinin çalışıp çalışmadığını kontrol edin.
systemctl status nginx systemctl status apache2 systemctl status php-fpm
CentOS, AlmaLinux veya Rocky Linux sistemlerde PHP-FPM servisi şu isimle olabilir:
systemctl status php-fpm systemctl status httpd
Eğer servis durmuşsa yeniden başlatın:
systemctl restart nginx systemctl restart php-fpm
3. Log Dosyalarını İnceleme
502 ve 504 hatalarında tahminle ilerlemek doğru değildir. Log dosyası hatanın gerçek sebebini gösterir.
tail -n 100 /var/log/nginx/error.log tail -n 100 /var/log/apache2/error.log
CentOS tabanlı sistemlerde:
tail -n 100 /var/log/httpd/error_log
Loglarda şu ifadeler görülebilir:
- connect() failed: Backend servise bağlanılamıyor.
- upstream timed out: Backend servis geç cevap veriyor.
- connection refused: Servis kapalı veya yanlış porta yönlendirme var.
- permission denied: Socket veya dosya izin problemi var.
4. PHP-FPM Socket veya Port Kontrolü
Nginx, PHP-FPM'e socket veya port üzerinden bağlanır. Nginx config dosyasındaki PHP-FPM yolu ile gerçek PHP-FPM listen değeri aynı olmalıdır.
grep -R "fastcgi_pass" /etc/nginx/sites-enabled/ grep -R "listen =" /etc/php/*/fpm/pool.d/www.conf
Örneğin Nginx şunu kullanıyorsa:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
PHP-FPM tarafında da aynı socket dinlenmelidir:
listen = /run/php/php8.2-fpm.sock
5. Timeout Ayarlarını Artırma
Büyük işlem yapan panel, oyun marketi, API veya yavaş çalışan PHP scriptlerinde 504 hatası alınabilir. Nginx timeout değerleri artırılabilir.
nano /etc/nginx/nginx.conf
http bloğu içine veya ilgili server bloğuna şu değerler eklenebilir:
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; fastcgi_read_timeout 300;
Ayarları test edip Nginx'i yeniden başlatın:
nginx -t systemctl restart nginx
6. PHP-FPM Process Limitlerini Kontrol Etme
Trafik arttığında PHP-FPM işlem limitleri yetersiz kalabilir. Bu durumda istekler sıraya girer ve zaman aşımı oluşur.
nano /etc/php/8.2/fpm/pool.d/www.conf
Örnek ayarlar:
pm = dynamic pm.max_children = 30 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10
Sunucunun RAM miktarına göre bu değerler ayarlanmalıdır. Çok yüksek değer vermek RAM tüketimini artırır.
Sık Yapılan Hatalar
- Log dosyasına bakmadan ayar değiştirmek
- PHP sürümü değiştiği halde Nginx socket yolunu güncellememek
- Timeout artırıp asıl yavaş sorguyu düzeltmemek
- PHP-FPM limitlerini RAM hesabı yapmadan yükseltmek
- Nginx config test etmeden servisi yeniden başlatmak
FAQ
502 hatası her zaman Nginx kaynaklı mıdır?
Hayır. Nginx sadece hatayı gösteren taraftır. Asıl problem PHP-FPM, Apache backend, Node.js uygulaması veya başka bir serviste olabilir.
504 hatasında timeout artırmak kesin çözüm mü?
Her zaman değil. Timeout artırmak geçici rahatlama sağlar. Asıl çözüm yavaş sorgu, yoğun işlem veya performans problemini bulmaktır.
PHP-FPM restart etmek güvenli mi?
Genelde güvenlidir ancak aktif istekler kısa süre etkilenebilir. Yoğun sistemlerde düşük trafik saatleri tercih edilmelidir.
Performans Önerileri
- PHP-FPM sürüm ve socket yolunu düzenli kontrol edin.
- Web panel ve API servislerinde yavaş sorgu loglarını inceleyin.
- RAM yetersizse PHP-FPM max_children değerini bilinçsiz artırmayın.
- Cache sistemi kullanarak backend yükünü azaltın.
- Hata loglarını büyümeden logrotate ile yönetin.
Bu makale PvPSunucusu için özel olarak hazırlanmıştır.