Reverse proxy, bir veya daha fazla web sunucusunun önünde duran, istemci isteklerini karşılayıp uygun backend sunucusuna ileten ve ardından sunucunun yanıtını sanki yanıt proxy'nin kendisinden geliyormuş gibi istemciye döndüren bir sunucudur. Aracı olarak çalışır: dış istemcilere tek bir arayüz sunarken iç sunucu kaynaklarını yönetir.
Reverse proxy nedir?
Reverse proxy, istemciler ile kaynak (origin) sunucular arasında, ağın kenarında çalışır. Bir istemci bir kaynak için istek gönderdiğinde, istek önce reverse proxy'ye yönlendirilir. Reverse proxy hangi backend sunucusunun isteği karşılayacağına karar verir, isteği o sunucuya iletir, yanıtı alır ve istemciye geri aktarır. Bu süreç istemci için şeffaftır; istemci yanıtın doğrudan reverse proxy'den geldiğini görür.
Bu mimari, istemcilerin önünde duran ve onların isteklerini internetteki dış sunuculara ileten forward proxy ile tezat oluşturur. Forward proxy istemcinin anonimliğini korur ve giden trafiği filtreler; reverse proxy ise backend sunucuları korur ve optimize eder.
Reverse proxy'ye neden ihtiyacınız var
Reverse proxy kullanmak web uygulamaları ve servisleri için başta güvenlik, performans ve güvenilirlik olmak üzere çeşitli avantajlar sağlar.
Güçlendirilmiş güvenlik
Reverse proxy, backend altyapısı için kritik bir güvenlik katmanı işlevi görür.
* Soyutlama: kaynak sunucuların IP adreslerini ve özelliklerini gizler. İstemciler yalnızca reverse proxy ile iletişim kurar; bu da backend sunucu ayrıntılarının doğrudan açığa çıkmasını engeller.
* Saldırı azaltma: reverse proxy'ler kötü niyetli trafiği filtreleyebilir, yaygın saldırı kalıplarını (örneğin SQL injection, cross-site scripting) tespit edip engelleyebilir ve dağıtık hizmet reddi (DDoS) saldırısı sırasında yüksek hacimli istekleri soğurarak backend sunucuları aşırı yüklenmeye karşı koruyabilir.
* Merkezî güvenlik politikaları: Web Application Firewall (WAF) kuralları veya erişim denetimleri gibi güvenlik politikaları, tüm backend uygulamaları için reverse proxy düzeyinde tek biçimli olarak uygulanabilir.
Yük dengeleme
Yüksek erişilebilirlik ve ölçeklenebilirlik gerektiren uygulamalar için yük dengeleme şarttır.
* Trafik dağıtımı: reverse proxy, gelen istemci isteklerini birden fazla backend sunucusuna dağıtır. Böylece tek bir sunucunun darboğaza dönüşmesi engellenir ve kaynaklar en verimli şekilde kullanılır.
* Yüksek erişilebilirlik: bir backend sunucusu arızalanır veya yanıt vermezse, reverse proxy sorunu tespit edip trafiği otomatik olarak sağlıklı sunuculara yönlendirir ve hizmetin kesintisiz sürmesini sağlar.
* Yük dengeleme algoritmaları: şu algoritmalar kullanılabilir:
* Round Robin: istekleri sırayla her sunucuya dağıtır.
* Least Connections: istekleri en az etkin bağlantıya sahip sunucuya yönlendirir.
* IP Hash: aynı istemci IP adresinden gelen istekleri hep aynı backend sunucusuna yönlendirir; oturum yapışkanlığını korumak için kullanışlıdır.
Önbellekleme
Reverse proxy'ler önbellekleme sayesinde uygulama performansını belirgin şekilde artırabilir.
* Kaynak sunuculardaki yükün azalması: statik içerik (örneğin görseller, CSS dosyaları, JavaScript) ve sık erişilen dinamik içerik reverse proxy'nin önbelleğinde tutulabilir. Bu içeriğe yönelik sonraki istekler doğrudan önbellekten karşılanır ve backend sunucuların yükü azalır.
* Daha hızlı yanıt süreleri: coğrafi olarak daha yakın veya anında hazır bir önbellekten içerik sunarak reverse proxy'ler gecikmeyi azaltır ve istemcilerin algıladığı hızı artırır.
SSL/TLS sonlandırma
Şifreli iletişimi işlemek backend sunucular için CPU açısından maliyetli olabilir.
* Şifrelemenin devralınması: reverse proxy, istemcilerden gelen SSL/TLS bağlantılarını sonlandırabilir. Gelen istekleri çözer, backend sunuculara (şifresiz veya yeniden şifrelenmiş olarak) iletir ve yanıtları istemcilere göndermeden önce şifreler.
* Performans iyileştirmesi: kriptografik işlemleri reverse proxy'ye devretmek backend sunucu kaynaklarını serbest bırakır ve bu sunucuların uygulama mantığına odaklanmasını sağlar.
* Merkezî sertifika yönetimi: tüm SSL/TLS sertifikaları tek bir noktadan yönetilebilir; bu da sertifika yenileme ve dağıtımını kolaylaştırır.
Sıkıştırma
Aktarılan veri boyutunu optimize etmek performans için kritiktir.
* Bant genişliği tasarrufu: reverse proxy'ler sunucu yanıtlarını istemcilere göndermeden önce sıkıştırabilir (örneğin Gzip veya Brotli ile). Bu, ağ üzerinden aktarılan veri miktarını azaltır, bant genişliğinden tasarruf sağlar ve özellikle yavaş bağlantıdaki istemciler için sayfa yükleme sürelerini kısaltır.
URL yeniden yazma ve A/B testleri
Reverse proxy'ler istek yönlendirmesinin yönetiminde esneklik sunar.
* Esnek yönlendirme kuralları: URL'leri yeniden yazabilir, başlıkları değiştirebilir veya tanımlı kurallara göre (örneğin URL yolu, HTTP başlıkları, çerezler) belirli istekleri farklı backend servislerine yönlendirebilir. Bu, mikroservis mimarilerini ve API gateway işlevlerini kolaylaştırır.
* A/B testleri: kullanıcıların belirli bir yüzdesini veya belirli kullanıcı segmentlerini uygulamanın farklı bir sürümüne (örneğin yeni bir özelliğin dağıtımına) yönlendirerek, reverse proxy'ler istemci tarafında değişiklik veya DNS güncellemesi gerektirmeden A/B testi yapılmasına imkân tanır.
Merkezî günlükleme ve izleme
Tüm istemci istekleri reverse proxy'den geçtiği için tek bir veri toplama noktası oluşur.
* Tek veri kaynağı: istek günlükleri, erişim kalıpları ve performans ölçümleri reverse proxy üzerinde merkezî olarak toplanıp analiz edilebilir. Bu, birden fazla backend servisi için izleme, sorun giderme ve güvenlik denetimini kolaylaştırır.
Reverse proxy nasıl çalışır
Reverse proxy'nin işleyiş akışı birkaç adımdan oluşur:
1. İstemci isteği: istemci, reverse proxy ile ilişkili alan adına bir HTTP/S isteği gönderir.
2. İsteğin alınması: reverse proxy isteği alır.
3. Politikaların uygulanması: reverse proxy yapılandırılmış kuralları uygular; bunlar şunları içerebilir:
* Güvenlik denetimleri (WAF, hız sınırlama).
* Önbellek sorgusu (içerik önbellekteyse doğrudan sunulur).
* SSL/TLS sonlandırma (geçerliyse).
* Backend sunucu seçmek için yük dengeleme algoritmasının uygulanması.
4. İsteğin iletilmesi: reverse proxy isteği seçilen backend sunucusuna iletir. Başlıkları değiştirebilir (örneğin özgün istemci IP'sini korumak için X-Forwarded-For).
5. Backend işlemesi: backend sunucusu isteği işler ve bir yanıt üretir.
6. Yanıtın alınması: reverse proxy yanıtı backend sunucusundan alır.
7. Yanıtın değiştirilmesi: reverse proxy, yanıtı istemciye göndermeden önce sıkıştırma gibi ek değişiklikler uygulayabilir.
8. İstemciye yanıt: reverse proxy nihai yanıtı, kaynak sunucuymuş gibi görünerek istemciye gönderir.
Reverse proxy ile forward proxy karşılaştırması
Her iki proxy türü de aracı olarak çalışsa da amaçları ve konumlandırmaları belirgin biçimde farklıdır.
| Özellik | Reverse proxy | Forward proxy |
|---|---|---|
| Amaç | Backend sunucuları korur ve optimize eder | İstemcinin internete erişimini korur ve optimize eder |
| Kim kullanır | Sunucu/web sitesi sahibi | İstemci/kullanıcı (veya kullanıcılar adına kurum) |
| Konum | Kaynak sunucuların önünde durur | İstemcilerin önünde durur |
| Görünürlük | İstemci proxy'yi görür; backend sunucular proxy'yi görür | Kaynak sunucu proxy'yi görür; istemci proxy'yi görür |
| Temel hedefler | Yük dengeleme, güvenlik, önbellekleme, SSL sonlandırma | Anonimlik, erişim denetimi, içerik filtreleme, önbellekleme |
| Trafik akışı | İstemci -> Reverse proxy -> Kaynak sunucu | İstemci -> Forward proxy -> İnternet -> Kaynak sunucu |
Yaygın reverse proxy yazılımları
Reverse proxy kurmak için yaygın olarak kullanılan güçlü yazılım çözümleri şunlardır:
* Nginx: yüksek performanslı bir web sunucusu; aynı zamanda reverse proxy, yük dengeleyici ve HTTP önbellek yetenekleriyle tanınır.
* Apache HTTP Server: mod_proxy gibi modüllerle Apache de reverse proxy olarak çalışabilir; ancak yüksek trafikli proxy senaryolarında genellikle Nginx tercih edilir.
* HAProxy: yüksek erişilebilirlikli yük dengeleme ile TCP ve HTTP tabanlı uygulamaların proxy'lenmesi için özel olarak tasarlanmıştır.
* Envoy Proxy: cloud-native uygulamalar için tasarlanmış açık kaynaklı bir edge ve servis proxy'si; sıklıkla service mesh mimarilerinde kullanılır.
* Cloudflare: popüler bir Content Delivery Network (CDN); aynı zamanda küresel bir reverse proxy servisi olarak çalışır ve güvenlik, performans ve güvenilirlik özellikleri sunar.
Nginx reverse proxy yapılandırma örneği
İstekleri iki backend sunucusuna (örneğin backend1.example.com ve backend2.example.com) dağıtan temel bir Nginx reverse proxy yapılandırması:
http {
# Yük dengeleme için bir backend sunucu grubu tanımla
upstream backend_servers {
# Backend sunucu tanımları. Nginx varsayılan olarak round-robin kullanır.
server backend1.example.com;
server backend2.example.com;
# server 192.168.1.100:8080; # IP:port da kullanılabilir
}
server {
listen 80; # 80 portundaki HTTP isteklerini dinle
server_name yourdomain.com www.yourdomain.com; # Alan adınız
# Kök yol ve alt yollar için isteklerin nasıl işleneceğini tanımla
location / {
# İsteği yukarıda tanımlanan upstream grubuna ilet
proxy_pass http://backend_servers;
# İstemcinin orijinal Host başlığını koru
proxy_set_header Host $host;
# Orijinal istemci IP adresini koru
proxy_set_header X-Real-IP $remote_addr;
# İstemci IP'sini X-Forwarded-For başlığına ekle
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Orijinal protokolü koru (HTTP veya HTTPS)
proxy_set_header X-Forwarded-Proto $scheme;
# İsteğe bağlı: zaman aşımı ayarları
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# HTTPS örneği (SSL sonlandırma proxy'de)
# listen 443 ssl;
# ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
# ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;
# ... diğer SSL ayarları ...
# location / {
# proxy_pass http://backend_servers; # Backend'e giden trafik HTTP olabilir
# ... başlıklar ...
# }
}
}
