Nginx Reverse Proxy ve Load Balancing Rehberi

z

zafer ak

Yazar

30 December 2025 3 dakika okuma 177 görüntülenme
Nginx Reverse Proxy ve Load Balancing Rehberi
Nginx ile reverse proxy kurulumu, upstream yapılandırması, load balancing stratejileri, SSL termination ve caching ayarları.

Nginx, yüksek performanslı bir web sunucusu, reverse proxy ve load balancer olarak kullanılabilir. Bu rehberde Nginx ile trafik yönetimini öğreneceksiniz.

Nginx Load Balancer

Reverse Proxy Nedir?

Reverse proxy, istemci isteklerini arka uç sunuculara yönlendiren bir ara katmandır. Avantajları:

  • Güvenlik: Arka uç sunucuları gizleme
  • SSL Termination: Merkezi SSL yönetimi
  • Caching: Statik içerik önbellekleme
  • Load Balancing: Yük dağıtımı
  • Compression: Gzip/Brotli sıkıştırma

Nginx Kurulumu

# Ubuntu/Debian
sudo apt update
sudo apt install nginx

# CentOS/RHEL
sudo dnf install nginx

# Başlat
sudo systemctl enable nginx
sudo systemctl start nginx

Temel Reverse Proxy

# /etc/nginx/sites-available/app.conf

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
        proxy_cache_bypass $http_upgrade;
    }
}
Server Architecture

Load Balancing

Upstream Tanımlama

# /etc/nginx/conf.d/upstream.conf

upstream backend_servers {
    # Round Robin (varsayılan)
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    server 192.168.1.103:8080;
}

# Weighted Load Balancing
upstream weighted_backend {
    server 192.168.1.101:8080 weight=5;
    server 192.168.1.102:8080 weight=3;
    server 192.168.1.103:8080 weight=2;
}

# Least Connections
upstream least_conn_backend {
    least_conn;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

# IP Hash (Sticky Sessions)
upstream ip_hash_backend {
    ip_hash;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

Load Balancer Yapılandırması

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # Timeout ayarları
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

Health Checks

upstream backend_servers {
    server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.103:8080 backup;  # Yedek sunucu
}
Load Balancing Diagram

SSL Termination

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

    ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
    }
}

# HTTP to HTTPS redirect
server {
    listen 80;
    server_name app.example.com;
    return 301 https://$server_name$request_uri;
}

Caching

# Cache zone tanımlama (nginx.conf içinde http bloğunda)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        add_header X-Cache-Status $upstream_cache_status;
    }

    # Statik dosyalar için cache
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        proxy_pass http://backend_servers;
        proxy_cache my_cache;
        proxy_cache_valid 200 30d;
        expires 30d;
    }
}

WebSocket Desteği

location /ws/ {
    proxy_pass http://websocket_backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_read_timeout 86400;
}

Sonuç

Nginx, yüksek performanslı reverse proxy ve load balancer olarak mükemmel çalışır. Doğru yapılandırma ile uygulamalarınızın ölçeklenebilirliğini ve güvenliğini artırabilirsiniz.

İlgili Yazılar