Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Reverse proxy, ziyaretçi ile web uygulaması veya sunucu arasında duran ve istemciden gelen istekleri arka uç sunucusuna ileten ara katmandır. Kullanıcı doğrudan uygulama sunucusuna değil, reverse proxy’ye bağlanır; proxy isteği uygun backend’e aktarır ve backend yanıtını kullanıcıya döndürür.

Örneğin ziyaretçi example.com adresine bağlanırken, uygulamanız yalnızca 127.0.0.1:3000 üzerinde çalışabilir. Nginx veya Apache reverse proxy olarak görev yaparsa dışarıya 443 portundan hizmet verir, HTTPS işlemini üstlenir ve isteği yerel uygulamaya iletir.

Nasıl çalışır?​


İstek akışı genellikle şöyledir:

  1. Kullanıcı alan adına bağlanır.
  2. DNS, alan adını reverse proxy sunucusunun IP adresine yönlendirir.
  3. Reverse proxy isteği alır; HTTPS kullanılıyorsa sunucu sertifikasını istemciye sunar ve TLS bağlantısını sonlandırır; sertifika güvenini doğrulayan esas taraf istemcidir. HTTPS backend’e bağlanıyorsa backend sertifikasının doğrulanması ayrı proxy ayarıdır.
  4. İstek, belirlenen backend adresine aktarılır.
  5. Backend yanıtı reverse proxy’ye verir; proxy de yanıtı kullanıcıya gönderir.

Bu yapı, tek bir sunucuda birden fazla uygulamayı farklı alan adları veya yollar üzerinden yayınlamayı sağlar. Ayrıca uygulama sunucusunun doğrudan internete açılmasını önleyebilir, önbellekleme ve yük dengeleme gibi görevleri merkezi hâle getirebilir. Ancak reverse proxy tek başına uygulama güvenliği, yedekleme veya sunucu güncellemesi yerine geçmez.

Somut örnek: Nginx ile yerel uygulamayı yayınlamak​


Aşağıdaki en küçük örnekte uygulamanın 127.0.0.1:3000 üzerinde dinlediği ve Nginx’in example.com için istekleri buraya aktaracağı varsayılır:

Kod:
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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 blok yalnız HTTP port 80 içindir; sertifika/443 kurulumu içermez. HTTPS yayını için ayrıca doğrulanmış TLS yapılandırması gerekir. Burada proxy_pass sonunda URI bölümü yoktur; farklı bir yol öneki kullanacaksanız URI değiştirme ve sondaki slash davranışını ayrıca kontrol edin. X-Forwarded-For zincirindeki istemciden gelen değerleri gelişigüzel güvenilir kabul etmeyin; uygulama yalnız bilinen proxy zincirini değerlendirmelidir.

Uygulama adımları:

  1. Backend uygulamasını 127.0.0.1:3000 üzerinde çalıştırın ve aynı sunucudan yanıt verdiğini doğrulayın.
  2. Nginx yapılandırmasına benzer bir server bloğu ekleyin; server_name değerini kendi alan adınızla değiştirin.
  3. Önce sudo nginx -t ile yapılandırma testini geçirin; sonra dağıtımın desteklediği reload yöntemini kullanın. Systemd ile yönetilen Linux kurulumlarında bu genellikle sudo systemctl reload nginx olur. Test başarısızsa reload yapmayın.
  4. Alan adının DNS kaydını reverse proxy sunucusuna yönlendirin ve tarayıcıdan alan adını açın.

Başarılı durumda kullanıcı uygulamanın yanıtını alan adı üzerinden görür. 502 Bad Gateway görülürse proxy çalışıyor ancak backend’e bağlanamıyor olabilir; uygulamanın çalışıp çalışmadığını, portu ve yerel erişimi kontrol edin. 404 hem proxy hem backend tarafından üretilebilir; yalnız durum kodundan backend’e ulaşıldığı sonucunu çıkarmayın. Access/error logları ve upstream durumu ile hangi katmanın yanıtladığını belirleyin. Uygulama istemci IP’sini logluyorsa X-Forwarded-For ve benzeri başlıkları doğru yorumlayacak şekilde yapılandırılmalıdır.

Hangi durumda kullanılır?​


Kararı şu şekilde verebilirsiniz:

İhtiyaçReverse proxy’nin katkısıDikkat edilmesi gereken
HTTPS’i merkezi yönetmekTLS sonlandırmayı proxy’de toplarBackend ile proxy arasındaki trafiğin güvenlik gereksinimini ayrıca değerlendirin
Birden fazla uygulama yayınlamakAlan adı veya URL yoluna göre yönlendirme yaparÇakışan yollar ve doğru Host başlığı kontrol edilmelidir
Trafiği birden fazla backend’e dağıtmakYük dengeleme ve arıza toleransı sağlayabilirOturumların hangi backend’e gideceği ayrıca tasarlanmalıdır

WebSocket, uzun süre açık bağlantı veya büyük dosya yükleme kullanan uygulamalarda varsayılan proxy ayarları yeterli olmayabilir. Bu durumlarda bağlantı yükseltme başlıkları, zaman aşımı ve gövde boyutu gibi ayarları uygulamanın gereksinimine göre düzenleyin. Reverse proxy arkasında çalışan uygulamanın gerçek istemci IP’sine güvenmesi de yalnızca güvenilir proxy’lerden gelen başlıklar için etkinleştirilmelidir.

Sık yapılan hatalar​


Backend’i yanlış adrese bağlamak: Uygulama başka bir portta veya yalnızca farklı bir arayüzde dinliyorsa proxy bağlantı kuramaz.

DNS’i unutmak: Yapılandırma doğru olsa bile alan adı proxy sunucusuna çözülmüyorsa istek sunucuya ulaşmaz.

HTTPS yönlendirme döngüsü oluşturmak: TLS proxy’de sonlanırken backend’in her isteği tekrar HTTPS’e yönlendirmesi sonsuz yönlendirmeye neden olabilir. İletilen protokol başlığının uygulama tarafından doğru okunmasını sağlayın.

Doğrudan backend erişimini açık bırakmak: Uygulama portu internete açık kaldığında kullanıcılar proxy kurallarını atlayabilir. Dış erişimi yalnızca gerçekten gerekliyse bırakın.

Kaynaklar​



Sık sorulan sorular​


Reverse proxy ile load balancer aynı şey midir?​


Tam olarak değil. Load balancer, trafiği birden fazla backend arasında dağıtma görevine odaklanır. Reverse proxy bu özelliği sunabilir; ancak tek bir backend’in önünde TLS sonlandırma, yönlendirme veya önbellekleme de yapabilir.

Reverse proxy kullanınca uygulamanın portunu değiştirmek gerekir mi?​


Hayır. Uygulama iç ağda mevcut portunda çalışmaya devam edebilir. Kullanıcıların gördüğü dış port ve alan adı reverse proxy tarafından yönetilir; proxy de istekleri uygulamanın dinlediği iç adrese aktarır.

Reverse proxy uygulamayı otomatik olarak hızlandırır mı?​


Hayır. Önbellekleme, sıkıştırma veya bağlantı yönetimi uygun yapılandırılırsa fayda sağlayabilir; fakat yanlış ayarlar ek gecikme ve hata oluşturabilir. Önce backend yanıtını doğrudan yerel olarak doğrulayıp sonra proxy katmanını ölçerek değerlendirin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.