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 Load Balancer Yapılandırması: Round Robin...
🟢 Nginx Kurulumu

Nginx Load Balancer Yapılandırması: Round Robin ve IP Hash

Nginx upstream bloğu ile round robin, least connections ve IP hash yük dengeleme algoritmaları ve SSL terminasyonu.

📅 13 Mayıs 2025 👁 10 görüntülenme ⏱ 4 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

Nginx Load Balancer Nedir?

Load balancing (yük dengeleme), gelen ağ trafiğini birden fazla backend sunucusu arasında dağıtarak hiçbir sunucunun aşırı yüklenmesini engeller. Nginx, yüksek performanslı reverse proxy özellikleri sayesinde aynı zamanda mükemmel bir load balancer olarak da kullanılabilir. E-ticaret siteleri, API gateway'ler ve yüksek trafikli web uygulamaları için özellikle değerlidir.

Nginx'in load balancing algoritmaları: Round Robin (varsayılan, sırayla dağıt), Least Connections (en az bağlantılı sunucuya gönder), IP Hash (aynı IP'yi her zaman aynı sunucuya yönlendir - session tutma). Nginx Plus (ücretli) ek olarak health check ve least time algoritmalarını da sunar.

Temel Upstream Yapılandırması

sudo nano /etc/nginx/nginx.conf
http {
    # Round Robin (varsayılan) - sırayla dağıt
    upstream backend_rr {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080;
    }

    # Least Connections - en az meşgul sunucu
    upstream backend_lc {
        least_conn;
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
    }

    # IP Hash - aynı IP hep aynı sunucuya (sticky session)
    upstream backend_ip {
        ip_hash;
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
    }
}

Sunucu Ağırlığı (Weight)

upstream backend {
    server 192.168.1.10:8080 weight=5;  # Trafiğin %62'si
    server 192.168.1.11:8080 weight=3;  # Trafiğin %37'si
    server 192.168.1.12:8080 weight=1;  # Trafiğin %12'si
}

Yedek (Backup) ve Kalıcı Devre Dışı Sunucu

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080 backup;   # Diğerleri çöktüğünde devreye girer
    server 192.168.1.13:8080 down;     # Geçici olarak devre dışı
}

Health Check (Pasif)

upstream backend {
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
    # 30 saniye içinde 3 hata olursa sunucuyu 30 saniyeliğine devre dışı bırak
}

Load Balancer Sunucu Bloğu

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Zaman aşımları
        proxy_connect_timeout 10s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;

        # Hata durumunda diğer sunucuya geç
        proxy_next_upstream error timeout http_500 http_502 http_503;
    }
}

SSL Terminasyonu

SSL'i load balancer'da sonlandırarak backend sunucularının yükünü azaltın:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;

    location / {
        proxy_pass http://backend;
        proxy_set_header X-Forwarded-Proto https;
    }
}

# HTTP'yi HTTPS'e yönlendir
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

Keepalive ile Performans Optimizasyonu

upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    keepalive 32;  # 32 kalıcı bağlantı havuzu
}

server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";  # Keep-alive için boş bırakın
    }
}

Durum İzleme (stub_status)

server {
    listen 8080;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}
curl http://localhost:8080/nginx_status
# Active connections: 291
# server accepts handled requests
# Reading: 6 Writing: 179 Waiting: 106

Yapılandırmayı Uygulama

sudo nginx -t
sudo systemctl reload nginx

Test Etme

# Backend sunucularını test et
for i in $(seq 1 9); do curl -s http://example.com/ | grep "Server"; done

# Load dağılımını gör
sudo awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

Sık Karşılaşılan Sorunlar

502 Bad Gateway - Tüm Backend'ler Çökmüş

sudo tail -f /var/log/nginx/error.log
# Backend sunucularının durumunu kontrol et:
curl http://192.168.1.10:8080/health

Sonuç

Nginx ile round robin, least connections ve IP hash algoritmalarını kullanarak load balancing yapılandırdınız. SSL terminasyonu, keepalive optimizasyonu ve pasif health check ile yüksek erişilebilirlik ve performanslı bir altyapı oluşturdunuz.

🤔 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

Yorumlar

Henüz yorum yok. İlk yorumu siz yapın!

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanır.