İçeriğe geç

Nginx 502 Bad Gateway: siteyi nasıl tekrar çalıştırırsınız

Orta 15 dk Güncellendi:

Kısa cevap

502 Bad Gateway hatası, Nginx'in arka uç servisten (PHP-FPM, Node.js, Gunicorn) geçerli bir yanıt alamadığı anlamına gelir. Arka uç sürecinin çalışıp çalışmadığını, soketlerin ve portların erişilebilir olup olmadığını ve günlüklerin hatalarla dolu olup olmadığını kontrol edin. Çoğu durumda çözüm, arka uç servisini yeniden başlatmak veya yapılandırmayı düzeltmektir.

Sorun nasıl anlaşılır

  • Site, 502 Bad Gateway metniyle beyaz bir sayfa gösteriyor
  • Bazı sayfalar çalışıyor, ancak dinamik sayfalar (PHP, API) 502 döndürüyor
  • Nginx hata günlüğünde connect() failed görünüyor
  • Arka uç servisi (PHP-FPM, Node) çöktü veya yeniden başlatılıyor
  • 502 aralıklı olarak, özellikle yük altında ortaya çıkıyor

En yaygın nedenler

Arka uç servisi çalışmıyor

PHP-FPM, Node.js, Gunicorn veya başka bir uygulama sunucusu çöktü ya da durduruldu. Nginx'in isteği iletecek bir yeri yok.

Yapılandırmada yanlış soket veya port

Nginx, var olmayan bir Unix soketine veya arka ucun dinlemediği bir porta yönlendiriyor. Hata, yapılandırma değişikliği veya yükseltmeden sonra da ortaya çıkar.

Aşırı yüklenmiş arka uç

PHP-FPM veya uygulama tüm kaynakları tüketirse yeni istekleri kabul edemez. Nginx bu durumda 502 veya 504 döndürür.

Soket üzerindeki izinler

Nginx kullanıcısının (ör. www-data veya nginx) Unix soketine erişim hakkı yok. Bu genellikle sahiplik veya SELinux politikası değiştikten sonra olur.

Arka uç koddaki hata nedeniyle çöküyor

Uygulamadaki ölümcül bir hata çalışan süreci çökertebilir. Günlüklerde segfault veya PHP Fatal error görülür.

Adım adım çözüm

  1. 1

    Arka uç servisinin durumunu kontrol edin

    systemctl status php8.2-fpm (veya ilgili servis: php-fpm, node, gunicorn) komutunu çalıştırın. Servis etkin değilse systemctl restart php8.2-fpm deneyin. Hemen tekrar durursa günlükleri okumaya geçin.

  2. 2

    Nginx hata günlüğünü inceleyin

    /var/log/nginx/error.log (veya nginx -T çıktısındaki yolu) açın. connect() failed veya no live upstreams içeren satırları arayın. Bunlar Nginx'in sokete veya porta bağlanamadığını gösterir.

  3. 3

    Arka ucun dinleyip dinlemediğini kontrol edin

    Unix soketi için: ls -l /run/php/php8.2-fpm.sock. TCP portu için: ss -tlnp | grep 3000. Çıktı yoksa arka uç dinlemiyor demektir ve sorun onun yapılandırmasında veya başlatılmasındadır.

  4. 4

    Nginx yapılandırmasındaki yolu eşleştirin

    Site dosyasında (ör. /etc/nginx/sites-enabled/example.conf) fastcgi_pass veya proxy_pass değerini kontrol edin. Soket yolu veya port, arka ucun gerçekte kullandığıyla eşleşmelidir. Değişiklikten sonra nginx -t ardından systemctl reload nginx çalıştırın.

  5. 5

    Soket üzerindeki izinleri kontrol edin

    Soket, arka ucun çalıştığı kullanıcıya ait olmalı ve Nginx kullanıcısının erişimi olmalıdır. Gerekirse izinleri ayarlayın (ör. chmod 660 ve uygun grup) ve her iki servisi yeniden başlatın.

  6. 6

    Uygulama günlüklerini izleyin

    PHP hata günlüğüne (/var/log/php8.2-fpm.log), journalctl -u php8.2-fpm -n 50 çıktısına veya uygulama günlüğüne bakın. Ölümcül hatalar görürseniz, yeniden başlatmaya devam etmeden önce kodu veya yapılandırmayı düzeltin.

  7. 7

    Sunucuda yerel erişimi test edin

    Sunucudan curl -I -H 'Host: example.com' http://127.0.0.1 ve (uygulama o portu dinliyorsa) curl -I http://127.0.0.1:3000 komutlarını çalıştırın. Yerelde çalışıp dışarıdan çalışmıyorsa sorun ağ, güvenlik duvarı veya Nginx yapılandırmasındadır.

  8. 8

    Servisleri sırayla yeniden başlatın

    Önce arka ucu (systemctl restart php8.2-fpm), sonra Nginx'i (systemctl restart nginx) yeniden başlatın. Ardından siteyi yeniden yükleyin. 502 hala varsa günlüklere geri dönün.

Hiçbir şey işe yaramazsa

Servisler etkinse, soketler erişilebilirse ve günlüklerde belirgin bir hata yoksa sorunun ağda mı yoksa SELinux'ta mı olduğunu kontrol edin. getenforce komutu SELinux'un Enforcing modunda olup olmadığını gösterir; test için geçici olarak Permissive (setenforce 0) yapabilirsiniz, ancak mutlaka Enforcing (setenforce 1) moduna geri döndürün. Ayrıca diskin dolu olup olmadığını (df -h) ve yeterli belleğin olup olmadığını (free -m) kontrol edin. 502 yalnızca yük altında ortaya çıkıyorsa PHP-FPM süreç sayısını veya Nginx'teki worker_connections değerini artırın. Üretim ortamı için, kullanıcılar hatayı fark etmeden önce sizi uyaracak bir izleme çözümü düşünün.

Tekrarlanmaması için

  • Arka uç servislerinin çalışmasını düzenli olarak izleyin ve çökme için alarm kurun
  • Nginx ve PHP-FPM yapılandırmasını gerçek soketlerle uyumlu tutun
  • Kaynak tüketimini izleyin ve limitleri zamanında artırın
  • Yapılandırma değişikliklerini reload öncesinde `nginx -t` ile test edin

Ne zaman uzmana başvurmalı

Hata tekrarlanıyor ve yapılandırma veya kod değişikliği gerektiriyorsa ya da günlüklere ve root izinlerine erişiminiz yoksa, IT desteğini aramanız daha iyidir. Nedeni hızla izole edebilir ve sitenin daha uzun süre kesintiye uğramasını önleyebilirler.

BT altyapı bakımı · Sunucular, ağlar, yedekleme, güvenlik ve yardım masası

Sık sorulan sorular

502 ile 504 aynı şey mi?

Hayır. 502, arka ucun geçersiz bir yanıt döndürdüğü veya Nginx'in bağlanamadığı anlamına gelir; 504 ise arka ucun çok uzun süre sessiz kaldığı anlamına gelir. Pratikte genellikle benzer şekilde, arka uç servisi ve günlükler kontrol edilerek çözülür.

502 neden yalnızca bazı sayfalarda ortaya çıkıyor?

Statik dosyaları Nginx doğrudan sunar, bu yüzden çalışırlar. Dinamik sayfalar arka uca bağlıdır, bu yüzden 502 bildirirler. Bu, sorunun Nginx'te değil uygulama sunucusunda olduğunu doğrular.

Yalnızca PHP-FPM'i yeniden başlatabilir miyim?

Evet, sorun PHP-FPM'deyse `systemctl restart php8.2-fpm` yeterlidir. Nginx'i yalnızca yapılandırmasını değiştirdiyseniz veya sorun devam ediyorsa yeniden başlatın.

Paylaş
Çözüm bulamadınız mı?AI BT asistanı 7/24 hizmetinizde. Sorunu anlatın veya hatanın ekran görüntüsünü gönderin, durumunuza özel talimat alın.AI BT asistanına sorun