Nginx 502 Bad Gateway Hatası Nasıl Çözülür? Nedenleri ve Çözümleri
Nginx 502 Bad Gateway hatası, Nginx'in reverse proxy olarak iletişim kurduğu backend uygulamasından geçerli bir yanıt alamadığını gösterir. Node.js ve PM2 kullanılan sunucularda en sık nedenler uygulamanın durmuş olması, yanlış porta proxy yapılması, uygulamanın sürekli çökmesi veya Nginx'in backend'e bağlanamamasıdır.
Örneğin yapı:
Kullanıcı → Nginx → Node.js uygulaması
şeklindeyse ve Nginx çalışıyor ancak Node.js uygulamasına ulaşamıyorsa kullanıcı karşısında:
502 Bad Gatewayhatası görebilir.
1. Önce uygulamanın çalışıp çalışmadığını kontrol edin
PM2 kullanıyorsanız:
pm2 statusveya:
pm2 listkomutunu çalıştırın.
Uygulamanızın durumu:
onlineolmalıdır.
Eğer:
- stopped
- errored
- launching
gibi bir durum görüyorsanız önce uygulamanın neden çalışmadığını araştırın.
2. PM2 loglarını kontrol edin
Uygulama sürekli kapanıyorsa:
pm2 logskomutunu kullanabilirsiniz.
Belirli bir uygulama için:
pm2 logs uygulama-adikullanılabilir.
Burada örneğin:
- Veritabanı bağlantı hatası
- Eksik environment değişkeni
- Port çakışması
- JavaScript hatası
- Dosya bulunamadı hatası
- Permission hatası
görülebilir.
502 hatasının gerçek nedeni çoğu zaman Nginx'ten ziyade backend uygulamasında bulunur.
3. Backend portunu kontrol edin
Node.js uygulamanız örneğin:
127.0.0.1:3000üzerinde çalışıyorsa Nginx'in de aynı hedefe proxy yapması gerekir.
Nginx yapılandırmasında örneğin:
proxy_pass http://127.0.0.1:3000;bulunabilir.
Ancak uygulama gerçekte:
4000portunda çalışıyorsa Nginx yanlış porta istek gönderdiği için bağlantı başarısız olur.
Uygulamanın hangi portu dinlediğini kontrol edin.
4. Backend'e doğrudan istek gönderin
Nginx'i devre dışı bırakarak backend'in kendisini test etmek sorunun hangi katmanda olduğunu anlamayı kolaylaştırır.
Örneğin uygulama 3000 portundaysa sunucunun kendi terminalinden:
curl http://127.0.0.1:3000çalıştırabilirsiniz.
Uygulama cevap veriyorsa backend ayaktadır.
Cevap alınamıyorsa sorun büyük ihtimalle Node.js uygulaması, port veya servis tarafındadır.
Bu yöntem:
Nginx mi sorunlu, uygulama mı sorunlu?
sorusunu hızlı şekilde ayırmaya yardımcı olur.
5. Port gerçekten dinleniyor mu kontrol edin
Sunucuda dinlenen portları görmek için:
ss -lntpkullanılabilir.
Belirli bir port için:
ss -lntp | grep 3000çalıştırabilirsiniz.
Hiçbir sonuç görünmüyorsa uygulama beklediğiniz portu dinlemiyor olabilir.
6. Nginx yapılandırmasını kontrol edin
Yapılandırmada değişiklik yaptıysanız:
sudo nginx -tkomutunu çalıştırın.
Başarılı yapılandırmada syntax kontrolünün başarılı olduğuna ilişkin mesaj görmelisiniz.
Hata varsa Nginx'i yeniden yüklemeden önce yapılandırmayı düzeltin.
Doğrulama başarılı olduktan sonra uygun sistemlerde:
sudo systemctl reload nginxkullanılabilir.
reload, çalışan bağlantıları gereksiz yere kesmeden yeni yapılandırmanın yüklenmesi açısından çoğu yapılandırma değişikliğinde tercih edilebilir.7. Nginx error.log dosyasını kontrol edin
502 hatasında en önemli kaynaklardan biri Nginx hata logudur.
Genellikle:
/var/log/nginx/error.logaltında bulunur.
Son kayıtları görmek için:
sudo tail -n 100 /var/log/nginx/error.logkullanabilirsiniz.
Canlı takip için:
sudo tail -f /var/log/nginx/error.logkullanılabilir.
Örneğin:
connect() failed (111: Connection refused) while connecting to upstreambenzeri bir mesaj görüyorsanız Nginx backend'e bağlanamıyor olabilir.
Bu durumda port ve uygulama durumu kontrol edilmelidir.
8. Connection refused ne anlama gelir?
Nginx logunda upstream için
Connection refused görüyorsanız çoğunlukla hedef IP ve port üzerinde bağlantıyı kabul eden bir servis bulunmamaktadır.Örneğin Nginx:
127.0.0.1:3000adresine bağlanmaya çalışıyor ancak Node.js durmuşsa 502 oluşabilir.
Kontrol edin:
pm2 statusss -lntp | grep 3000curl http://127.0.0.1:3000Bu üç kontrol sorunun kaynağını hızlıca daraltabilir.
9. Uygulama sürekli restart oluyorsa
PM2 üzerinde uygulamanın restart sayısı sürekli artıyorsa backend kararlı çalışmıyor olabilir.
Kontrol için:
pm2 describe uygulama-adive:
pm2 logs uygulama-adikullanabilirsiniz.
Sürekli yeniden başlama nedenleri arasında:
- Uygulama hataları
- Veritabanı bağlantısının başarısız olması
- Eksik environment değişkenleri
- Bellek problemleri
- Port çakışması
- Başlangıç sırasında oluşan exception
bulunabilir.
Sadece:
pm2 restartçalıştırmak asıl hatayı çözmeyebilir.
10. Environment değişkenlerini kontrol edin
Uygulamanız:
-
DATABASE_URL-
PORT- API anahtarları
- Session secret
gibi environment değişkenlerine ihtiyaç duyabilir.
Terminalde manuel başlatıldığında çalışan uygulama PM2 üzerinden başlatıldığında farklı environment kullanıyorsa hata verebilir.
PM2 yapılandırmasını ve uygulamanın environment yönetimini kontrol edin.
Hassas değerleri loglarda veya herkese açık dosyalarda paylaşmayın.
11. Veritabanı bağlantısı 502 oluşturabilir mi?
Dolaylı olarak evet.
Örneğin Node.js uygulaması PostgreSQL'e bağlanamadığında tamamen kapanıyorsa:
Nginx → Node.js
bağlantısı artık kurulamaz.
Sonuçta kullanıcı 502 görebilir.
Bu durumda:
systemctl status postgresqlgibi uygun servis kontrolü yapılabilir.
Ancak veritabanının çalışıyor olması uygulamanın doğru bağlantı bilgilerine sahip olduğunu garanti etmez.
PM2 logları burada önemlidir.
12. Uygulamanın hangi IP adresini dinlediğini kontrol edin
Uygulama:
127.0.0.1veya:
0.0.0.0üzerinde dinleyebilir.
Nginx'in
proxy_pass hedefiyle uygulamanın dinlediği adresin uyumlu olması gerekir.Aynı sunucudaki Node.js uygulamasına reverse proxy yapılıyorsa localhost üzerinden bağlantı yaygın bir yöntemdir.
Backend portunu gereksiz yere internete açmak yerine yalnızca yerel bağlantıya izin vermek güvenlik açısından daha uygun olabilir.
13. Unix socket kullanılıyorsa izinleri kontrol edin
Nginx backend'e TCP portu yerine Unix socket üzerinden bağlanıyorsa socket dosyasının:
- Var olması
- Doğru konumda bulunması
- Nginx tarafından erişilebilir olması
gerekir.
Yanlış socket yolu veya permission problemi de upstream bağlantısının başarısız olmasına neden olabilir.
14. Firewall 502 hatasına neden olabilir mi?
Nginx ile backend aynı sunucudaysa ve localhost kullanılıyorsa genellikle dış firewall kurallarından farklı bir durum söz konusudur.
Ancak backend başka bir sunucudaysa:
- Firewall
- Security group
- Ağ kuralları
- Backend'in dinlediği IP
kontrol edilmelidir.
Güvenlik duvarını tamamen kapatmak yerine yalnızca gerekli bağlantının doğru şekilde izinli olduğundan emin olun.
15. 502 ile 504 arasındaki fark nedir?
Bu iki hata karıştırılabilir.
502 Bad Gateway:
Nginx upstream'den geçerli yanıt alamamıştır veya bağlantı kurulmasında sorun yaşanmıştır.
504 Gateway Timeout:
Nginx upstream'den gerekli yanıtı beklemiş ancak zaman aşımına uğramıştır.
Örneğin backend tamamen kapalıysa 502 görülebilir.
Backend çalışıyor ancak bir işlem çok uzun sürüyorsa 504 görülebilir.
Gerçek nedeni belirlemek için loglara bakılmalıdır.
16. Nginx'i restart etmek 502'yi çözer mi?
Bazen yapılandırma değişikliğinin uygulanmasını sağlayabilir ancak 502'nin asıl nedeni backend uygulamasının kapalı olmasıysa Nginx'i yeniden başlatmak sorunu çözmez.
Önce:
sudo nginx -tardından gerekiyorsa:
sudo systemctl reload nginxkullanılabilir.
Sorunu anlamadan sürekli Nginx restart yapmak doğru hata ayıklama yöntemi değildir.
17. PM2 restart etmek yeterli mi?
Uygulama geçici olarak durmuşsa:
pm2 restart uygulama-adiuygulamayı tekrar çalıştırabilir.
Ancak uygulama birkaç saniye sonra yeniden çöküyorsa logları incelemek gerekir.
Şu döngü:
başlat → çök → PM2 restart → tekrar çökdevam ederken kullanıcılar 502 hatası görebilir.
Asıl uygulama hatası düzeltilmelidir.
18. Sunucu yeniden başladıktan sonra 502 oluşuyorsa
Reboot sonrasında:
- Nginx başlamış
- Node.js uygulaması başlamamış
olabilir.
Bu durumda Nginx gelen isteği backend'e gönderir ancak bağlantı kuramaz.
PM2 için:
pm2 startupve:
pm2 saveyapılandırmasının doğru olduğundan emin olun.
Reboot sonrasında:
pm2 listile uygulamanın otomatik başladığını doğrulayın.
19. Disk doluluğunu kontrol edin
Diskin tamamen dolması uygulama ve servislerde beklenmeyen hatalara neden olabilir.
Kontrol etmek için:
df -hkullanın.
Disk kritik seviyedeyse:
- Loglar
- Eski yedekler
- Cache
- Upload dosyaları
kontrol edilmelidir.
Ancak disk açmak için sistem veya veritabanı dosyalarını rastgele silmeyin.
20. RAM durumunu kontrol edin
Uygulama bellek yetersizliği nedeniyle kapanıyorsa 502 ortaya çıkabilir.
Temel kontrol için:
free -hkullanabilirsiniz.
Process'leri incelemek için:
topveya sisteminizde kuruluysa:
htopkullanılabilir.
Kernel tarafından bir process'in bellek nedeniyle sonlandırıldığından şüpheleniyorsanız sistem logları da incelenmelidir.
502 hatası için hızlı kontrol sırası
Bir Node.js + PM2 + Nginx sunucusunda 502 görüyorsanız şu sırayla ilerleyebilirsiniz:
1.
pm2 status2.
pm2 logs uygulama-adi3.
ss -lntp4.
curl http://127.0.0.1:PORT5. Nginx
proxy_pass hedefini kontrol edin.6.
sudo nginx -t7.
/var/log/nginx/error.log dosyasını inceleyin.8.
df -h ile disk alanını kontrol edin.9.
free -h ile RAM durumuna bakın.10. Veritabanı gibi bağımlı servisleri kontrol edin.
Bu sıra genellikle sorunun hangi katmanda olduğunu hızlı şekilde belirlemeye yardımcı olur.
Sık yapılan hatalar
Nginx 502 sorununda sık yapılan yanlışlar:
- Loglara bakmadan sürekli Nginx restart etmek
- PM2
online durumunu görüp backend'i ayrıca test etmemek- Yanlış
proxy_pass portu kullanmak- Environment değişkenlerini unutmak
- Uygulamanın restart loop'a girdiğini fark etmemek
- Firewall'u tamamen kapatmak
- Nginx yapılandırmasını
nginx -t yapmadan uygulamak- Veritabanı sorununu Nginx sorunu sanmak
Özetle, Nginx 502 Bad Gateway hatasında ilk kontrol edilmesi gereken yer çoğu zaman Nginx'in arkasında çalışan backend uygulamasıdır. PM2 durumunu ve loglarını kontrol edin, backend portuna doğrudan istek gönderin ve ardından Nginx
proxy_pass yapılandırmasını inceleyin.Node.js + PM2 + Nginx yapısında en etkili teşhis yöntemi, sistemi Nginx → backend → veritabanı ve diğer bağımlılıklar şeklinde katmanlara ayırarak hangi noktada bağlantının koptuğunu bulmaktır.
