Nginx 502 ve 504 Hatası
Nginx 502 ve 504 hatası Nginx, yüksek performanslı ve olay güdümlü (event-driven) mimariye sahip bir web sunucusudur. Genellikle PHP tabanlı web sitelerini çalıştırmak için FastCGI Process Manager (PHP-FPM) ile birlikte kullanılır. Bu kombinasyon, doğru yapılandırıldığında, yüksek trafikli siteleri bile sorunsuz bir şekilde işleyebilir. Ancak, bazen 502 Bad Gateway veya 504 Gateway Timeout hatalarıyla karşılaşabiliriz. Bu makalede, Nginx ve PHP-FPM kullanan sunucularda bu hataların olası nedenlerini ve çözüm yollarını inceleyeceğiz.
502 Bad Gateway Hatası Nedir?
502 Bad Gateway hatası, Nginx’in arkadaki uygulama sunucusuna (bu durumda PHP-FPM) istek gönderemediği veya ondan geçerli bir yanıt alamadığı anlamına gelir. Nginx, istemci (örneğin, web tarayıcısı) ile PHP-FPM arasında bir proxy görevi görür. İstemciden gelen isteği PHP-FPM’e iletir ve PHP-FPM’den gelen yanıtı istemciye geri gönderir. 502 hatası, bu iletişimde bir sorun olduğunu gösterir.
504 Gateway Timeout Hatası Nedir?
504 Gateway Timeout hatası ise, Nginx’in PHP-FPM’den belirli bir süre içinde yanıt alamadığı anlamına gelir. Nginx, PHP-FPM’e bir istek gönderir ve yanıt için belirli bir süre bekler. Bu süre içinde yanıt alamazsa, 504 hatası döner.
Olası Nedenler ve Çözüm Yolları:
Bu hataların birkaç olası nedeni olabilir. En yaygın olanları ve çözüm yollarını aşağıda bulabilirsiniz:
1. Yetersiz PHP-FPM pm.max_children
Değeri:
- Sorun:
pm.max_children
ayarı, aynı anda çalışabilecek maksimum PHP-FPM process sayısını belirler. Bu değer çok düşükse, sunucu yoğun trafik altında PHP isteklerini işleyemez hale gelir ve Nginx, PHP-FPM’e bağlanamaz. - Belirtiler: 502 veya 504 hataları, yavaş yüklenen sayfalar. Nginx hata loglarında
"connect() to unix:/var/run/php/php7.4-fpm.sock failed (11: Resource temporarily unavailable)"
benzeri mesajlar. PHP-FPM loglarında"server reached pm.max_children setting"
benzeri mesajlar. - Çözüm:
- PHP-FPM yapılandırma dosyasını açın (genellikle
/etc/php/7.4/fpm/pool.d/www.conf
– PHP sürümünüze göre yolu değiştirin). pm.max_children
değerini artırın. Bu değeri belirlerken sunucunuzun RAM miktarını göz önünde bulundurun. Her PHP-FPM process’i yaklaşık 20-50MB RAM kullanabilir.- Örnek:
pm.max_children = 50
(Uygun değeri deneme yanılma yoluyla bulmanız gerekebilir)
- Örnek:
pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
ayarlarını da optimize edin. Bu ayarlar, başlatılacak ve beklemede tutulacak PHP-FPM process sayısını belirler.pm = dynamic
yerinepm = ondemand
kullanmayı düşünebilirsiniz.ondemand
, yalnızca gerektiğinde process başlatır ve kaynak tasarrufu sağlar. Ancak, çok yoğun trafikli siteler için uygun olmayabilir.- Değişiklikleri kaydedin ve PHP-FPM’i yeniden başlatın:
sudo systemctl restart php7.4-fpm
- PHP-FPM yapılandırma dosyasını açın (genellikle
2. Yanlış PHP-FPM ve Nginx Yapılandırması:
- Sorun: Nginx’in PHP dosyalarını PHP-FPM’e doğru şekilde iletmemesi veya Nginx ve PHP-FPM’in farklı kullanıcılarla çalıştırılması.
- Belirtiler: 404, 502 hataları, PHP dosyalarının işlenmeden indirilmesi, Nginx loglarında “Permission Denied”.
- Çözüm:
- Nginx yapılandırma dosyanızda (genellikle
/etc/nginx/sites-available/default
veya/etc/nginx/conf.d/default.conf
) ilgililocation ~ \.php$
bloğunu bulun. fastcgi_pass
direktifinin doğru PHP-FPM soketine veya portuna işaret ettiğinden emin olun (örneğin,unix:/var/run/php/php7.4-fpm.sock;
veya127.0.0.1:9000;
).fastcgi_buffers
vefastcgi_buffer_size
ayarlarını optimize edin.- Nginx ve PHP-FPM’in aynı kullanıcı (örneğin,
www-data
) ile çalıştığından emin olun. Bunu PHP-FPM yapılandırma dosyasındakiuser
vegroup
ayarlarından ve Nginx yapılandırma dosyasındakiuser
ayarından kontrol edebilirsiniz. - Değişiklikleri kaydedin ve Nginx ile PHP-FPM’i yeniden başlatın.
- Nginx yapılandırma dosyanızda (genellikle
3. Soket Dosyası Sorunları:
- Sorun: PHP-FPM’in kullandığı soket dosyasının silinmesi, bozulması veya yanlış izinlere sahip olması.
- Belirtiler: Nginx hata loglarında
"connect() to unix:/var/run/php/php7.4-fpm.sock failed"
benzeri mesajlar. - Çözüm:
- PHP-FPM yapılandırmasında belirtilen soket dosyasının (örneğin,
/var/run/php/php7.4-fpm.sock
) var olup olmadığını kontrol edin. - Dosya izinlerini kontrol edin. Genellikle
www-data
kullanıcısı ve grubu için okuma/yazma izni gerekir (chmod 0660 /var/run/php/php7.4-fpm.sock
). - Gerekirse PHP-FPM’i yeniden başlatarak soket dosyasının yeniden oluşturulmasını sağlayın.
- PHP-FPM yapılandırmasında belirtilen soket dosyasının (örneğin,
4. Yetersiz Sunucu Kaynakları:
- Sorun: Sunucuda yetersiz RAM veya CPU olması, PHP-FPM process’lerinin yeterli kaynağa sahip olamamasına ve Nginx’in zamanında yanıt alamamasına neden olabilir.
- Belirtiler: Genel sistem yavaşlığı, 502, 503 veya 504 hataları.
- Çözüm:
top
,htop
,vmstat
,iostat
gibi araçlarla CPU, bellek ve disk I/O kullanımını izleyin.- Yüksek kaynak kullanımı tespit ederseniz, sunucunuzun kaynaklarını (RAM, CPU) yükseltmeyi veya kodunuzu optimize etmeyi düşünün.
- Gereksiz servisleri kapatın veya kaynak kullanımını azaltacak şekilde optimize edin.
5. Diğer PHP-FPM Ayarları:
pm.max_requests
: Her PHP-FPM process’inin yeniden başlatılmadan önce işleyeceği maksimum istek sayısı. Çok düşük olması sık sık yeniden başlatmalara ve performans sorunlarına neden olabilir. Çok yüksek olması ise bellek sızıntılarına yol açabilir. İhtiyaca göre ayarlayın (örneğin, 500 veya 1000).pm.process_idle_timeout
: Boşta kalan bir PHP-FPM process’inin sonlandırılmadan önce bekleyeceği süre. Çok düşük olması process’lerin gereksiz yere sonlandırılmasına neden olabilir. İhtiyaca göre ayarlayın (örneğin, 10s veya 30s).
İzleme ve Önleme:
Bu hataları önlemek ve sunucu performansını optimize etmek için aşağıdaki adımları uygulayabilirsiniz:
- Log Dosyalarını Düzenli Olarak Kontrol Edin: Nginx ve PHP-FPM hata loglarını düzenli olarak kontrol ederek olası sorunları erkenden tespit edebilirsiniz.
- Sunucu Kaynaklarını İzleyin:
top
,htop
gibi araçlarla sunucu kaynak kullanımını (CPU, RAM, disk I/O) izleyin. - Yük Testi Yapın: Sunucunuzu yük testine tabi tutarak, yoğun trafik altında nasıl davrandığını gözlemleyin ve PHP-FPM ayarlarını buna göre optimize edin.
- Önbellekleme Kullanın: Nginx’in önbellekleme özelliklerini kullanarak statik içerikleri önbelleğe alın ve sunucu yükünü azaltın.
- Kodunuzu Optimize Edin: Yavaş çalışan veya gereksiz kaynak tüketen PHP kodlarını optimize edin.
Sonuç:
Nginx ve PHP-FPM kullanarak web sitelerini barındırırken 502 ve 504 hatalarıyla karşılaşmak yaygın bir durumdur. Bu makalede, bu hataların olası nedenlerini ve çözüm yollarını detaylı bir şekilde inceledik. Doğru PHP-FPM ve Nginx yapılandırması, yeterli sunucu kaynakları ve düzenli izleme ile bu hataları önleyebilir ve web sitenizin performansını optimize edebilirsiniz. Unutmayın, her sunucu ortamı farklıdır ve en uygun ayarları bulmak için deneme yanılma ve dikkatli izleme gerekebilir.