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 504 Gateway Timeout Hatası: Tam Çözüm Reh...
🟢 Nginx Kurulumu

Nginx 504 Gateway Timeout Hatası: Tam Çözüm Rehberi

Nginx upstream'den zamanında yanıt alamadığında 504 hatası oluşur. Timeout değerleri ve PHP-FPM ayarlarıyla çözülür.

📅 11 Ocak 2025 👁 50 görüntülenme ⏱ 4 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

Nginx 504 Hatası Nedir?

HTTP 504 Gateway Timeout hatası, Nginx'in bir upstream sunucusundan (PHP-FPM, Node.js, Python/uWSGI, Ruby veya başka bir backend servisi) belirlenen süre içinde yanıt alamaması durumunda istemciye döndürdüğü HTTP hata kodudur. Nginx burada bir ters proxy (reverse proxy) olarak çalışır ve arkasındaki uygulamadan yanıt bekler; yanıt gelmezse 504 hatası üretir.

Bu hata, sunucunun tamamen çöktüğü anlamına gelmez. Arka plan hizmeti çalışıyor olabilir ancak belirli bir isteği işlemesi çok uzun sürüyor ya da yüksek yük altında yetersiz worker ile sıkışmış olabilir. E-ticaret sitelerinde büyük sipariş işlemleri, toplu veri import/export işlemleri, yavaş veritabanı sorguları veya dış API çağrıları sırasında sıkça karşılaşılır.

Tarayıcıda şu mesajla karşılaşırsınız:

504 Gateway Time-out
The server didn't respond in time.

Nginx hata loglarında ise şuna benzer bir kayıt görünür:

upstream timed out (110: Connection timed out) while reading response header from upstream,
client: 1.2.3.4, server: example.com, request: "POST /wp-admin/admin-ajax.php HTTP/1.1",
upstream: "fastcgi://unix:/run/php/php8.2-fpm.sock"

Olası Nedenler

  • PHP-FPM worker sayısı yetersiz, istekler kuyrukta bekliyor
  • PHP betiği çok uzun süren veritabanı sorgusu yapıyor
  • Backend Node.js/Python servisi yanıt veremiyor
  • Nginx timeout değerleri çok düşük ayarlanmış (varsayılan 60 saniye)
  • Disk I/O veya ağ gecikmesi nedeniyle upstream yanıt veremiyor
  • MySQL veya Redis bağlantı sorunu
  • Dış API çağrısı zaman aşımına uğruyor
  • PHP betiğinde sonsuz döngü veya bellek sızıntısı var

Çözüm Adımları

1. Nginx Timeout Değerlerini Artırma

Nginx yapılandırma dosyanızı düzenleyin. Bu ayarlar genellikle /etc/nginx/nginx.conf veya site yapılandırmasında (/etc/nginx/sites-available/) bulunur:

nano /etc/nginx/sites-available/example.com

location bloğuna veya server bloğuna şu direktifleri ekleyin:

server {
    # ...
    fastcgi_read_timeout 300;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;

    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;

    send_timeout 300;
    keepalive_timeout 300;
}

Değişikliği test edip uygulayın:

nginx -t && sudo systemctl reload nginx

2. PHP-FPM Worker Sayısını Artırma

PHP-FPM havuz yapılandırmasını düzenleyin:

nano /etc/php/8.2/fpm/pool.d/www.conf

Şu değerleri güncelleyin:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

; PHP-FPM request timeout
request_terminate_timeout = 300

PHP-FPM'i yeniden başlatın:

sudo systemctl restart php8.2-fpm

Mevcut PHP-FPM durumunu ve process sayısını kontrol etmek için:

ps aux | grep php-fpm | wc -l
# veya status endpoint aktifse:
curl http://localhost/fpm-status

3. PHP Script Timeout Artırma

PHP'nin maksimum çalışma süresini de artırmanız gerekebilir:

nano /etc/php/8.2/fpm/php.ini
# Şu değeri güncelleyin:
max_execution_time = 300
max_input_time = 300

4. Node.js / Proxy Backend Timeout

Backend'inizin Node.js veya başka bir uygulama sunucusu olduğu durumlarda:

location /api/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_read_timeout 300s;
    proxy_connect_timeout 75s;
    proxy_send_timeout 300s;
}

5. MySQL Yavaş Sorguları Tespit Etme

504 hatasına yavaş veritabanı sorguları da neden olabilir. MySQL slow query log'u aktifleştirin:

nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Ekleyin:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
sudo systemctl restart mysql
# Yavaş sorguları inceleyin:
tail -f /var/log/mysql/slow.log

6. Nginx Hata Loglarını İnceleme

Sorunu teşhis etmek için hata loglarını takip edin:

tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log

Özet ve Önleyici Tedbirler

  • Nginx ve PHP-FPM timeout değerlerini uygulamanızın gerçek ihtiyacına göre ayarlayın
  • PHP-FPM pm.max_children değerini sunucu RAM'ine göre hesaplayın (RAM / ortalama PHP bellek kullanımı)
  • MySQL yavaş sorgularını düzenli olarak analiz edin ve indeksleri optimize edin
  • Uzun süren işlemleri arka plan job'ları (queue) olarak çalıştırın
  • Harici API çağrılarına mutlaka timeout ekleyin ve cache kullanın
  • Sunucu kaynaklarını (CPU, RAM, disk I/O) izlemek için Netdata veya Prometheus kullanın

İ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.