Sunucu Yönetimi

Nginx ile Reverse Proxy Kurulumu: Adım Adım Rehber

ahmet
4 dakikalık okuma
#Nginx#Reverse Proxy#Sunucu
Nginx ile Reverse Proxy Kurulumu: Adım Adım Rehber
Nginx ile reverse proxy kurulumunu proxy_pass, upstream ve SSL termination örnekleriyle adım adım öğren. Gunicorn ve Node önünde pratik yapılandırma.

Uygulaman 8000 portunda çalışıyor ama kimse ona tarayıcıdan ulaşamıyor. SSL sertifikasını nereye koyacağını da bilmiyorsun. İşte bir nginx reverse proxy bu sorunların ikisini de çözer.Reverse proxy, istemci ile uygulama sunucun arasında duran bir katmandır. Dışarıdan gelen istekleri alır, arka uçtaki uygulamaya iletir, cevabı geri döndürür. Gunicorn veya Node uygulamanı doğrudan internete açmak yerine bu katmanın arkasına koyarsın.Bu rehber kurulumu sıfırdan, çalışan örneklerle anlatıyor. Sonunda HTTPS üzerinden yayınlanan, arka ucu gizli bir yapın olacak.

Reverse proxy neden gerekli?

Gunicorn ve Node gibi uygulama sunucuları istek işlemekte iyidir. Ama statik dosya sunmak, çok sayıda bağlantı tutmak ve SSL yönetmek onların işi değildir. Nginx tam bu noktalarda devreye girer.Bir nginx reverse proxy sana şunları kazandırır:

  • Tek bir 443 portu üzerinden tüm trafiği toplama
  • SSL sertifikasını tek yerde yönetme
  • Statik dosyaları uygulamaya hiç dokunmadan sunma
  • Birden çok uygulama örneğine yük dağıtma
  • Arka uç portlarını dış dünyadan gizleme

Resmi Nginx reverse proxy belgeleri bu davranışların tamamını ayrıntılı anlatır. Temel mantık basittir: nginx isteği alır, arka uca yollar, cevabı istemciye geri verir.

Nginx reverse proxy kurulumu ve ilk yapılandırma

Ubuntu tabanlı bir sunucuda kurulum tek satırdır. Paketi yükle, servisi başlat, durumunu kontrol et.

sudo apt update
sudo apt install nginx
sudo systemctl enable --now nginx

Yapılandırma dosyalarını /etc/nginx/sites-available/ dizininde tutarsın. Her site için ayrı bir dosya oluşturmak temiz bir alışkanlıktır. Dosyayı yazdıktan sonra sites-enabled dizinine sembolik bağ ile bağlarsın.Her değişiklikten sonra yapılandırmayı test et. Bu adım, yazım hatası yüzünden servisi çökertmeni engeller.

sudo nginx -t
sudo systemctl reload nginx

proxy_pass ile temel yönlendirme

İşin kalbi proxy_pass direktifidir. Bir location bloğu içinde gelen isteği arka uca yollar. Gunicorn'un 8000 portunda dinlediğini varsayalım.

server {
    listen 80;
    server_name ornek.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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_set_header satırları neden önemli? Arka uçtaki uygulaman gerçek istemci adresini ve protokolü bu başlıklardan öğrenir. Bunları atlamak, loglarında herkesin IP'sinin 127.0.0.1 görünmesine yol açar.Node uygulaması için tek fark port numarasıdır. proxy_pass http://127.0.0.1:3000; yazman yeterli. Mantık aynı kalır.

Upstream blokları ve yük dağıtımı

Tek bir uygulama örneği bazen yetmez. Trafik arttığında birden çok örnek çalıştırıp yükü paylaştırmak istersin. Burada upstream bloğu devreye girer.

upstream uygulama_havuzu {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
}

server {
    listen 80;
    server_name ornek.com;

    location / {
        proxy_pass http://uygulama_havuzu;
        proxy_set_header Host $host;
    }
}

Nginx istekleri bu havuzdaki sunuculara sırayla dağıtır. Bir örnek çökerse trafiği diğerlerine yönlendirir. Gunicorn worker sayısını artırmak yerine ayrı portlarda örnekler açmak, daha esnek bir ölçekleme yöntemidir.Aşağıdaki tablo sık kullanılan yük dağıtım yöntemlerini özetliyor.


YöntemDavranışNe zaman kullanılır
round-robin | İstekleri sırayla dağıtır | Varsayılan, eşit güçlü sunucular
least_conn | En az bağlantısı olana yollar | Uzun süren istekler
ip_hash | Aynı IP hep aynı sunucuya gider | Oturum yapışkanlığı gereken yerler

SSL termination kurulumu

SSL termination, HTTPS şifrelemesini nginx katmanında halletmek demektir. İstemci nginx ile şifreli konuşur, nginx arka uçla düz HTTP konuşur. Arka uç sunucun şifreleme yüküyle hiç uğraşmaz.Sertifikayı aldıktan sonra yapılandırma şöyle görünür:

server {
    listen 443 ssl;
    server_name ornek.com;

    ssl_certificate     /etc/ssl/certs/ornek.crt;
    ssl_certificate_key /etc/ssl/private/ornek.key;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

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

İkinci server bloğu, 80 portuna geleni 443'e yönlendirir. Böylece her ziyaretçi otomatik olarak HTTPS'e taşınır. Ücretsiz sertifika için Certbot aracı tüm bu adımları senin yerine yapabilir.

Yaygın hatalar ve çözümleri

İlk kurulumda en sık karşılaşılan hata 502 Bad Gateway'dir. Bu, nginx'in arka uca ulaşamadığı anlamına gelir. Önce uygulamanın gerçekten çalışıp çalışmadığını kontrol et.

  1. Arka ucun doğru portu dinlediğini doğrula.
  2. proxy_pass adresindeki port numarasını kontrol et.
  3. sudo nginx -t ile yazım hatası ara.
  4. Hata kaydı için /var/log/nginx/error.log dosyasına bak.

WebSocket kullanan uygulamalarda bağlantı kopuyorsa, upgrade başlıklarını eklemen gerekir. Nginx bu başlıkları varsayılan olarak iletmez. proxy_set_header Upgrade ve proxy_set_header Connection satırları sorunu çözer.

Özet ve sonraki adım

Bir nginx reverse proxy, uygulamanı internete açmanın en sağlam yoludur. proxy_pass ile yönlendirir, upstream ile ölçekler, SSL termination ile güvenli hale getirirsin. Arka uç portların gizli kalır, trafiğin tek kapıdan geçer.Bu yapı için sağlam bir sunucu temele ihtiyaç duyarsın. Kritm Cloud Solutions olarak Türkiye lokasyonlu, NVMe diskli ve garantili CPU/RAM sunan bulut altyapımız tam da bu işler için tasarlandı. Bulut çözümlerimizi inceleyebilir, kurulum desteği için bizimle iletişime geçebilirsin.