Forward Proxy ve Reverse Proxy Arasındaki Fark

Yayın tarihi:

10 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Üstte bilgisayardan forward proxy ile web'e, altta internetten reverse proxy ile sunucu rafına giden iki şerit

"Proxy" kelimesi iki farklı yapı için kullanılır ve konuşmada bunlar sık karışır. Bir geliştirici "sitenin önüne proxy koyduk" dediğinde reverse proxy'den, bir veri ekibi "istekleri proxy'den geçiriyoruz" dediğinde forward proxy'den bahseder. İkisi de iki taraf arasında duran bir aracıdır; fark, kimin adına çalıştıklarında ve kimin onları yapılandırdığındadır.

Bu yazıda iki yapıyı ayrı ayrı tanımlıyor, bir isteğin her birinden nasıl geçtiğini adım adım gösteriyor, farkları tabloda topluyoruz. Ardından reverse proxy'nin yük dengeleme, TLS sonlandırma ve önbellek gibi görevlerini, CDN'lerin bu resmin neresinde durduğunu ve kısa bir Nginx yapılandırmasını ele alıyoruz.

Forward proxy nedir?

Forward proxy, bir veya birden fazla istemcinin internete çıkarken kullandığı aracıdır. İstemci proxy'nin adresini bilir ve isteklerini ona gönderir; proxy bu istekleri kendi IP adresiyle hedef sitelere iletir. Hedef site bağlantıyı proxy'den gelmiş olarak görür.

Günlük dilde "proxy" dendiğinde neredeyse her zaman forward proxy kastedilir. Proxy hizmeti satan şirketlerin sunduğu residential, datacenter veya mobil proxy'lerin hepsi forward proxy'dir. Temel çalışma mantığını Proxy Sunucu Nedir ve Nasıl Çalışır? yazımızda ayrıntılı anlattık.

Bir isteğin forward proxy üzerinden izlediği yol şöyledir:

  1. Kullanıcı tarayıcısında veya kodunda proxy adresini tanımlar.
  2. İstemci, hedef siteye değil proxy'ye bağlanır ve HTTPS için CONNECT hedef.com:443 isteği gönderir.
  3. Proxy gerekirse kimlik doğrular, ardından hedef siteye kendi IP adresiyle bağlanır.
  4. Hedef site isteği proxy'nin IP adresinden gelmiş olarak kaydeder ve yanıtı ona gönderir.
  5. Proxy yanıtı istemciye iletir.

Komut satırında forward proxy kullanmak tek bir seçenektir:

bash
curl -x "http://kullanici:parola@pr.proxynet.io:8000" https://httpbin.org/ip

Burada istemci proxy'nin varlığından haberdardır, çünkü adresini kendisi vermiştir.

Reverse proxy nedir?

Reverse proxy, bir veya birden fazla sunucunun önüne yerleştirilen aracıdır. Ziyaretçi ornek.com adresine bağlandığında aslında reverse proxy'ye bağlanır; reverse proxy isteği arkadaki uygulama sunucularından birine iletir ve yanıtı ziyaretçiye döndürür. Ziyaretçi kendisine yanıt veren makinenin kim olduğunu bilmez ve bilmesi de gerekmez.

HTTP standardı RFC 9110, bu yapıya "gateway" ya da "reverse proxy" der ve onu, istemcinin gözünde asıl sunucu gibi davranan bir aracı olarak tanımlar. İstemci açısından reverse proxy, sitenin kendisidir.

Bir isteğin reverse proxy üzerinden izlediği yol şöyledir:

  1. Ziyaretçi ornek.com adresini açar; DNS bu adı reverse proxy'nin IP adresine çözer.
  2. Reverse proxy bağlantıyı kabul eder ve genellikle TLS şifrelemesini burada çözer.
  3. İsteğin yoluna, alan adına veya yük durumuna göre arkadaki sunuculardan birini seçer.
  4. İsteği o sunucuya iletir; ziyaretçinin gerçek IP adresini X-Forwarded-For veya Forwarded başlığıyla ekler.
  5. Uygulama sunucusunun yanıtını alır, gerekirse önbelleğe kaydeder ve ziyaretçiye gönderir.

Aralarındaki fark nedir?

İki yapı da trafiği bir uçtan alıp diğerine iletir. Farkı en kısa yoldan görmek için "bu aracı kimin çıkarına çalışıyor" sorusunu sormak yeterlidir.

ÖlçütForward proxyReverse proxy
Kimi temsil eder?İstemciyiSunucuyu
Nerede durur?İstemci ile internet arasındaİnternet ile sunucular arasında
Kim yapılandırır?Kullanıcı veya ağ yöneticisiSite sahibi veya altyapı ekibi
İstemci farkında mı?Evet, adresi istemci tanımlarHayır, siteye bağlandığını düşünür
Kimin IP'si gizlenir?İstemcininArkadaki sunucuların
Hedef kaç tane?İnternetteki herhangi bir siteArkadaki belirli sunucular
TLSHTTPS'te tünel kurar, içeriği görmezÇoğunlukla TLS'i kendisi sonlandırır
ÖnbellekŞifresiz HTTP'de mümkünYaygın kullanılır
Tipik yazılımSquid, ticari proxy hizmetleriNginx, HAProxy, Envoy, CDN'ler
Tipik kullanımErişim kontrolü, konum bazlı erişim, veri toplamaYük dengeleme, güvenlik, önbellek

Tablodaki en önemli satır TLS satırıdır. Forward proxy HTTPS trafiğinde yalnızca tünel açar ve şifreli baytları taşır. Reverse proxy ise sitenin sertifikasına sahip olduğu için trafiği çözer, isteği okur ve yönlendirme kararını içeriğe göre verebilir.

Reverse proxy ne için kullanılır?

Reverse proxy'nin görevleri, arkadaki uygulamanın kendisiyle uğraşmak zorunda kalmadığı işlerdir:

  • Yük dengeleme. Gelen istekleri birden fazla uygulama sunucusuna dağıtır. Bir sunucu yanıt vermezse trafiği diğerlerine yönlendirir; ziyaretçi arızayı fark etmez.
  • TLS sonlandırma. Sertifika yönetimi ve şifre çözme tek noktada yapılır. Arkadaki sunucular iç ağda şifresiz HTTP konuşabilir ya da ayrı bir iç sertifikayla çalışır.
  • Önbellek ve sıkıştırma. Sık istenen sayfaları ve statik dosyaları saklar, yanıtları sıkıştırır. Uygulama sunucusuna giden istek sayısı azalır.
  • Güvenlik katmanı. Web uygulama güvenlik duvarı (WAF) kurallarını, hız sınırlarını ve bot filtrelerini uygular. Arkadaki sunucuların IP adresleri doğrudan saldırıya açık kalmaz.
  • Yol bazlı yönlendirme. /api isteklerini bir servise, /blog isteklerini başka bir servise gönderir. Tek alan adı altında birden çok uygulama çalışır.
  • Kesintisiz dağıtım. Yeni sürümü yeni sunuculara kurup trafiği kademeli olarak kaydırmak reverse proxy üzerinden yapılır.

Reverse proxy'nin güvenlik rolünü, firewall ile nasıl birlikte çalıştığını Proxy ve Firewall Farkı yazımızda ele aldık.

Nginx ile basit bir reverse proxy nasıl kurulur?

Nginx'te reverse proxy'nin temel yönergesi proxy_pass'tır. Aşağıdaki yapılandırma, 443 portundan gelen trafiği iki uygulama sunucusuna dağıtır ve ziyaretçinin gerçek IP adresini arkaya iletir:

nginx
upstream uygulama {
    server 10.0.0.11:3000;
    server 10.0.0.12:3000;
}

server {
    listen 443 ssl;
    server_name ornek.com;
    ssl_certificate     /etc/ssl/ornek.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/ornek.com/privkey.pem;

    location / {
        proxy_pass http://uygulama;
        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;
    }
}

Satırların işlevi:

  • upstream bloğu arkadaki sunucuları tanımlar. Nginx varsayılan olarak istekleri sırayla dağıtır; least_conn veya ip_hash gibi yönergelerle yöntem değiştirilebilir.
  • listen 443 ssl ve sertifika satırları TLS sonlandırmayı reverse proxy'de yapar.
  • proxy_pass isteği uygulama grubuna iletir.
  • proxy_set_header satırları olmadan arkadaki uygulama her isteği reverse proxy'nin IP adresinden gelmiş gibi görür; kayıtlar ve hız sınırları anlamsızlaşır.

Yönergelerin tam listesi Nginx'in ngx_http_proxy_module belgesinde bulunur.

X-Forwarded-For başlığına güvenilir mi?

Reverse proxy arkasındaki bir uygulama ziyaretçinin IP adresini X-Forwarded-For başlığından okur. Bu başlık düz metindir ve istemci de onu gönderebilir. Uygulama başlığa körü körüne güvenirse, bir ziyaretçi sahte bir IP adresi yazarak hız sınırını veya IP bazlı kısıtlamayı aşabilir.

Doğru yaklaşım şudur:

  • Başlığı yalnızca bilinen reverse proxy'lerden gelen bağlantılarda dikkate almak. Nginx'te bu set_real_ip_from ve real_ip_header yönergeleriyle yapılır.
  • Birden fazla aracı varsa listenin sağından sola doğru okuyup güvenilen son aracıdan önceki adresi almak.
  • Standart hâline getirilmiş Forwarded başlığını (RFC 7239) destekleyen altyapılarda onu tercih etmek.

Aynı mantık forward proxy tarafında da geçerlidir: bir hedef site, proxy'nin eklediği başlıklara bakarak gerçek istemciyi görebilir. Proxy hizmetlerinin çoğu bu yüzden istemci IP'sini taşıyan başlıkları eklemez.

CDN bir reverse proxy mi?

Evet. Bir içerik dağıtım ağı (CDN), dünyanın farklı yerlerinde konumlanmış reverse proxy sunucularından oluşur. Bir siteyi CDN arkasına aldığınızda alan adınız CDN'in IP adreslerine çözülür; ziyaretçi en yakın CDN sunucusuna bağlanır, CDN önbellekte olmayan istekleri sizin sunucunuza (origin) iletir.

Bu yüzden CDN'ler reverse proxy'nin bütün görevlerini geniş ölçekte üstlenir: TLS sonlandırma, önbellek, DDoS emme, WAF ve bot yönetimi. Bir scraper'ın karşılaştığı hız sınırları ve bot doğrulama sayfaları çoğunlukla hedef sitenin kendisinden değil, önündeki bu reverse proxy katmanından gelir. Bu katmanın bot trafiğini nasıl sınıflandırdığına bir örnek Cloudflare Precursor yazımızda.

Forward ve reverse proxy aynı anda kullanılır mı?

Çoğu isteğin yolunda ikisi birden bulunur. Bir veri ekibinin betiği bir e-ticaret sitesinden fiyat çektiğinde yol şöyledir:

  1. Betik isteği ekibin kullandığı forward proxy'ye gönderir.
  2. Forward proxy, sitenin alan adını çözer ve sitenin önündeki CDN'e (reverse proxy) bağlanır.
  3. CDN isteği değerlendirir, önbellekte yoksa sitenin uygulama sunucusuna iletir.
  4. Yanıt aynı zinciri tersine izleyerek betiğe döner.

Burada site forward proxy'nin çıkış IP'sini, betik de CDN'in IP'sini görür; iki taraf da diğerinin arkasındaki gerçek makineyi bilmez. Kurumsal ağlarda zincir daha da uzar: çalışan bilgisayarı → şirket proxy'si → firewall → internet → sitenin CDN'i → uygulama sunucusu.

Kullanım senaryoları

  • Veri toplama ekibi: Farklı ülkelerdeki fiyatları görmek ve istekleri dağıtmak için forward proxy kullanır. Tek adres üzerinden her bağlantıda farklı IP veren Rotating Proxy bu iş için kurulur. Tarama işlerinin ölçeklenmesi web crawler çözümü sayfamızda.
  • Kurumsal BT ekibi: Çalışan trafiğini tek çıkıştan geçirip kayıt tutmak için forward proxy, şirket içi uygulamaları dışarı açmak için reverse proxy kullanır. Veri güvenliği tarafı veri güvenliği çözümü sayfamızda.
  • Web uygulaması geliştiricisi: Uygulamasını Nginx veya bir CDN arkasına alır; yük dengeleme ve TLS'i uygulama kodundan ayırır.
  • Yazılım test ekibi: Uygulamanın başka ülkelerden nasıl açıldığını görmek için forward proxy, test ortamındaki servisleri tek alan adında toplamak için reverse proxy kullanır.
  • Bireysel kullanıcı: Tarayıcı trafiğini başka bir konumdan çıkarmak için HTTPS Proxy gibi bir forward proxy tanımlar. Şifreleme de gerekiyorsa VPN'e bakar; fark Proxy ve VPN Farkı yazımızda.

Sık yapılan hatalar

  • Reverse proxy'yi anonimlik aracı sanmak. Reverse proxy site sahibini korur; ziyaretçinin IP adresini gizlemez, aksine X-Forwarded-For ile arkaya iletir.
  • Host başlığını iletmemek. Nginx varsayılan olarak proxy_pass adresindeki sunucu adını gönderir. Arkadaki uygulama alan adına göre çalışıyorsa yanlış siteyi veya hata sayfasını döner.
  • Arkadaki sunucuyu doğrudan erişime açık bırakmak. Reverse proxy'nin güvenlik kuralları, uygulama sunucusunun IP adresiyle doğrudan erişilebildiği anda anlamını yitirir. Uygulama portu yalnızca reverse proxy'nin iç adresine açılmalıdır.
  • Forward proxy'de başlıklarla kimlik taşımak. Kendi kurduğunuz bir Squid proxy'si varsayılan ayarlarla X-Forwarded-For ve Via başlıklarını ekleyebilir; bu durumda hedef site istemcinin gerçek adresini görür.
  • Zaman aşımlarını eşleştirmemek. Reverse proxy'nin zaman aşımı uygulamanınkinden kısaysa uzun süren istekler 504 Gateway Timeout ile kesilir.

Karar rehberi

İhtiyacınızÖneri
İstekleri başka bir IP adresinden göndermekForward proxy
Farklı ülkelerdeki içeriği görmekForward proxy (konum seçimli)
Çalışan trafiğini tek noktadan denetlemekForward proxy (kurumsal)
Sitenizi birden çok sunucuya dağıtmakReverse proxy
TLS sertifikalarını tek yerde yönetmekReverse proxy
Sitenizi saldırı ve bot trafiğine karşı korumakReverse proxy veya CDN
Statik içeriği dünyaya hızlı sunmakCDN

Sık sorulan sorular

Ters proxy ile reverse proxy aynı şey mi?

Evet. "Ters proxy", reverse proxy'nin Türkçe karşılığıdır. Teknik belgelerde ve yazılım ayarlarında İngilizce terim daha yaygın geçer.

VPN bir forward proxy mi?

İşlev olarak benzerdir: trafiğinizi başka bir sunucudan çıkarır ve hedef site o sunucunun IP adresini görür. Ancak VPN işletim sistemi düzeyinde çalışır ve cihazınızla VPN sunucusu arasındaki bütün trafiği şifreler. Forward proxy ise uygulama bazında ayarlanır ve kendiliğinden şifreleme yapmaz.

Nginx forward proxy olarak kullanılabilir mi?

Nginx şifresiz HTTP isteklerini iletebilir, ancak HTTPS için gereken CONNECT yöntemini standart sürümde desteklemez; bunun için üçüncü taraf bir modül gerekir. Forward proxy için genellikle Squid gibi bu işe özel yazılımlar tercih edilir.

Reverse proxy siteyi yavaşlatır mı?

Araya bir durak eklediği için teoride küçük bir gecikme ekler. Pratikte önbellek, sıkıştırma, bağlantıların yeniden kullanımı ve ziyaretçiye yakın konumlanma sayesinde çoğu site reverse proxy veya CDN arkasında daha hızlı açılır.

Bir site reverse proxy arkasında olduğunu belli eder mi?

Çoğu zaman eder. Yanıt başlıklarında Server, Via veya CDN'e özgü başlıklar görünür; alan adının IP adresi bir CDN'e ait çıkar. Ancak bu bilgi arkadaki sunucunun adresini vermez.

Proxy hizmetleri hangi türdür?

Residential, datacenter, ISP ve mobil proxy hizmetlerinin hepsi forward proxy'dir. Size bir giriş adresi verilir, istekleriniz bu adres üzerinden sağlayıcının çıkış IP'lerinden birine yönlenir.

Özetle

Forward proxy istemciyi, reverse proxy sunucuyu temsil eder. Forward proxy'yi kullanıcı bilerek tanımlar ve hedef site proxy'nin IP adresini görür; reverse proxy'yi site sahibi kurar ve ziyaretçi arkadaki sunuculardan habersiz kalır. Reverse proxy yük dengeleme, TLS sonlandırma, önbellek ve güvenlik için kullanılır; CDN'ler bu yapının dünya ölçeğindeki hâlidir. İsteklerinizi farklı IP adreslerinden ve konumlardan göndermeniz gerekiyorsa aradığınız forward proxy'dir; seçenekleri proxy hizmetlerimizde bulabilirsiniz.

ChatGPT'ye sorClaude'a sor