Reverse Proxy ve Load Balancer Nedir, Nasıl Kurulur?
2000’lerin başında, internetin yaygınlaşmasıyla beraber, web sitelerine eriştiğimizde doğrudan bu sitelerin barındırıldığı web sunucularıyla iletişim kurardık. Tarayıcılar(web browser) bir web sunucusuna(web server) istek gönderir ve sunucu, içerik(web content) ile yanıt verirdi. Ancak günümüz uygulama mimarilerinin karmaşıklığı ve mikroservis mimarilerine geçişle birlikte, istemci ile sunucu arasındaki yoğun trafiği yönetmek için orta katman servisler kullanılması yaygınlaştı. Bu servisler arasında load balancer (yük dengeleyici), proxy ve reverse proxy bulunmaktadır.
Reverse Proxy Nedir ve Avantajları Nelerdir?
Reverse Proxy, istemci(client) ile web sunucu(server) arasındaki trafiği yöneten ve filtreleyen bir ara katman olarak çalışır. Bu yapı:
• İstemcinin doğrudan sunucu ile iletişim kurmasını engeller.
• Trafiği filtreler, sunucunun güvenliğini artırır.
• Önbelleğe alınmış içerik sunarak daha hızlı cevaplar verir (caching).
REVERSE PROXY NASIL KURULUR?
İnternet üzerinde ki trafiği biçimlendirerek yönetimini sağlayan iki metodun uygulanması için, sanal sunucu üzerinde kurularak hazır şekilde konfigüre edilmesini sağlayan web server’lar mevcuttur.
middleware (ara katman yazılımı) olarakta düşünülebilir, çünkü istemci ile sunucu arasındaki iletişimi kolaylaştırırlar.
Bunlarda en popülerleri:
APACHE
HAPROXY
NGINX
Not: kurulduğundan itibaren hazır paket çalışmazlar, bunların konf dosyalarını nasıl yazarsanız o rolü oynar. Eğer reverse proxy istiyorsanız ona göre konfigüre ederseniz load balancers istiyorsanız ona göre konfigüre eder kullanırsınız. Kısaca hangi rolü oynaması gerekiyorsa trafiği o şekilde yönetir.
1. İlk olarak, sisteminize Nginx yükleyin:
sudo apt install nginx
2. Ardından bir konfigürasyon dosyası oluşturun:
sudo vim /etc/nginx/sites-available/proxy.conf
Konfigürasyon Örneği
Aşağıdaki örnek konfigürasyon, istemciden, web sitesinde ”/images” adresine gelen tüm istekleri 1.1.1.1 IP adresine yönlendiren bir reverse proxy oluşturur: (1.1.1.1 burada örnek ip adresidir)
server {
listen 80;
location /images {
proxy_pass http://1.1.1.1;
include proxy_params;
}
}
Proxy Parametrelerinin Tanımlanması
Bu konfigürasyon dosyası, proxy_params adlı bir dosya ile desteklenebilir. Örneğin:
cat /etc/nginx/proxy_params
proxy_set_header Host $http_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;
İlk adımda */etc/nginx/sites-available/proxy.conf* dizininde konfigürasyon dosyası hazırlamıştık.
Ancak bu dizinin isminden de anlaşıldığı üzere bu sadece ulaşılabilir-kullanilabilecek tüm site konfigürasyonlarını içerir. Nginx bunları doğrudan aktif olarak kullanmaz. Yani buradaki dosyalar Nginx tarafından otomatik olarak yüklenmez.
Birde /etc/nginx/sites-enabled dizini var.
Bu dizin, aktif site yapılandırmalarını içerir.
Buradaki dosyalar genellikle /etc/nginx/sites-available dizinindeki dosyalara sembolik link (symboliclink) ile bağlanır. sembolik link nedir ? buradan bakabilirsiniz.
Yani konfigürasyonu gerçek senaryoda aktif etmek için, /etc/nginx/sites-available dizinindeki yapılandırma dosyasını /etc/nginx/sites-enabled dizinine bir sembolik bağlantı (symlink) ile bağlarsınız. Bu bağlantı oluşturulduğunda Nginx bu yapılandırmayı kullanır.
Hazırladığımız, reverse proxy konfigürasyon dosyasını aktif hale getirmek için, yapılandırma dosyasını sites-available dizinine eklemiştik, şu komutla sites-enabled dizinine sembolik bir bağlantı oluşturursunuz:
sudo ln -s /etc/nginx/sites-available/proxy.conf /etc/nginx/sites-enabled/
Konfigürasyon dosyalarımızı test etmek içinde aşağıdaki komutu kullanabiliriz.Test ettikten sonra success yazısını görüyorsanız başarılıdır.
sudo nginx -t
Testten sonra uygulanmasını istersenizde aşağıda komutla servisi reload edebiliriz.
systemctl reload nginx.service
Böylece reverse proxy’imizi tamamladık. Örneğimizde /images dizinine gelen tüm istekleri 1.1.1.1 ip adresine ileten reverse proxy görevi gören bir nginx mimarisini kullanmış olduk.
Daha fazla hazır dökümantasyon ve template konf dosyaları için:
man nginx
Eğer oluşturduğumuz konf dosyasını silmek isterseniz aşağıdaki komutu uygulayabilirsiniz.
sudo rm /etc/nginx/sites-enables/proxy.conf
Load Balancer Nedir ve Reverse Proxy’den Farkı Nedir?
Load balancer, bir reverse proxy’ye benzer şekilde çalışır ancak temel farkı, gelen trafiği birden fazla sunucu arasında dengeleyebilmesidir.
Örneğin, bir kullanıcı isteği geldiğinde:
• En az meşgul olan sunucuya yönlendirebilir.
• Trafiği sunucuların kapasitelerine göre , yük dengeleme yöntemlerini kullanarak dağıtabilir.
Bu yöntem, sistemin yüksek kullanılabilirlik sağlamasına ve performansın artmasına, ‘single point of failure’ dediğimiz sistemin monolitik bağımlılığı durumunun önlenmesine olanak tanır.
Yük Dengeleme Yöntemleri
• Round Robin: Trafiği sırayla sunuculara iletir.
• Least Connections: En az bağlantısı olan sunucuya yönlendirir.
• Weighted Balancing: Daha güçlü sunuculara ağırlık vererek trafiği dağıtır.
LOAD BALANCER NASIL KURULUR?
Bir önceki kurulumuzu sildiğimize göre yeni bir konfigürasyon dosyası oluşturalım ve ismine lb.conf diyelim.
sudo vim /etc/nginx/sites-available/lb.conf
Vim editörümü açıldıktan sonra konf dosyamızı yazmaya başlayalım.
Diyelim ki, 3 farklı backend sunucunuz var ve bunlar arasında yük dengelemesi yapmak istiyorsunuz:
upstream direktifi ile server koleksiyonumuzu, ip adresleriyle tanımlıyoruz. Bu koleksiyona ”mywebservers” ismini verdik. İsim burada örnektir . Yük dengeleme ‘default’ olarak round robin metodunu kullanarak random şekilde web server ip adresine istekleri iletecek. Hangi sunucunun daha az aktif bağlantısı varsa ona yönlendirmek için least_conn; değerini ekleyebiliriz.
Başka bir durumda bir web server’imizin kaynakları diğerinde daha fazla olabilir ve ona, daha çok isteklerin gitmesini isteyebiliriz. Bu durumda weight değerini kullanabiliriz. Standart olarak weight değeri 1 dir ancak 3 değerini vererek 1.2.3.4 ip adresine bağlı web server’ına daha fazla istek yollamasını isteriz.
Bazı durumlada web serveri bakım moduna alıp durdurmak zorunda kalabiiriz. Bu durumda upstream’de kısa bir süreliğine başına down değeri vererek ona istek gönderilmemesini sağlayabilriz.
1.2.3.4 ve 5.6.7.8 ip adreslerine ait iki web sunucumuzda down oldu ve artık çalışamaz duruma geldiler. Bu durumda ikisininde çalışmama durumunda backup değeri ile normalde ikisinin çalışır durumda olduğu zaman istek almayan sadece yedek olarak duran bir web server’da ekleyebiliriz. Backup değerli web server sadece diğer iki web server’ın çalışmadığı durumda devreye girecektir.
upstream mywebservers{
least_conn;
server 1.2.3.4:8081 weight=3 down;
server 5.6.7.8 weight= 1;
server 10.20.30.40 backup;
}
server{
listen 80;
location /{
proxy_pass http://mywebservers
}}
Conf dosyamız isteklerimize göre düzenledikten sonra /etc/nginx/sites-enabled dizinine sembolik link verelim. Bundan sonraki adımlar ilk anlattığım reverse porxy ile aynı olacaktır.
sembolik link
sudo ln -s /etc/nginx/sites-available/lb.conf /etc/nginx/sties-neabled/lb.conf
test et ve basarili ise
sudo nginx -t
servisi reload et
sudo systecmtl reload nginx.service
Avantajları:
• Esneklik: Kolayca yeni sunucu ekleyebilir veya çıkarabilirsiniz.
• Performans: Yük dengeleme algoritmaları sayesinde sistem kaynakları daha verimli kullanılır.
• Hata Toleransı: Belirli sunucular arızalandığında (failover), diğerleri çalışmaya devam eder (eğer health check yapılandırıldıysa).
Bu rehber, hem reverse proxy hem de load balancer kullanımıyla ilgili temel bir giriş sağlar. Daha fazla detay için Nginx’in resmi dokümantasyonuna göz atabilirsiniz: