Reverse Proxy (Ters Vekil Sunucu) Nedir?
Kısa tanım
Reverse proxy (ters vekil sunucu), istemcilerden gelen istekleri karşılayıp arkadaki bir veya birden fazla uygulama sunucusuna ileten ve onların yanıtını istemciye geri döndüren sunucudur. İstemci yalnızca proxy ile konuşur, arkadaki sunucuları görmez. TLS sonlandırma, yük dengeleme, önbellekleme, sıkıştırma ve güvenlik filtreleri genellikle bu katmanda yapılır; Nginx, HAProxy ve Caddy yaygın örneklerdir.
Diğer adları: ters vekil sunucu, ters proxy, reverse proxy sunucusu, Reverse Proxy

Kimin adına çalışıyor?
“Proxy” iki taraf arasında duran ve istekleri aracı olarak ileten sunucudur; farkı, kimi temsil ettiği belirler. Forward proxy istemcilerin adına çalışır: bir şirket ağındaki çalışanların internete çıkışını tek noktadan yöneten sunucu buna örnektir ve hedef siteler, istemcileri değil proxy'yi görür. Reverse proxy ise sunucuların adına çalışır: ziyaretçi example.com'a bağlandığını düşünür, ama karşısındaki sunucu isteği arkadaki uygulamaya iletir ve yanıtı geri getirir. Arkada kaç sunucu olduğu, hangi portlarda çalıştıkları, hangi dille yazıldıkları dışarıdan görünmez.
Tek kapıda toplanan işler
- TLS sonlandırma: TLS sertifikası ve şifreleme proxy'de yönetilir; arkadaki uygulama yerel ağ üzerinden düz HTTP konuşabilir. Sertifika yenileme tek yerde yapılır.
- Yük dengeleme: İstekler birden fazla uygulama sunucusuna dağıtılır, sağlıksız olanlar devreden çıkarılır. Bu iş için ayrılmış bir yük dengeleyici de aslında özelleşmiş bir reverse proxy'dir.
- Önbellek ve sıkıştırma: Statik dosyalar ve önbelleğe alınabilir yanıtlar proxy'den servis edilir, Gzip veya Brotli ile sıkıştırılır. CDN'ler, dünyaya yayılmış reverse proxy'lerden oluşan bir ağ olarak düşünülebilir.
- Yönlendirme:
/api/isteklerini bir servise, geri kalanını başka bir servise göndermek; aynı alan adında birden fazla uygulamayı bir arada çalıştırmak. - Güvenlik: Uygulama sunucusunun portunu dışarıya kapatmak, hız sınırlama, istek boyutu sınırı ve WAF kurallarını uygulamak için doğal yer burasıdır.
Nginx ile tipik bir kurulum
Next.js, Node.js veya Python ile yazılmış bir uygulamanın 127.0.0.1:3000 üzerinde çalıştığı ve önünde Nginx bulunduğu yaygın bir yapılandırma:
server {
listen 443 ssl;
server_name example.com;
# ssl_certificate ve ssl_certificate_key satırları burada
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Host satırı önemlidir: Nginx bu başlığı varsayılan olarak proxy_pass'teki adrese (127.0.0.1:3000) çevirir. Uygulama mutlak URL üretirken asıl alan adını bilmek zorundaysa bu başlık açıkça iletilmelidir.
Arkadaki uygulamanın bilmesi gerekenler
Proxy araya girdiğinde uygulama, bağlantıyı kuran tarafı ziyaretçi değil proxy olarak görür. Gerçek bilgiler HTTP başlıklarıyla taşınır ve yanlış yorumlanmaları iki tür soruna yol açar:
- İstemci IP'si: Ziyaretçinin adresi
X-Forwarded-Forbaşlığıyla gelir (standart karşılığı RFC 7239'dakiForwardedbaşlığıdır ama daha az kullanılır). Bu başlığı istemci de gönderebileceği için uygulama yalnızca kendi güvendiği proxy'nin eklediği değeri kullanmalıdır; aksi halde IP bazlı hız sınırlama ve erişim kuralları kolayca yanıltılır. Uygulama sunucusu doğrudan internete de açıksa bu başlığın hiçbir kısmına güvenilemez. - Protokol: TLS proxy'de sonlandığı için uygulama isteği HTTP olarak görür.
X-Forwarded-Protodikkate alınmazsa uygulama ziyaretçiyi sürekli HTTPS'e göndermeye çalışıp bir yönlendirme döngüsü oluşturabilir ya da canonical etiketlerine ve site haritasınahttp://ile başlayan adresler yazabilir.
Hata sayfaları çoğu zaman proxy'den gelir
Ziyaretçinin gördüğü bazı hataları uygulama değil proxy üretir. Arkadaki uygulama çalışmıyorsa veya geçersiz bir yanıt dönüyorsa proxy 502 Bad Gateway döner; uygulama yanıtı zamanında üretemezse 504 Gateway Timeout görülür. Nginx'te bu süreyi belirleyen proxy_read_timeout varsayılan olarak 60 saniyedir. Bu kodları görünce ilk bakılacak yer, proxy'nin hata logu ve arkadaki sürecin durumudur.

