Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Nginx Keepalive Bağlantılarını Yapılandırma: Bağlantı Süreleri ve Maksimum İstek Sayısı ile Performans Artırma

nexter

Üye
Katılım
14 Mart 2026
Mesajlar
11
Merhaba arkadaşlar, bugün sizlere Nginx sunucularında sıkça gözden kaçan ama performans ve kaynak verimliliği açısından çok kritik bir ayardan bahsedeceğim: Keepalive bağlantıları. Özellikle yüksek trafikli sitelerde, her istek için sürekli yeni TCP bağlantısı kurmak hem sunucunuza hem de istemciye ek yük bindirir. Keepalive ayarlarını doğru yapılandırarak bu yükü ciddi oranda azaltabilir, sunucu yanıt sürelerinizi (TTFB) düşürebilir ve genel ölçeklenebilirliği artırabilirsiniz.

🔍 Keepalive Nedir ve Neden Önemli?

Basitçe anlatmak gerekirse, Keepalive (bağlantıyı canlı tutma), bir istemci (örn. tarayıcı) ile sunucunuz arasında kurulan TCP bağlantısının, tek bir istek- cevap işleminden sonra kapatılmaması ve belirli bir süre daha açık tutulmasıdır. Bu süre içinde aynı istemciden gelen yeni istekler, aynı bağlantı üzerinden gönderilir.

Bunun en büyük faydası, her seferinde "TCP Handshake" (üçlü el sıkışma) yapma ve yeni soket oluşturma maliyetinden kurtulmaktır. Benim sunucularda genelde kullandığım yöntem, bu ayarları trafik profiline göre optimize etmektir. Statik içerik ağırlıklı bir blog ile sürekli API isteği alan bir uygulama sunucusunun keepalive ihtiyacı farklı olacaktır.

⚙️ Nginx Keepalive Ayarları Nerede ve Nasıl Yapılır?

Bu ayarları iki yerde yapılandırabiliriz: 1) Nginx'in istemcilere (ziyaretçilere) karşı davranışı, 2) Nginx'in arka uç sunucularına (örn. PHP-FPM, uygulama sunucusu) karşı davranışı.

Öncelikle istemci tarafındaki ayarlardan başlayalım. Bu ayarlar genellikle `http` bloğu içinde veya bir `server` bloğunda yapılır. Ana konfigürasyon dosyası /etc/nginx/nginx.conf içindeki `http` bölümüne aşağıdaki direktifleri ekleyebilirsiniz.

NGINX:
http {
    # İstemci bağlantılarını 65 saniye canlı tut
    keepalive_timeout 65;
    # Bir bağlantı üzerinden maksimum 100 istek kabul et, sonra bağlantıyı yenile
    keepalive_requests 100;
    # Zaman aşımı süresini tarayıcıya da gönder (opsiyonel, eski tarayıcılar için)
    keepalive_timeout 65 65;
    # ... Diğer http ayarları
}

Şimdi bu iki kritik direktifi açıklayayım:

keepalive_timeout: Açık bir bağlantının boşta (idle) kalabileceği maksimum süreyi saniye cinsinden belirler. Çok yüksek tutmak sunucu kaynaklarını (özellikle socket) gereksiz meşgul edebilir. Çok düşük tutmak ise Keepalive'in faydasını azaltır. ⚠️ 65-75 saniye arası, genel web trafiği için makul bir başlangıç noktasıdır.

keepalive_requests: Tek bir bağlantının üzerinden kaç tane istek gönderilebileceğini belirler. Bu limit dolunca bağlantı kapatılır ve yeni bir bağlantı kurulur. Bu, uzun süre açık kalan bağlantılardaki potansiyel bellek sızıntılarını (memory leaks) hafifletmeye yardımcı olur. 1000 değeri de sıkça kullanılır.

🔄 Upstream (Arka Uç) Keepalive Ayarları

Nginx, PHP-FPM, Node.js, Apache gibi bir arka uç sunucusuna (upstream) proxy yapıyorsa, oraya yapılan bağlantıları da Keepalive ile yönetmek çok büyük performans kazancı sağlar. Bu, sunucu içi iletişimin yükünü azaltır.

Bu ayarlar, bir `upstream` bloğu içinde ve `location` bloğundaki `proxy_pass` ayarıyla birlikte kullanılır.

NGINX:
# Arka uç sunucu grubunu tanımla
upstream backend {
    server 127.0.0.1:9000; # Örn: PHP-FPM
    # Keepalive bağlantı havuzu boyutunu belirle
    keepalive 32;
}

server {
    listen 80;
    server_name orneksite.com;

    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        
        # Aşağıdaki ayarlar, upstream keepalive için önemli
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # ... Diğer proxy ayarları
    }
}

Buradaki en önemli direktif `keepalive 32;`'dir. Bu, Nginx'in arka uç sunucusu için açık tutacağı Keepalive bağlantı havuzunun boyutunu belirler. Her bir Nginx worker prosesi için bu kadar bağlantı saklanır. Bu sayıyı, sunucunuzun kaynaklarına ve eşzamanlı istek yoğunluğuna göre ayarlamalısınız. Çok yüksek trafikli sistemlerde 256 veya 512'ye kadar çıkılabilir.

⚠️ Dikkat Edilmesi Gerekenler ve Optimizasyon İpuçları

1. keepalive_timeout değerini, istatistiklerinize bakarak ayarlayın. Eğer ortalama sayfa görüntüleme süresi 30 saniye ise, timeout'u 40-50 saniye yapmak mantıklı olabilir.
2. keepalive_requests limiti, özellikle tek sayfa uygulamaları (SPA) veya sürekli polling yapan siteler için yüksek tutulmalıdır. 1000 gibi bir değer güvenli bir seçimdir.
3. Upstream `keepalive` havuz boyutunu (örn: 32) ayarlarken, arka uç sunucunuzun (örn: PHP-FPM `pm.max_children`) maksimum eşzamanlı işlem kapasitesini de göz önünde bulundurun. Havuz boyutu bu değeri aşmamalıdır.
4. Bu ayarları değiştirdikten sonra mutlaka Nginx'i test edip yeniden başlatın:
Bash:
sudo nginx -t && sudo systemctl reload nginx
5. Değişikliklerin etkisini izlemek için netstat, ss komutlarını veya Nginx stub_status modülünü kullanabilirsiniz.

📈 Sonuç

Doğru yapılandırılmış Keepalive ayarları, sunucu yükünüzü düşürür, kullanıcı deneyimini hızlandırır ve donanım kaynaklarınızdan daha fazla verim almanızı sağlar. Bu ayarlar "bir kere set et unut" ayarları değildir. Trafiğinizin pattern'ine göre periyodik olarak gözden geçirmekte fayda var.

Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle çok yüksek trafik alan sistemlerde hangi değerleri kullanıyorsunuz? Keepalive ile ilgili yaşadığınız ilginç bir sorun veya performans kazanımı oldu mu? Deneyimlerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin. Herkese sorunsuz sunucular!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri