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
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ğilsesystemctl restart php8.2-fpmdeneyin. Hemen tekrar durursa günlükleri okumaya geçin. - 2
Nginx hata günlüğünü inceleyin
/var/log/nginx/error.log(veyanginx -Tçıktısındaki yolu) açın.connect() failedveyano live upstreamsiçeren satırları arayın. Bunlar Nginx'in sokete veya porta bağlanamadığını gösterir. - 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
Nginx yapılandırmasındaki yolu eşleştirin
Site dosyasında (ör.
/etc/nginx/sites-enabled/example.conf)fastcgi_passveyaproxy_passdeğerini kontrol edin. Soket yolu veya port, arka ucun gerçekte kullandığıyla eşleşmelidir. Değişiklikten sonranginx -tardındansystemctl reload nginxçalıştırın. - 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 660ve uygun grup) ve her iki servisi yeniden başlatın. - 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
Sunucuda yerel erişimi test edin
Sunucudan
curl -I -H 'Host: example.com' http://127.0.0.1ve (uygulama o portu dinliyorsa)curl -I http://127.0.0.1:3000komutları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
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.