How-To Guides

Nginx Ters Vekil Yapılandırmasını Ustalaşma: Pratik Bir Kılavuz

Ters vekil kurmak, modern web mimarisindeki en temel ve güçlü tekniklerden biridir. Arka uç sunucularınızın iç detaylarını gizlemenize, trafiği yönetmenize ve güvenliği artırmanıza olanak tanır. Yüksek performans ve düşük kaynak tüketimiyle tanınan Nginx, ters vekilleri ölçekli olarak uygulamak için tercih edilen çözümdür. Bu kılavuzda, Nginx'i ters vekil olarak yapılandırmayı adım adım ele alacağız; temel kurulum, gelişmiş yönlendirme ve temel güvenlik başlıklarını kapsayacağız.

Temelleri Anlama

Bir ters vekil, istemci ile kaynak sunucu arasında yer alır. Bir istemci alan adınızdan veri istediğinde, istek vekil üzerinden yönlendirilir ve ardından uygun arka uç hizmetine iletir. Bu soyutlama, altyapınızı ifşa etmeden yük dengeleme, SSL sonlandırma ve önbellekleme yapılmasını sağlar.

Başlamak için, Nginx'in sunucunuzda yüklü olduğundan emin olun. Debian/Ubuntu sistemlerinde şu komutlarla yükleyebilirsiniz:

sudo apt update
sudo apt install nginx

Temel Ters Vekil Kurulumu

Bir ters vekil yapılandırmasının çekirdeği `proxy_pass` yönergesinde yatar. Arka uç uygulamanızın `localhost:3000` üzerinde çalıştığını varsayalım. Bunu HTTP üzerinden 80. portta sunmak istiyoruz.

Varsayılan Nginx yapılandırma dosyasını açın:

sudo nano /etc/nginx/sites-available/default

Varsayılan sunucu bloğunu aşağıdakiyle değiştirin:

server {
    listen 80;
    server_name 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-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}

Bu yapılandırma, `example.com`'dan gelen tüm trafiği yerel uygulamanıza iletir. `proxy_set_header` yönergeleri, arka ucunuzun doğru istemci bilgilerini almasını sağlar; bu da kayıt tutma ve güvenlik için hayati önem taşır.

WebSockets ve Uzun Süreli Bağlantıları İşleme

Çok sayıda modern uygulama, gerçek zamanlı veri alışverişi için WebSockets'e dayanır. Nginx bunu yerel olarak destekler, ancak bağlantının HTTP'den WebSocket'e yükseltilmesi için belirli başlıklar gerektirir. Önceki örnekteki `proxy_set_header Upgrade $http_upgrade;` ve `proxy_set_header Connection 'upgrade';` satırları bunu otomatik olarak yönetir. Uygulamanız uzun süreli HTTP bağlantıları kullanıyorsa, zaman aşımı değerlerini artırmak isteyebilirsiniz:

proxy_read_timeout 60s;
proxy_send_timeout 60s;

Birden Çok Arka Uç Arasında Yük Dengeleme

Ters vekilin en büyük avantajlarından biri yük dengelemedir. Nginx, trafiği birden çok üst akış (upstream) sunucusu arasında dağıtabilir. Nginx yapılandırmanızın `http` bölümünde (örneğin, `/etc/nginx/nginx.conf`) bir upstream bloğu tanımlayın:

http {
    upstream my_app {
        server 192.168.1.10:3000;
        server 192.168.1.11:3000;
        server 192.168.1.12:3000;
    }
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://my_app;
    }
}

Varsayılan olarak Nginx, sırayla (round-robin) algoritmasını kullanır. `upstream` bloğu içinde `least_conn` veya `ip_hash` gibi diğer yöntemleri, spesifik trafik desenlerinize uygun olacak şekilde belirleyebilirsiniz.

Güvenlik ve HTTPS

Ters vekilinizi her zaman HTTPS üzerinden sunun. Ücretsiz bir sertifika almak için Let’s Encrypt kullanın ve Nginx'i HTTP trafiğini HTTPS'e yönlendirecek şekilde yapılandırın:

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

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

    location / {
        proxy_pass http://localhost:3000;
        # ... diğer vekil ayarları ...
    }
}

Ayrıca, yaygın zafiyetleri azaltmak için yanıtınıza güvenlik başlıkları ekleyin:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";

Yapılandırmayı Test Etme ve Yeniden Yükleme

Değişiklikleri uygulamadan önce, hizmetinizi devre dışı bırakabilecek sözdizimi hatalarını önlemek için yapılandırmanızı her zaman test edin:

sudo nginx -t
sudo systemctl reload nginx

Sonuç

Nginx'i ters vekil olarak yapılandırmak, her geliştirici veya sistem yöneticisi için kritik bir beceridir. Trafiği yönetmek, uygulamalarınızı güvence altına almak ve altyapınızı ölçeklendirmek için sağlam bir katman sağlar. Yukarıda belirtilen adımları izleyerek, web mimarinizin omurgasını oluşturacak güvenilir ve verimli bir ters vekil kurabilirsiniz. Optimal performans için, günlüklerinizi izlemeyi ve zaman aşımı ile tamponlama ayarlarını spesifik uygulamanızın davranışına göre ayarlamayı unutmayın.

Share: