NGINX Reverse Proxy Nedir? Kurulum, Konfigürasyon ve En İyi Uygulamalar

NGINX Reverse Proxy Nedir? Kurulum, Konfigürasyon ve En İyi Uygulamalar
NGINX reverse proxy, istemciden gelen HTTP(S) isteklerini arkadaki bir veya birden fazla web uygulamasına yönlendiren, performans ve güvenlik katmanı sunan güçlü bir yapılandırma modelidir. Bu yazıda reverse proxy kavramını hem teknik olmayan bakış açısıyla, hem de sistem yöneticileri ve yazılım geliştiriciler için teknik detaylarıyla ele alacağız. Ayrıca Ubuntu tabanlı sistemlerde temel NGINX reverse proxy konfigürasyon örneklerini de paylaşacağız. İhtiyaç duyduğunuzda Kompanse Yazılım gibi deneyimli ekipler bu mimariyi ölçeklenebilir ve güvenli şekilde kurmanıza yardımcı olabilir.
Reverse Proxy Nedir? Normal Proxy ile Farkı
Proxy kavramı genel olarak istemci ile sunucu arasına giren bir aracı anlamına gelir. Ancak iki temel tür vardır:
- Forward proxy: İstemci adına internete çıkar. Genellikle kurum içi kullanıcıların dış dünyaya erişimini kontrol etmek için kullanılır.
- Reverse proxy: İnternetten gelen istekleri arkadaki sunuculara yönlendirir. Kullanıcı, uygulama sunucularını doğrudan görmez; yalnızca reverse proxy ile konuşur.
NGINX bu ikinci rolü, yani reverse proxy görevini son derece verimli şekilde yerine getirir. Böylece:
- Arkada kaç sunucu olduğu gizlenir ve esnekçe ölçeklenebilir.
- Güvenlik duvarı gibi davranarak saldırı yüzeyini azaltır.
- Önbellekleme, sıkıştırma ve bağlantı yönetimiyle performansı artırır.
Neden NGINX ile Reverse Proxy Kullanmalısınız?
NGINX, hafif ve yüksek performanslı mimarisi sayesinde reverse proxy rolünde yaygın olarak tercih edilir. İşte başlıca avantajlar:
- Yüksek performans: Olay tabanlı (event-driven) mimarisi sayesinde binlerce eşzamanlı bağlantıyı düşük kaynakla yönetebilir.
- Yük dengeleme (load balancing): Birden fazla backend sunucu arasında trafiği dağıtarak ölçeklenebilirlik sağlar.
- Güvenlik: Uygulama sunucularını doğrudan internete açmak yerine NGINX üzerinden sunarak ek bir güvenlik katmanı oluşturabilirsiniz.
- SSL sonlandırma: TLS/SSL işlemlerini NGINX üzerinde sonlandırıp arka uçta düz HTTP kullanarak uygulama sunucularının yükünü hafifletebilirsiniz.
- Önbellekleme ve sıkıştırma: Statik ve dinamik içerikleri cache’leyip sıkıştırarak yanıt sürelerini kısaltır.
- Esnek konfigürasyon: Sanal host’lar, farklı domain ve path’lere göre yönlendirme gibi gelişmiş kuralları kolayca tanımlayabilirsiniz.
NGINX Reverse Proxy Nasıl Çalışır? (Teknik Bakış)
Basit senaryoda NGINX, istemciden gelen isteği alır, konfigürasyonda tanımlı proxy_pass kuralına göre arka uç (upstream) sunucuya iletir ve aldığı cevabı istemciye geri döndürür. Bu sırada:
- İstek ve yanıt başlıklarını (headers) değiştirebilir ya da ekleyebilir.
- İçerik üzerinde sıkıştırma (gzip, brotli gibi) uygulayabilir.
- Bağlantı havuzu (keepalive) ile backend bağlantılarını yeniden kullanabilir.
- Önbellekleme ve buffer’lama yaparak backend üzerindeki yükü azaltabilir.
NGINX resmi dokümantasyonunda bu süreç “Passing a Request to a Proxied Server”, “Passing Request Headers” ve “Configuring Buffers” gibi başlıklarla detaylandırılır. Aşağıda bu kavramları pratik örneklerle inceleyeceğiz.
Ubuntu Üzerinde NGINX Kurulumu (Kısa Özet)
Ubuntu Server belgelerinde NGINX için özel bir sayfa bulamasanız da, paket yönetim sistemi üzerinden kurulum oldukça basittir. Temel adımlar genellikle şu şekildedir:
sudo apt update
sudo apt install nginx
sudo systemctl enable nginx
sudo systemctl start nginx
Kurulumdan sonra varsayılan konfigürasyon dosyaları genellikle /etc/nginx/nginx.conf ve /etc/nginx/sites-available/ altında bulunur. Reverse proxy yapılandırmasını çoğunlukla sites-available içindeki sanal host dosyalarına eklemek daha düzenli bir yaklaşımdır.
Basit Bir NGINX Reverse Proxy Örneği
Örnek senaryo: 80 portundan gelen istekleri, localhost’ta 5000 portunda çalışan bir uygulamaya yönlendirelim.
sudo nano /etc/nginx/sites-available/myapp.conf
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:5000;
# Temel header ayarları
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;
}
}
Ardından site’ı etkinleştirip NGINX’i yeniden yükleyebilirsiniz:
sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Bu temel yapılandırma ile NGINX, example.com adresine gelen tüm istekleri 127.0.0.1:5000 adresindeki uygulamaya reverse proxy olarak iletecektir.
Request Header’larını Doğru Yönetmek
NGINX reverse proxy kullanırken en kritik konulardan biri, istemcinin gerçek IP adresi ve protokol bilgisinin arka uç uygulamaya doğru şekilde iletilmesidir. NGINX dokümantasyonunda “Passing Request Headers” başlığı altında bu konu detaylı anlatılır.
Önemli ayarlar:
proxy_set_header Host $host;: İstek yapılan host bilgisini backend’e iletir. Sanal host tabanlı uygulamalarda kritiktir.proxy_set_header X-Real-IP $remote_addr;: İstemcinin gerçek IP adresini backend’e aktarır.proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: Reverse proxy zincirindeki tüm IP’leri kaydeder.proxy_set_header X-Forwarded-Proto $scheme;: İsteğin HTTP mi HTTPS mi geldiğini gösterir.
Özellikle loglama, oran sınırlama (rate limiting) veya IP tabanlı erişim kontrolleri yapan uygulamalarda bu header’ların doğru set edilmesi hayati önem taşır.
Buffer ve Zaman Aşımı (Timeout) Ayarları
“Configuring Buffers” konusu, yüksek trafikli uygulamalarda performans ve bellek kullanımı açısından kritik bir konudur. NGINX, upstream sunucudan gelen yanıtı tampon (buffer) alanlarda tutar. Bu alanların boyutları çok küçük olursa disk kullanımına düşebilir, çok büyük olursa bellek tüketimi artar.
Yaygın kullanılan bazı direktifler:
proxy_buffer_size: Yanıtın ilk kısmı (response header dahil) için kullanılan buffer boyutu.proxy_buffers: Yanıt gövdesi için kullanılacak buffer sayısı ve boyutu.proxy_busy_buffers_size: İstemciye gönderilirken kullanılabilecek maksimum buffer alanı.proxy_read_timeout: Backend’den yanıt beklerken ne kadar süre bekleneceği.
location / {
proxy_pass http://127.0.0.1:5000;
proxy_buffer_size 16k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 32k;
proxy_read_timeout 60s;
}
Doğru değerler, uygulamanızın yanıt boyutlarına, kullanıcı sayısına ve sunucunun bellek kapasitesine göre değişir. Özellikle büyük JSON yanıtları veya dosya indirme senaryolarında bu ayarların gözden geçirilmesi gerekir.
Birden Fazla Backend ile Çalışmak: Upstream Tanımı
NGINX reverse proxy, aynı zamanda güçlü bir HTTP load balancer’dır. Birden fazla backend sunucuyu upstream bloğu ile tanımlayıp trafiği aralarında dağıtabilirsiniz.
upstream myapp_backend {
server 127.0.0.1:5001;
server 127.0.0.1:5002;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://myapp_backend;
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;
}
}
Bu yapı sayesinde:
- Trafiği birden fazla uygulama sunucusuna dağıtabilirsiniz.
- Backend sunuculardan biri devre dışı kaldığında sistemin ayakta kalma ihtimali artar.
- Gelişmiş health check ve dinamik upstream yönetimi için NGINX Plus gibi ticari çözümlerden yararlanabilirsiniz.
SSL/TLS Sonlandırma ile Güvenli Reverse Proxy
Modern web uygulamalarında tüm trafiğin HTTPS üzerinden akması artık fiili bir standart. NGINX reverse proxy, SSL sonlandırma (SSL termination) rolünü üstlenerek:
- Tüm TLS el sıkışma (handshake) maliyetini kendi üzerinde toplar.
- Backend sunucularla düz HTTP veya iç ağda TLS üzerinden konuşabilir.
- Tek bir noktadan sertifika ve protokol yönetimi sağlar.
Basit bir HTTPS reverse proxy örneği:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
location / {
proxy_pass http://127.0.0.1:5000;
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;
}
}
Daha ileri seviye güvenlik için NGINX’in SSL yapılandırma rehberleri ve F5 WAF for NGINX gibi çözümlerle entegrasyon seçenekleri değerlendirilebilir.
Performans Optimizasyonu: Sıkıştırma, Önbellek ve Keepalive
Reverse proxy katmanı, performans optimizasyonu için güçlü bir fırsattır:
HTTP Sıkıştırma
NGINX, içerikleri gzip ile sıkıştırarak ağ üzerinden daha az veri taşınmasını sağlar:
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1024;
}
Böylece özellikle JSON API’ler ve SPA uygulamalarında ciddi bant genişliği tasarrufu elde edilir.
Önbellekleme (Content Caching)
NGINX’in içerik önbellekleme özellikleri, sık erişilen sayfaları ve dosyaları disk üzerinde tutarak backend’e giden istek sayısını azaltır. Bu konu NGINX dokümantasyonunda “Content Cache” başlığı altında detaylı anlatılır. Örneğin, statik dosyalar veya değişimi az olan dinamik sayfalar için kısa süreli cache stratejileri uygulanabilir.
Keepalive Bağlantıları
Backend sunucularla yapılan bağlantıları her istek için yeniden açmak yerine, keepalive ile tekrar kullanmak performansı artırır:
upstream myapp_backend {
server 127.0.0.1:5001;
server 127.0.0.1:5002;
keepalive 32;
}
location / {
proxy_pass http://myapp_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
Bu yapı, özellikle yoğun trafikli API servislerinde CPU ve ağ kaynaklarının daha verimli kullanılmasını sağlar.
Uygulama Geliştiriciler İçin Öneriler
Reverse proxy kullanan ortamlarda uygulama geliştiricilerin dikkat etmesi gereken bazı noktalar vardır:
- Mutlak URL üretimi: Uygulama, dışarıya link üretirken reverse proxy arkasında çalıştığını bilmeli; protokol ve host bilgisini
X-Forwarded-ProtoveHostheader’larından okuyabilmelidir. - IP tabanlı kısıtlama: Güvenlik kontrolleri yapılırken doğrudan
REMOTE_ADDRyerineX-Real-IPveya doğrulanmışX-Forwarded-Forkullanılmalıdır. - Dosya upload boyutları: NGINX’te
client_max_body_sizeile yükleme limitleri ayarlanmalı, uygulama tarafındaki limitlerle uyumlu olmalıdır. - Health check endpoint’leri: Load balancer ve reverse proxy için hafif ve hızlı çalışan sağlık kontrol endpoint’leri sunmak, servis sürekliliği açısından önemlidir.
İşletmeler İçin Reverse Proxy Kullanım Senaryoları
NGINX reverse proxy, sadece teknik bir tercih değil, aynı zamanda stratejik bir altyapı kararıdır. Kurumsal ölçekte sık görülen senaryolar:
- Mikroservis mimarisi: Farklı servisleri tek bir domain altında toplayıp path bazlı yönlendirme yapmak (
/api,/authvb.). - Çoklu ortam yönetimi: Test, staging ve prod ortamlarını farklı subdomain’ler veya path’ler üzerinden yönetmek.
- Eski sistemleri gizleme: Eski teknolojilerle yazılmış uygulamaları doğrudan internete açmak yerine NGINX arkasına alarak güvenlik ve ölçeklenebilirlik kazanmak.
- Merkezi loglama ve izleme: Tüm trafiği NGINX üzerinden geçirerek merkezi loglama, metrik toplama ve güvenlik analizi yapmak.
Bu tür senaryolarda, Kompanse Yazılım gibi deneyimli ekipler; mimari tasarım, güvenlik politikaları, container ve bulut entegrasyonları gibi konularda profesyonel destek sunarak NGINX reverse proxy yapılarını kurumsal standartlara uygun hale getirebilir.
Sonuç: NGINX Reverse Proxy ile Güvenli ve Ölçeklenebilir Bir Katman Kurun
NGINX reverse proxy, modern web ve API mimarilerinin vazgeçilmez bileşenlerinden biridir. Doğru konfigüre edildiğinde:
- Uygulamalarınız daha hızlı yanıt verir.
- Güvenlik katmanınız güçlenir.
- Altyapınız ölçeklenebilir ve yönetilebilir hale gelir.
Bu yazıda temel kavramlardan başlayarak header yönetimi, buffer ayarları, load balancing, SSL sonlandırma ve performans optimizasyonu gibi ana konuları ele aldık. Resmi NGINX dokümantasyonundaki “Reverse Proxy”, “Content Cache” ve “Security Controls” bölümlerini takip ederek yapılandırmanızı derinleştirebilir, Ubuntu gibi Linux dağıtımlarında paket yöneticisi üzerinden kolayca kurulum yapabilirsiniz.
Altyapınızı büyütmeyi, mikroservislere geçiş yapmayı veya mevcut sisteminizi daha güvenli hale getirmeyi planlıyorsanız, NGINX reverse proxy katmanını stratejik bir yatırım olarak değerlendirmek uzun vadede hem performans hem de maliyet açısından önemli kazanımlar sağlayacaktır.