Ana içeriğe geç

502 Bad Gateway: aslında ne anlama gelir ve nasıl düzeltilir

· 3 dakikalık okuma
Customer Care Engineer

502-bad-gateway-error-nginx-php-fpm-fix-guide

Web sitenizi açarsınız ve içerik yerine 502 Bad Gateway yazan boş bir sayfa görürsünüz. Korkutucu görünür, ancak çoğu durumda çözüm basittir. Neler olduğunu ve sitenizi nasıl geri getireceğinizi inceleyelim.

502 aslında ne anlama gelir?

Bir ziyaretçi bir sayfa istediğinde, istek genellikle iki katmandan geçer: bir frontend web sunucusu (genellikle Nginx) ve bir backend uygulama sunucusu (PHP-FPM, Apache, Node.js veya başka bir şey). Nginx isteği alır, backend'e iletir ve bir yanıt bekler.

Bir 502 Bad Gateway, Nginx'in backend'den yanıt almaya çalıştığı ancak geçersiz bir şey aldığı veya hiç yanıt alamadığı anlamına gelir. Backend ya çökmüştür, bağlantıyı reddetmiştir ya da Nginx'in anlamlandıramadığı bir şey döndürmüştür.

bilgi

Yaygın bir yanlış kanı: 502, sunucunuzun kapalı olduğu anlamına gelmez. Sunucunun kendisi iyidir - zorlanan şey Nginx'in arkasındaki uygulamadır.

En yaygın nedenler

Backend hizmeti durmuş. Bu bir numaralı nedendir. PHP-FPM çökmüş, Apache takılmış veya bir Node.js süreci sessizce sonlanmış olabilir. Nginx'in iletişim kuracağı hiçbir şey kalmaz.

Sunucuda RAM tükeniyor. Bellek azaldığında Linux, çok kaynak tüketen süreçleri otomatik olarak sonlandırabilir. Bu mekanizmaya OOM killer denir ve PHP-FPM veya MySQL genellikle ilk kurbanları olur. Bu düzenli olarak oluyorsa, bir güvenlik ağı olarak swap dosyası eklemeyi düşünün.

PHP-FPM worker havuzu tükenmiş. Siteniz PHP-FPM'in kaldırabileceğinden daha fazla eşzamanlı istek alırsa, yeni istekler kuyrukta bekler ve sonunda zaman aşımına uğrar. Bu durum genellikle arama motoru botları sitenizi aşırı agresif şekilde taradığında olur - bununla nasıl başa çıkılacağını bot engelleme rehberimizde anlattık.

Yanlış yapılandırılmış soket veya port. Nginx, PHP-FPM'i belirli bir Unix soketinde veya TCP portunda bulmayı bekler. Nginx yapılandırmasındaki yol, PHP-FPM yapılandırmasıyla eşleşmiyorsa, herhangi bir değişiklikten hemen sonra 502 hataları görürsünüz.

Nasıl teşhis edilir

Aşağıdaki adımları uygulamak için sunucunuza SSH üzerinden bağlanın. Bunu nasıl yapacağınızı SSH makalemizde öğrenebilirsiniz.

Adım 1. Backend'in çalışıp çalışmadığını kontrol edin

Backend hizmetinizin durumunu kontrol edin:

sudo systemctl status php8.2-fpm

php8.2-fpm yerine gerçek PHP sürümünüzü veya backend hizmet adınızı yazın. Çıktıda inactive (dead) veya failed yazıyorsa, sorun budur. Yeniden başlatın:

sudo systemctl restart php8.2-fpm

Ardından başarılı şekilde başladığından emin olmak için durumu tekrar kontrol edin.

Adım 2. Nginx hata günlüğünü kontrol edin

Hata günlüğü neredeyse her zaman tam olarak neyin yanlış gittiğini söyler:

sudo tail -30 /var/log/nginx/error.log

FASTPANEL® kullanıyorsanız günlükleri doğrudan web arayüzünde de görüntüleyebilirsiniz: site kartını açın, "Logs" bölümüne gidin ve "Frontend Error Log" sekmesini kontrol edin.

İşte en yaygın hata mesajları ve anlamları:

connect() failed - Connection refused - backend hizmeti çalışmıyor. Adım 1'de gösterildiği gibi yeniden başlatın.

connect() failed - No such file or directory - Nginx, mevcut olmayan bir Unix soketine ulaşmaya çalışıyor. Nginx yapılandırmanızdaki soket yolunun, PHP-FPM'in gerçekten oluşturduğu yol ile eşleştiğini kontrol edin.

upstream sent too big header - backend, varsayılan tampon için fazla büyük HTTP başlıkları döndürdü. Bu satırları Nginx site yapılandırmanızda server bloğunun içine ekleyin:

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;

Düzenlemeden sonra yapılandırmayı test edin ve Nginx'i yeniden yükleyin:

sudo nginx -t && sudo systemctl reload nginx

Adım 3. Sunucu kaynaklarını kontrol edin

free -h

available sütununda 100-200 MB'tan az boş bellek görünüyorsa, sunucunuzun RAM'i tükeniyor olabilir. Neyin tükettiğini kontrol edin:

ps aux --sort=-%mem | head -10
warning

Sorunun temel nedeni bellek baskısıysa, en hızlı geçici çözüm swap dosyası eklemektir. Ancak diskteki swap, RAM'den çok daha yavaştır ve kalıcı bir çözüm olarak görülmemelidir. Sunucunuzun belleği düzenli olarak tükeniyorsa, artık ya uygulamalarınızı optimize etmenin ya da daha fazla RAM içeren bir plana geçmenin zamanı gelmiştir.

Sonuç

Bir 502 Bad Gateway neredeyse her zaman bir backend sorunudur - çökmüş bir hizmet, tükenmiş worker'lar veya yetersiz bellek. Backend durumunu kontrol edin, Nginx hata günlüğünü okuyun ve kaynak kullanımınıza bakın. Vakaların büyük çoğunluğunda, yanıtı birkaç dakika içinde bulursunuz.

Bununla tek başınıza uğraşmak istemiyorsanız, kodu.cloud olarak her VPS ve dedicated server ile ücretsiz 7/24 teknik destek sunuyoruz. Tüm müşterilerimiz ayrıca hiçbir ek ücret ödemeden FASTPANEL® Extended alır; bu da web arayüzü üzerinden günlük analizini ve hizmet yönetimini önemli ölçüde kolaylaştırır.