Nginx Reverse Proxy ile Birden Fazla Uygulama Yayınlamak
Tek sunucuda web sitesi, yönetim paneli ve API'yi ayrı adreslerden yayınlamanın düzenli yolu: Nginx reverse proxy. Nasıl çalıştığını ve neden işe yaradığını anlattım.
İçindekiler
Aynı sunucuda bir kurumsal site, bir yönetim paneli ve mobil uygulamanın kullandığı bir API çalıştırmak istiyorsunuz. Hepsi farklı teknolojilerle yazılmış, farklı portlarda çalışıyor; ama ziyaretçinin firmaniz.com, panel.firmaniz.com ve api.firmaniz.com gibi temiz adreslerle ve SSL ile erişmesi gerekiyor. Bu işi düzenli biçimde çözmenin yaygın yolu bir Nginx reverse proxy kurmaktır. Bu yazıda kavramı, faydalarını ve kurulumda dikkat edilecek noktaları anlatıyorum.
Reverse proxy nedir?
Reverse proxy (ters vekil sunucu), internetten gelen istekleri karşılayan ve onları arka plandaki doğru uygulamaya ileten bir ara katmandır. Ziyaretçi yalnızca bu kapıyla konuşur; arkada kaç uygulama olduğunu, hangi portta çalıştıklarını görmez.
Bir otel resepsiyonu gibi düşünebilirsiniz. Misafir kimin odasında kimin kaldığını bilmez; resepsiyona gelir, resepsiyon onu doğru odaya yönlendirir. Reverse proxy de gelen her isteğin alan adına ve yoluna bakarak onu ilgili servise gönderir.
Neden Nginx?
Nginx, yüksek eşzamanlı bağlantıları az kaynakla karşılayabilen, açık kaynak ve yaygın kullanılan bir web sunucusudur. Hem statik dosya sunmada hem de istekleri başka servislere aktarmada güçlüdür. Bu yüzden reverse proxy rolü için en çok tercih edilen araçlardan biridir. Alternatif olarak Caddy, Traefik veya HAProxy gibi araçlar da kullanılır; seçim projenin ihtiyacına göre yapılır.
Nginx reverse proxy ne işe yarar?
Bu katmanı kurmanın faydaları yalnızca adres yönlendirmeyle sınırlı değildir:
- Tek sunucuda çok uygulama: Farklı portlarda çalışan uygulamaları farklı alan adı veya alt alan adlarıyla yayınlarsınız.
- Merkezi SSL yönetimi: Sertifikalar tek yerde kurulur ve yenilenir; arka plandaki uygulamaların bununla uğraşması gerekmez.
- Güvenlik: Uygulamalar doğrudan internete açılmaz; yalnızca proxy dışarıya bakar.
- Önbellek ve sıkıştırma: Statik dosyalar ve sık istenen yanıtlar önbelleğe alınarak arka plandaki yük azaltılır.
- Yük dengeleme: Aynı uygulamanın birden fazla kopyası varsa istekler aralarında paylaştırılır.
- Hız sınırlama: Kısa sürede aşırı istek gönderen kaynaklar sınırlandırılabilir.
Nginx reverse proxy nasıl çalışır? Basit bir örnek
Diyelim ki sunucunuzda port 3000’de bir Next.js ön yüzü, port 4000’de bir API çalışıyor. Nginx’e şunu söylersiniz: “api.firmaniz.com adresine gelen istekleri 4000 numaralı porta ilet.” Yapılandırma kabaca şöyle görünür:
server {
listen 443 ssl;
server_name api.firmaniz.com;
location / {
proxy_pass http://127.0.0.1:4000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Buradaki proxy_set_header satırları önemlidir. Bunlar olmadan arkadaki uygulama ziyaretçinin gerçek IP adresini ve bağlantının HTTPS olup olmadığını bilemez; bu da yanlış yönlendirmelere ve hatalı kayıtlara yol açar. Gerçek kurulumda SSL sertifika yolları ve güvenlik başlıkları da eklenir.
Docker ile birlikte kullanım
Reverse proxy, kapsayıcı tabanlı altyapıların doğal bir parçasıdır. Her uygulama kendi Docker kapsayıcısında çalışır ve dışarıya port açmaz; Nginx ise aynı iç ağdaki kapsayıcılara isimleriyle ulaşarak istekleri iletir. Böylece yeni bir uygulama eklemek, Nginx’e birkaç satır yeni yapılandırma eklemek kadar kolaylaşır.
Bu yapının pratik bir faydası da şudur: bir uygulamanın yeni sürümünü ayrı bir kapsayıcıda başlatıp test ettikten sonra Nginx yönlendirmesini ona çevirebilir, sorun çıkarsa saniyeler içinde eskisine dönebilirsiniz.
WebSocket ve görüntülü görüşme gibi özel durumlar
Canlı sohbet, bildirim veya görüntülü görüşme gibi kesintisiz bağlantı gerektiren özellikler WebSocket kullanır. Nginx bu bağlantıları varsayılan ayarlarla doğru iletmeyebilir; bağlantı yükseltme (upgrade) başlıklarının ve zaman aşımı sürelerinin ayrıca ayarlanması gerekir. Gerçek zamanlı uygulamalarda en sık karşılaştığım kurulum hatalarından biri budur.
Örnek senaryo: bir klinik için üç adres
Bir klinik düşünün: ana sitede hizmetler ve doktorlar tanıtılıyor, randevu.klinik.com adresinde hastalar randevu alıyor, panel.klinik.com adresinde ise sekreterler randevuları yönetiyor. Üç uygulama da aynı sunucuda, ayrı kapsayıcılarda çalışıyor. Nginx gelen isteğin alan adına bakıp onu doğru uygulamaya iletiyor; panel adresine ise yalnızca belirli IP adreslerinden erişime izin veriliyor. Hasta tarafında her şey tek ve tutarlı bir sistem gibi görünüyor.
Kurulumda sık yapılan hatalar
Nginx reverse proxy yapılandırması kısa görünse de küçük hatalar büyük sorunlara yol açabilir:
- Uygulama portlarını dışarıya açık bırakmak: Proxy kurulsa bile uygulama doğrudan IP ve port üzerinden erişilebiliyorsa güvenlik katmanı anlamsızlaşır. Bu konuyu sunucu güvenliği yazısında ayrıca ele aldım.
- Gerçek IP başlıklarını iletmemek: Loglarda tüm ziyaretçiler aynı IP’den geliyormuş gibi görünür.
- HTTP’den HTTPS’e yönlendirmeyi unutmak: Sitenin iki farklı sürümü erişilebilir kalır.
- Dosya yükleme sınırını ayarlamamak: Büyük görsel veya belge yüklemeleri hata verir.
- Sertifika yenilemeyi otomatikleştirmemek: Birkaç ay sonra site bir sabah “güvenli değil” uyarısıyla açılır.
SSL’in temel mantığını merak ediyorsanız SSL sertifikası nedir yazısına göz atabilirsiniz. Ayrıca Nginx’in önüne Cloudflare gibi bir katman koyuyorsanız iki taraftaki SSL ayarlarının uyumlu olması gerekir.
Bu işi nasıl birlikte yaparız?
Sunucunuzda birden fazla uygulamayı düzenli ve güvenli şekilde yayınlamak istiyorsanız birlikte çalışma süreci şöyledir:
- Envanter çıkarma: Hangi uygulamaların, hangi adreslerde ve hangi portlarda çalışacağını; WebSocket veya büyük dosya yükleme gibi özel ihtiyaçları listeleriz.
- Kapsam ve teklif: Alan adı ve DNS düzeni, SSL yönetimi, önbellek ve güvenlik kurallarını içeren bir plan ve teklif hazırlarım.
- Yapılandırma ve test: Nginx’i kurar, her yönlendirmeyi, SSL’i ve gerçek IP aktarımını test eder; uygulama portlarının dışarıya kapalı olduğunu doğrularım.
- Teslim ve destek: Yapılandırmayı belgeler, sertifika yenileme ve izleme düzenini kurarım; yeni uygulama eklemek istediğinizde destek veririm.
Altyapınızı birlikte gözden geçirmek isterseniz bana ulaşabilirsiniz.
Sık sorulan sorular
Nginx reverse proxy kullanmak için Docker şart mı?
Hayır. Nginx, aynı sunucuda doğrudan çalışan uygulamalara da yönlendirme yapabilir. Docker ile birlikte kullanıldığında yönetim daha düzenli hale gelir ama zorunlu değildir.
Reverse proxy siteyi yavaşlatır mı?
Doğru yapılandırılmış bir reverse proxy fark edilir bir gecikme eklemez; önbellek ve sıkıştırma sayesinde çoğu zaman siteyi hızlandırır.
Apache yerine Nginx kullanmalı mıyım?
İkisi de olgun ve güvenilir web sunucularıdır. Nginx, çok sayıda eşzamanlı bağlantıyı az kaynakla karşılaması ve proxy rolündeki esnekliği nedeniyle bu senaryoda sık tercih edilir. Bazı kurulumlarda Nginx önde, Apache arkada birlikte de çalışır.
Tek sunucuda kaç uygulama yayınlanabilir?
Sınırı Nginx değil, sunucunun işlemci, bellek ve disk kapasitesi belirler. Uygulamaların kaynak kullanımı izlenerek gerektiğinde sunucu büyütülür veya yük ikinci bir sunucuya dağıtılır.
Sonuç
Nginx reverse proxy, tek sunucuda birden fazla uygulamayı temiz adreslerle, merkezi SSL ile ve daha güvenli biçimde yayınlamanın sağlam bir yoludur. Kurulumu kısa, ama ayrıntıları önemlidir. Kendi altyapınız için destek isterseniz iletişim sayfasından yazabilirsiniz.
