Nginx Yapılandırma Rehberi: Reverse Proxy, SSL ve Load Balancing

Nginx'i reverse proxy, SSL termination ve load balancer olarak yapılandırın. Server block, upstream tanımları ve güvenlik ayarlarını detaylı olarak öğrenin.

Web trafiğinin yüzde 34'ünden fazlası Nginx üzerinden geçer ve bu oran her yıl artmaktadır. Nginx yapılandırma bilgisi, modern web altyapısı yönetiminin temel taşıdır. Bu rehberde Nginx'i reverse proxy, SSL termination noktası ve load balancer olarak yapılandırmayı, server block yönetimini ve güvenlik best practice'lerini detaylı örneklerle ele alıyoruz.

Nginx Nedir ve Neden Tercih Edilir?

Nginx (okunuşu: engine-x), Igor Sysoev tarafından 2004'te geliştirilen yüksek performanslı bir web sunucusu ve reverse proxy'dir. Event-driven, asenkron mimarisi sayesinde düşük bellek kullanımıyla on binlerce eş zamanlı bağlantıyı yönetebilir. Apache'nin thread-per-connection modeline kıyasla özellikle statik dosya sunumu ve reverse proxy senaryolarında çok daha verimlidir.

Nginx dört ana rolde kullanılır: web sunucu (statik dosya sunumu), reverse proxy (uygulama sunucuları önünde), load balancer (trafik dağıtımı) ve SSL/TLS termination noktası. Çoğu production ortamında bu rollerin birkaçını aynı anda üstlenir.

💡 İpucu: Nginx yapılandırma değişikliklerini uygulamadan önce nginx -t komutuyla sözdizimi kontrolü yapın. Bu komut yapılandırma dosyalarındaki hataları sunucuyu yeniden başlatmadan tespit eder.

Server Block Yapılandırması

Server block'lar (Apache'deki virtual host karşılığı) aynı sunucuda birden fazla web sitesi barındırmanızı sağlar. Her server block server_name direktifi ile hangi domain'e yanıt vereceğini belirler. Yapılandırma dosyaları genellikle /etc/nginx/sites-available/ dizininde oluşturulur ve sites-enabled/ dizinine sembolik link ile aktifleştirilir.

Direktif Açıklama Örnek Değer
listen Dinlenecek port 443 ssl http2
server_name Domain adı example.com www.example.com
root Dosya kök dizini /var/www/example
proxy_pass Reverse proxy hedefi http://localhost:3000
ssl_certificate SSL sertifika yolu /etc/letsencrypt/live/...

Reverse Proxy Yapılandırması

Reverse proxy, istemci isteklerini arka plandaki uygulama sunucularına yönlendirir. Node.js, Python, PHP-FPM veya Java uygulamalarınızı doğrudan internete açmak yerine Nginx arkasına koyarak güvenlik, performans ve esneklik kazanırsınız. proxy_pass direktifi ile hedef sunucuyu belirtirsiniz.

WebSocket bağlantıları için proxy_http_version 1.1 ve Upgrade header'larını eklemeniz gerekir. Proxy buffer ayarları büyük yanıtlarda performansı etkiler — proxy_buffer_size ve proxy_buffers direktiflerini uygulamanızın ihtiyacına göre ayarlayın. Daha fazla bilgi için Node.js production rehberimize göz atın.

⚠️ Önemli: Reverse proxy yapılandırmasında proxy_set_header X-Real-IP $remote_addr ve X-Forwarded-For header'larını eklemeyi unutmayın. Aksi halde uygulama sunucunuz tüm istekleri 127.0.0.1'den geliyormuş gibi görür.

SSL/TLS Yapılandırması ve Let's Encrypt

HTTPS artık bir seçenek değil zorunluluktur — Google, HTTPS olmayan siteleri güvensiz olarak işaretler. Let's Encrypt ile ücretsiz SSL sertifikası alabilir ve Certbot aracıyla otomatik yenileme yapılandırabilirsiniz. Nginx'te SSL yapılandırmasında TLS 1.2 ve 1.3 protokollerini etkinleştirin, eski protokolleri devre dışı bırakın.

HSTS (HTTP Strict Transport Security) header'ı tarayıcıların sitenize her zaman HTTPS üzerinden bağlanmasını sağlar. OCSP stapling ile sertifika doğrulama süresini kısaltabilirsiniz. SSL/TLS sertifika rehberimiz sertifika türleri hakkında detaylı bilgi sunar.

Load Balancing ile Trafik Dağıtımı

Nginx'in upstream bloğu ile birden fazla backend sunucuya trafik dağıtabilirsiniz. Round-robin (varsayılan), least connections, IP hash ve random gibi algoritma seçenekleri mevcuttur. Health check mekanizması ile çalışmayan sunucuları otomatik olarak devre dışı bırakabilirsiniz.

Session persistence gerektiren uygulamalarda ip_hash veya sticky direktifi kullanarak aynı kullanıcının her zaman aynı backend'e yönlendirilmesini sağlayabilirsiniz. Ancak daha iyi bir yaklaşım session verilerini Redis gibi merkezi bir depoda tutmaktır. Nginx load balancing dokümantasyonu tüm algoritmaları detaylı açıklar.

Nginx Performans Optimizasyonu

Worker process sayısını CPU çekirdek sayısına eşitleyin (worker_processes auto). Gzip sıkıştırmayı etkinleştirerek bant genişliği kullanımını yüzde 60-80 azaltın. Statik dosyalar için tarayıcı cache header'ları (expires) ayarlayın. sendfile, tcp_nopush ve tcp_nodelay direktifleri ağ performansını iyileştirir.

  • ✓
    Gzip Sıkıştırma: text/html, application/json ve CSS/JS dosyalarını sıkıştırın
  • ✓
    Browser Cache: Statik dosyalar için uzun süreli cache header'ları ayarlayın
  • ✓
    Rate Limiting: limit_req ile DDoS ve brute force saldırılarına karşı koruma sağlayın

Sıkça Sorulan Sorular

Nginx mi Apache mi kullanmalıyım?

Nginx statik dosya sunumu, reverse proxy ve yüksek eş zamanlı bağlantı senaryolarında üstündür. Apache ise .htaccess desteği ve modül ekosistemi ile özellikle paylaşımlı hosting ortamlarında avantajlıdır. Modern projelerde Nginx tercih edilmektedir.

Nginx yapılandırma değişikliği sunucuyu yeniden başlatmayı gerektirir mi?

nginx -s reload komutu yapılandırmayı kesintisiz olarak yeniden yükler. Mevcut bağlantılar etkilenmez, yeni bağlantılar güncel yapılandırma ile işlenir. Tam yeniden başlatma (systemctl restart nginx) nadiren gereklidir.

Nginx ile kaç web sitesi barındırabilirim?

Nginx'in kendisi binlerce server block'u destekler. Sınırlayıcı faktör sunucunuzun RAM ve CPU kapasitesidir. Her site için ayrı server block tanımlayarak tek bir Nginx instance'ı üzerinde yüzlerce siteyi sorunsuz barındırabilirsiniz.

Nginx yapılandırma bilginizi pekiştirdikten sonra Linux komut satırı rehberimizi ve Docker Compose makalemizi de incelemenizi öneririz.

Nginx Optimizasyonlu Cloud Sunucular

Hosted Cloud sunucularında Nginx önceden yapılandırılmış olarak gelir. Yüksek performanslı web altyapınızı hemen kurun.

Cloud Sunucu Planlarını İnceleyin
A

Ahmet Yılmaz

Kıdemli Altyapı Mühendisi

10 yılı aşkın bulut altyapısı ve DevOps deneyimiyle Hosted Cloud'un teknik ekibinde yer almaktadır. Kubernetes, Terraform ve yüksek erişilebilirlik mimarileri üzerine uzmanlaşmıştır.

Yorumlar yakında