sunucuhataları
teknik çözüm merkezi
Ara Giriş Yap Üye Ol
🏠 Ana Sayfa 📚 Kurulum Rehberleri
Kategoriler
🌐 Web Sunucuları 🐧 İşletim Sistemleri 📦 Sanallaştırma & VPS 🖥️ Kontrol Panelleri 🔒 SSL & Güvenlik 📝 CMS & Uygulamalar 🗄️ Veritabanı 📧 Mail Sunucusu 🗨️ Forum ℹ️ Hakkımızda 📧 İletişim
Giriş Yap Üye Ol
Ana Sayfa Web Sunucuları Nginx Kurulumu Nginx 502 Bad Gateway Hatası Nasıl Çözülür?
🟢 Nginx Kurulumu

Nginx 502 Bad Gateway Hatası Nasıl Çözülür?

Nginx 502 hatası PHP-FPM çökmesi veya backend bağlantı sorunlarından kaynaklanır. Servis kontrolü ve konfigürasyon düzeltmesiyle çözün.

📅 26 Aralık 2024 👁 58 görüntülenme ⏱ 5 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

Nginx 502 Bad Gateway Nedir?

Nginx 502 Bad Gateway hatası, Nginx'in proxy olarak çalışırken arkasındaki upstream (backend) sunucudan geçersiz veya hiç yanıt alamaması durumunda ürettiği bir HTTP hata kodudur. Nginx bu senaryoda bir ağ geçidi (gateway) gibi davranır: kendisi çalışıyor, istek alıyor; ancak PHP-FPM, Node.js, uWSGI, Gunicorn veya başka bir backend servise ilettiği isteğin yanıtını alamıyor.

Bu hata, Nginx'in kendi içinde bir sorun olmadığını; problem kaynağının Nginx'in arkasındaki uygulama katmanında olduğunu gösterir. En yaygın 502 nedeni PHP-FPM servisinin çökmüş, yeniden başlamış veya socket/port üzerinde dinlememiş olmasıdır. Bunun yanı sıra Node.js veya Python tabanlı uygulamaların işlem ölmesi, upstream timeout ayarlarının yetersizliği, yapılandırma dosyasındaki hatalı socket yolu ve kaynak yetersizliği de 502 hatasına yol açabilir.


Olası Nedenler

  • PHP-FPM servisi çalışmıyor: PHP-FPM çökmüş ya da yeniden başlatılmamış.
  • Yanlış socket/port yapılandırması: Nginx'in fastcgi_pass veya proxy_pass değeri PHP-FPM'in dinlediği socket ile uyuşmuyor.
  • Backend uygulama çökmüş: Node.js, uWSGI, Gunicorn süreci sonlanmış.
  • Yüksek yük nedeniyle bağlantı reddi: PHP-FPM max_children dolmuş, yeni bağlantıları reddediyor.
  • Upstream timeout: Backend yanıt vermesi çok uzun sürdü, Nginx beklemeyi bıraktı.
  • SELinux/AppArmor kısıtlaması: Güvenlik politikası Nginx'in sokete erişimini engelliyor.

Çözüm Adımları

Nginx Ortamında PHP-FPM ile

PHP tabanlı uygulamalar (WordPress, Laravel vb.) çalıştırıyorsanız ilk kontrol PHP-FPM servisi olmalıdır.

# PHP-FPM durumunu kontrol et
sudo systemctl status php8.2-fpm

# PHP-FPM başlat veya yeniden başlat
sudo systemctl restart php8.2-fpm

# PHP-FPM log dosyası
sudo tail -50 /var/log/php8.2-fpm.log

# PHP-FPM'in socket dosyasını kontrol et
ls -la /run/php/php8.2-fpm.sock

# Socket yoksa pool konfigürasyonunu kontrol et
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
# listen = /run/php/php8.2-fpm.sock
# listen.owner = www-data
# listen.group = www-data
# listen.mode = 0660

# Nginx site konfigürasyonuyla uyuştuğunu doğrula
sudo grep -r "fastcgi_pass" /etc/nginx/sites-enabled/
# fastcgi_pass unix:/run/php/php8.2-fpm.sock;

Nginx Konfigürasyonunu Kontrol Etme

Nginx yapılandırma dosyasındaki upstream ve fastcgi ayarlarını doğrulayın.

# Konfigürasyon testi
sudo nginx -t

# Hata varsa düzelt, yoksa yeniden yükle
sudo systemctl reload nginx

# Nginx error logunu incele
sudo tail -100 /var/log/nginx/error.log

# Upstream blok yapılandırması örneği (proxy için)
# upstream backend {
#     server 127.0.0.1:8080;
#     keepalive 32;
# }

# PHP için doğru location bloğu
# location ~ \.php$ {
#     include fastcgi_params;
#     fastcgi_pass unix:/run/php/php8.2-fpm.sock;
#     fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
# }

Node.js Backend ile Nginx 502

Node.js uygulaması çökmüşse Nginx 502 döndürür. PM2 ile uygulamayı otomatik yeniden başlatın.

# PM2 ile Node.js uygulamasını kontrol et
pm2 status
pm2 logs app-adi --lines 50

# Uygulamayı yeniden başlat
pm2 restart app-adi
pm2 save  # Yeniden başlatmayı kalıcı yap

# PM2 yoksa portu dinleyen süreci kontrol et
sudo lsof -i :3000  # Node.js genellikle 3000 portunda
sudo netstat -tlnp | grep :3000

# Uygulamayı manuel başlat
node /var/www/app/server.js &

# Nginx proxy_pass ile Node.js
# location / {
#     proxy_pass http://127.0.0.1:3000;
#     proxy_http_version 1.1;
#     proxy_set_header Upgrade $http_upgrade;
#     proxy_set_header Connection 'upgrade';
#     proxy_set_header Host $host;
#     proxy_cache_bypass $http_upgrade;
# }

Python (Gunicorn/uWSGI) ile Nginx 502

Django veya Flask uygulamalarında Gunicorn veya uWSGI backend'ini kontrol edin.

# Gunicorn servis durumu
sudo systemctl status gunicorn

# Gunicorn logları
sudo journalctl -u gunicorn -n 50

# Gunicorn'u yeniden başlat
sudo systemctl restart gunicorn

# uWSGI ile
sudo systemctl status uwsgi
sudo journalctl -u uwsgi -n 50

# Socket veya port dinleniyor mu?
sudo ss -tlnp | grep -E ':8000|:8080'
ls -la /tmp/gunicorn.sock 2>/dev/null || echo "Socket yok"

SELinux veya AppArmor Kısıtlaması

CentOS/AlmaLinux'ta SELinux, Nginx'in socket veya porta erişimini engelleyebilir.

# SELinux durumu
getenforce

# SELinux audit logunda nginx reddi var mı?
sudo ausearch -m AVC -ts recent | grep nginx

# Geçici olarak devre dışı bırak (test için)
sudo setenforce 0

# Kalıcı çözüm: Nginx'e httpd_can_network_connect izni ver
sudo setsebool -P httpd_can_network_connect on
sudo setsebool -P httpd_can_network_connect_db on

# AppArmor (Ubuntu)
sudo aa-status | grep nginx
sudo systemctl stop apparmor  # Test için

Yüksek Yük ve PHP-FPM Kapasite Artırma

Yüksek trafikli sitelerde PHP-FPM worker sayısını artırmak 502 hatalarını azaltır.

sudo nano /etc/php/8.2/fpm/pool.d/www.conf
# pm = dynamic
# pm.max_children = 50       # Sunucu RAM'ine göre ayarla (her worker ~30-50MB)
# pm.start_servers = 15
# pm.min_spare_servers = 10
# pm.max_spare_servers = 25
# pm.max_requests = 1000     # Bellek sızıntısına karşı

sudo systemctl restart php8.2-fpm

# Anlık worker durumu
sudo curl http://127.0.0.1/fpm-status 2>/dev/null

Özet ve Önleyici Tedbirler

  • PHP-FPM ve backend servislerini sistemd ile otomatik yeniden başlatacak şekilde yapılandırın.
  • Nginx upstream_check_module veya health check ile backend sağlığını izleyin.
  • PHP-FPM pm.max_children değerini sunucu RAM kapasitesine göre hesaplayın.
  • Socket yollarının hem Nginx hem PHP-FPM konfigürasyonunda aynı olduğunu periyodik olarak doğrulayın.
  • PM2, Supervisor veya systemd ile Node.js/Python servislerinin her zaman ayakta olmasını garanti altına alın.
  • Prometheus + Grafana ile PHP-FPM metriklerini gerçek zamanlı izleyin.

İlgili Makaleler

🤔 Bu kurulumda sorun mu yaşıyorsunuz?

Hata mesajınızı kopyalayıp foruma konu açın. Topluluğumuz size özel durumunuza göre yardımcı olacaktır.

🗨️ Foruma Katıl & Yardım Al
Etiketler: #nginx #linux #5xx-hata #php-fpm

Yorumlar

Henüz yorum yok. İlk yorumu siz yapın!

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanır.