1. Nginx 502 Bad Gateway Hatasının Nedenleri
Öncelikle, 502 Bad Gateway hatasının ne olduğuna bir göz atalım. Bu hata, web sunucunuzun (bu durumda Nginx) bir istek aldığında, hedef sunucudan geçerli bir yanıt alamadığında ortaya çıkar. Yani, Nginx web sunucusu, istenen kaynağa erişmeye çalışırken başka bir sunucudan yanıt alamaz ve bu hata mesajını gösterir.
- PHP-FPM Çökmesi: Eğer siteniz PHP tabanlıysa ve PHP-FPM çalışmıyorsa, Nginx bu hatayı verebilir.
- Sunucu Zorlanması: Eğer sunucunuz çok fazla trafik alıyorsa veya sistem kaynakları (RAM, CPU) tükenmişse, Nginx istekleri işleyemeyebilir.
- Yanıt Zamanı Aşımı: Backend sunucusu çok yavaşsa, Nginx yanıt almak için belirli bir süre bekler ve zaman aşımına uğrayarak 502 hatası verir.
- Yanlış Yapılandırma: Nginx konfigürasyon dosyasındaki hatalar, isteklerin doğru şekilde yönlendirilmemesine yol açabilir.
Şimdi, bu hatayı nasıl düzelteceğimize geçelim.
2. Adım Adım 502 Bad Gateway Hatası Nasıl Düzeltilir?
İlk olarak, sunucunuzun sağlığını kontrol etmelisiniz. Eğer PHP-FPM veya web sunucusu çökmüşse, servisleri yeniden başlatmak gerekebilir. Aşağıdaki komutları kullanarak Nginx ve PHP-FPM servislerinin durumunu kontrol edebilirsiniz.
kopyala# Nginx durumunu kontrol et systemctl status nginx # PHP-FPM durumunu kontrol et systemctl status php7.4-fpm
Eğer bir problem varsa, aşağıdaki komutlarla servisleri yeniden başlatabilirsiniz:
kopyala# Nginx servisini yeniden başlat systemctl restart nginx # PHP-FPM servisini yeniden başlat systemctl restart php7.4-fpm
# Adım 2: Nginx ve PHP-FPM Konfigürasyonlarını Kontrol Et
Yanıt zaman aşımı veya yapılandırma hatalarından dolayı bu hatayı alabilirsiniz. Nginx ve PHP-FPM’in konfigürasyon dosyalarını gözden geçirmek önemlidir. Nginx’in konfigürasyon dosyası genellikle `/etc/nginx/nginx.conf` veya `/etc/nginx/sites-available/default` dosyasındadır. Dosyada, doğru `proxy_pass` ve `fastcgi_pass` değerlerinin kullanıldığından emin olun.
# Adım 3: Sunucu Kaynaklarını Kontrol Et
Sunucunuzun RAM ve CPU kullanımını kontrol etmek, yüksek yük nedeniyle Nginx’in yanıt alamadığı durumları önleyebilir. `htop` veya `top` komutları ile sunucunuzun kaynak kullanımını izleyebilirsiniz:
kopyala# Sunucu kaynaklarını kontrol et htop
Eğer kaynaklarınız tükenmişse, sunucuya ek kaynak eklemeyi düşünebilirsiniz. Ayrıca, gereksiz servisleri kapatarak, kaynak kullanımını azaltabilirsiniz.
# Adım 4: Log Dosyalarını İnceleyin
Nginx ve PHP-FPM log dosyaları, hatanın ne olduğunu anlamada size çok yardımcı olabilir. Nginx log dosyaları genellikle `/var/log/nginx/error.log` yolunda bulunur. PHP-FPM log dosyalarını ise `/var/log/php7.4-fpm.log` dosyasından kontrol edebilirsiniz.
kopyala# Nginx error log dosyasını kontrol et cat /var/log/nginx/error.log # PHP-FPM error log dosyasını kontrol et cat /var/log/php7.4-fpm.log
Bu log dosyalarındaki hatalar, sorunun ne olduğunu anlamanızı sağlayacaktır.
# Adım 5: Proxy ve Timeout Ayarlarını Düzenleyin
Eğer zaman aşımı hataları alıyorsanız, Nginx yapılandırmanızda bazı ayarları yapmanız gerekebilir. `proxy_read_timeout` ve `proxy_connect_timeout` gibi ayarları arttırarak bu sorunu çözebilirsiniz. Nginx konfigürasyon dosyasına şu satırları ekleyebilirsiniz:
kopyalaserver { ... location / { proxy_pass http://127.0.0.1:9000; proxy_connect_timeout 300; proxy_read_timeout 300; } }
Bu ayarlar, Nginx’in backend sunucuya daha uzun süre bağlantı kurmasını sağlar.
# Adım 6: Sunucu Yeniden Başlatma
Tüm bu işlemlerden sonra, sunucuyu yeniden başlatmanız gerekebilir. Yeniden başlatmak, yapılan tüm değişikliklerin aktif hale gelmesini sağlar:
kopyala# Sunucuyu yeniden başlat reboot
3. Nginx 502 Bad Gateway Hatasını Önlemek İçin Alınabilecek Önlemler
Bundan sonra, aynı hatayı tekrar almamak için bazı önlemler alabilirsiniz. İşte bazı öneriler:
- Load Balancer Kullanımı: Eğer yüksek trafikli bir siteniz varsa, yük dengelemesi yaparak, trafiği birden fazla sunucuya dağıtabilirsiniz.
- Otomatik Yeniden Başlatma: Eğer PHP-FPM veya Nginx çökerse, bu servislerin otomatik olarak yeniden başlatılmasını sağlayabilirsiniz. Bunun için `systemd` kullanabilirsiniz.
###