Yük dengeleme (load balancing), modern web mimarilerinin temel taşlarından biridir. Artan trafik, kullanıcı beklentileri ve yüksek erişilebilirlik gereksinimleri, istemci trafiğinin birden fazla sunucu arasında etkin şekilde dağıtılmasını zorunlu kılmaktadır. HAProxy, bu alanda yüksek performanslı ve açık kaynaklı çözümlerden biridir.
HAProxy Nedir ve Neden Kullanılır?
HAProxy, TCP ve HTTP tabanlı uygulamalar için tasarlanmış, yüksek performanslı bir yük dengeleyici ve reverse proxy yazılımıdır. Özellikle yüksek trafikli web siteleri, API'ler, mikroservis mimarileri ve TCP tabanlı servislerde yaygın olarak kullanılır.
HAProxy'nin temel özellikleri arasında yük dengeleme, trafik yönlendirme, TLS sonlandırma, health check mekanizmaları, oturum kalıcılığı, erişim kontrolü, rate limiting ve gelişmiş trafik yönetimi bulunur.
HAProxy'nin temel kullanım amacı yük dengeleme ve proxy işlemleridir. Nginx ise web sunucusu, reverse proxy, statik içerik sunumu ve yük dengeleme gibi daha geniş kullanım alanlarına sahip bir yazılımdır. İki yazılımın performansını tek bir yüzde değeriyle karşılaştırmak doğru değildir; gerçek performans kullanılan protokol, bağlantı sayısı, TLS işlemleri, yapılandırma ve donanım gibi birçok faktöre bağlıdır.
HAProxy Sürümleri ve LTS Desteği
HAProxy farklı sürüm dalları üzerinden kararlı ve uzun süre desteklenen sürümler sunmaktadır. 2026 itibarıyla HAProxy 3.4 LTS sürümünün yanı sıra HAProxy 3.2 LTS sürümü de desteklenmektedir. HAProxy 3.2 LTS dalının desteği 2030 yılına kadar devam etmektedir.
Üretim ortamlarında mümkün olduğunca desteklenen bir LTS sürümünün kullanılması ve güvenlik ile hata düzeltmelerini içeren güncel bakım sürümlerinin takip edilmesi önerilir.
HAProxy Mimarisi ve Temel Kavramlar
HAProxy'nin etkin şekilde kullanılabilmesi için çalışma modlarını ve yapılandırma bileşenlerini anlamak önemlidir. HAProxy temel olarak Layer 4 (TCP) ve Layer 7 (HTTP) seviyelerinde trafik yönetimi gerçekleştirebilir.
Layer 4 modunda HAProxy, TCP bağlantılarını içerik seviyesinde incelemeden yönlendirir. Bu yapı HTTP dışındaki TCP tabanlı servisler için de kullanılabilir. Veritabanları, Redis, SMTP ve benzeri servisler bu kullanım alanlarına örnektir.
Layer 7 modunda ise HAProxy HTTP isteklerini inceleyebilir ve URL path, host header, HTTP method veya diğer istek özelliklerine göre farklı backend'lere yönlendirme yapabilir.
Frontend, Backend ve Yapılandırma Bölümleri
HAProxy yapılandırması genellikle dört temel bölüm üzerinden oluşturulur:
global: HAProxy prosesinin genel ayarlarını belirler.
defaults: Frontend ve backend gibi bölümlerde kullanılacak varsayılan değerleri tanımlar.
frontend: İstemci bağlantılarını kabul eder ve gelen trafiğin nasıl işleneceğini belirler.
backend: Trafiğin gönderileceği gerçek sunucuları ve yük dengeleme kurallarını tanımlar.
Kurulum Süreci
HAProxy, kullanılan Linux dağıtımının paket yöneticisi üzerinden kurulabilir. Ubuntu ve Debian tabanlı sistemlerde aşağıdaki komutlar kullanılabilir:
sudo apt update
sudo apt install haproxy -y
sudo systemctl enable --now haproxyRHEL, Rocky Linux, AlmaLinux ve Fedora gibi RPM tabanlı sistemlerde dağıtımın sunduğu paket yöneticisi kullanılabilir:
sudo dnf install haproxy -y
sudo systemctl enable --now haproxyKurulumdan sonra HAProxy yapılandırması değiştirilmeden önce yapılandırmanın sözdizimi kontrol edilmelidir:
sudo haproxy -c -f /etc/haproxy/haproxy.cfgYapılandırma başarılı şekilde doğrulandıktan sonra servis yeniden yüklenebilir:
sudo systemctl reload haproxyTemel HTTP Yük Dengeleme Yapılandırması
Aşağıdaki örnekte HAProxy, HTTP trafiğini üç backend sunucusuna dağıtır. web3 sunucusu ise backup olarak tanımlandığı için normal durumda aktif yük dengelemesine dahil edilmez ve diğer sunucular kullanılamaz olduğunda devreye girer.
global
log /dev/log local0
maxconn 4096
defaults
log global
mode http
option httplog
timeout connect 5s
timeout client 30s
timeout server 30s
frontend http_front
bind :80
default_backend app_servers
backend app_servers
balance roundrobin
option httpchk GET /health
server web1 10.10.10.11:8080 check
server web2 10.10.10.12:8080 check
server web3 10.10.10.13:8080 check backupYük dengeleme algoritması uygulamanın çalışma karakteristiğine göre seçilmelidir:
roundrobin: Sunucular arasında istekleri sırayla dağıtır.
leastconn: Aktif bağlantı sayısı daha az olan sunucuyu tercih eder.
source: İstemcinin kaynak IP adresinden türetilen hash değerini kullanarak istemcileri belirli sunuculara yönlendirmeye yardımcı olur.
weighted algoritmalar: Daha güçlü sunuculara daha fazla trafik gönderilmesini sağlar.
Health Check Mekanizmaları
Health check mekanizması, yük dengelemenin güvenilirliği açısından kritik öneme sahiptir. HAProxy, backend sunucuların erişilebilirliğini düzenli olarak kontrol ederek başarısız olan sunucuları trafik dağıtımından çıkarabilir.
HTTP health check, belirli bir HTTP endpoint'ine istek göndererek uygulamanın beklenen şekilde yanıt verip vermediğini kontrol etmek için kullanılabilir:
backend app_servers
mode http
option httpchk GET /health
http-check expect status 200
server srv1 10.0.0.1:80 check
server srv2 10.0.0.2:80 checkUygulamanın yalnızca HTTP 200 döndürmesi yeterli olmayabilir. Örneğin health endpoint'i veritabanı veya kritik bir bağımlılığın durumunu da kontrol edebilir. Böylece yalnızca portun açık olması yerine uygulamanın gerçekten hizmet verebilir durumda olup olmadığı kontrol edilebilir.
TCP health check ise temel olarak TCP bağlantısının kurulup kurulamadığını kontrol eder. Bu yöntem, HTTP olmayan TCP servisleri için kullanılabilir. HAProxy ayrıca belirli servisler için protokole özel kontrol yöntemleri de sunabilir.
SSL Sonlandırma ve TLS Yönetimi
TLS sonlandırma (TLS termination), istemciden gelen HTTPS bağlantısının HAProxy üzerinde sonlandırılması ve HTTP isteğinin backend sunucuya iletilmesi anlamına gelir.
frontend https_front
bind :443 ssl crt /etc/haproxy/certs/alanadi.pem
default_backend app_serversÜretim ortamlarında güncel TLS sürümleri kullanılmalı, eski ve güvensiz protokoller devre dışı bırakılmalı ve sertifikaların yenilenmesi düzenli olarak yönetilmelidir.
HTTP/2 desteği kullanılacaksa ALPN üzerinden HTTP/2 ve HTTP/1.1 birlikte sunulabilir:
frontend https_front
bind :443 ssl crt /etc/haproxy/certs/alanadi.pem alpn h2,http/1.1
default_backend app_serversHAProxy üzerinde TLS sonlandırması yapılması, backend bağlantısının da mutlaka TLS olması gerektiği anlamına gelmez. Güvenlik gereksinimlerine göre HAProxy ile backend sunucuları arasında da TLS kullanılabilir.
İleri Düzey Yapılandırma Teknikleri
ACL ve İçerik Tabanlı Yönlendirme
Access Control List (ACL), HTTP isteklerini belirli kriterlere göre sınıflandırarak farklı backend'lere yönlendirmeyi sağlar.
frontend web_front
bind :80
acl is_api path_beg /api
acl is_admin path_beg /admin
use_backend api_servers if is_api
use_backend admin_servers if is_admin
default_backend web_serversACL'ler yalnızca URL path ile sınırlı değildir. Host header, HTTP method, kaynak IP, cookie, header değerleri ve çok sayıda başka istek özelliği üzerinden de trafik yönlendirme kuralları oluşturulabilir.
Oturum Kalıcılığı (Sticky Sessions)
Sticky session, belirli bir istemcinin veya oturumun birden fazla istek boyunca aynı backend sunucusuna yönlendirilmesini sağlar. Ancak mümkün olduğunda uygulamanın oturum durumunu merkezi bir veri deposunda tutması veya stateless tasarlanması daha ölçeklenebilir bir yaklaşımdır.
HAProxy'de cookie tabanlı oturum kalıcılığı örneği:
backend app_servers
balance roundrobin
cookie SRVID insert indirect nocache
server srv1 10.0.0.1:8080 check cookie srv1
server srv2 10.0.0.2:8080 check cookie srv2Rate Limiting ve Trafik Kontrolü
HAProxy'nin stick table özelliği, istemci bazında istek oranlarını takip etmek ve belirli eşiklerin aşılması durumunda istekleri sınırlandırmak için kullanılabilir.
frontend website
bind :80
stick-table type ipv6 size 100k expire 1m store http_req_rate(1m)
http-request track-sc0 src
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 1000 }
default_backend serversBu örnekte istemci IP adresleri üzerinden son 1 dakikadaki HTTP istek oranı takip edilir. Belirlenen eşik aşıldığında HAProxy istemciye 429 Too Many Requests yanıtı döndürür.
Bu tür rate limiting mekanizmaları uygulama katmanındaki kötüye kullanımı azaltabilir; ancak tek başına büyük hacimli ve dağıtık DDoS saldırılarına karşı yeterli değildir. İnternet ölçeğindeki DDoS saldırıları için CDN, WAF veya upstream DDoS koruma hizmetleri gibi ek çözümler gerekebilir.
Stats Paneli ve İzleme
HAProxy'nin yerleşik stats arayüzü, frontend ve backend durumlarının, bağlantıların, hata sayaçlarının ve sunucu sağlık durumlarının izlenmesini sağlar.
listen stats
bind :8404
mode http
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:guclu-bir-parolaStats arayüzü internete doğrudan açık bırakılmamalıdır. Yönetim ağı veya güvenilir kaynak IP'leri ile sınırlandırılması ve güçlü kimlik doğrulama kullanılması önerilir.
Prometheus entegrasyonu sayesinde HAProxy metrikleri merkezi izleme sistemlerine aktarılabilir. Böylece bağlantı sayıları, hata oranları, backend durumları ve trafik metrikleri uzun vadeli olarak takip edilebilir.
Docker ve Kubernetes Entegrasyonu
HAProxy Docker ortamlarında resmi imaj kullanılarak çalıştırılabilir. Üretim ortamlarında belirli bir desteklenen sürümün pinlenmesi ve güncellemelerin kontrollü şekilde yapılması önerilir.
services:
haproxy:
image: haproxy:3.2
ports:
- "80:80"
- "443:443"
- "8404:8404"
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
ulimits:
nofile:
soft: 200000
hard: 200000Kubernetes ortamlarında HAProxy Ingress Controller, Kubernetes kaynaklarını HAProxy tabanlı trafik yönlendirme kurallarına dönüştürerek ingress trafiğinin yönetilmesini sağlar. Bu yapı sayesinde backend'ler ve yönlendirme kuralları Kubernetes ortamındaki değişikliklere göre dinamik olarak güncellenebilir.
En İyi Uygulamalar ve Üretim İpuçları
HAProxy sunucusuna beklenen bağlantı ve trafik miktarına uygun CPU, RAM ve ağ kaynakları ayrılmalıdır.
maxconndeğeri yalnızca yüksek bir sayı verilerek değil, işletim sistemi limitleri ve gerçek bağlantı kapasitesi dikkate alınarak belirlenmelidir.nbthreaddeğeri kullanılabilir CPU kaynakları ve iş yüküne göre belirlenmeli, üretim ortamında gerçek trafik altında test edilmelidir.Health check endpoint'leri yalnızca HTTP sunucusunun çalıştığını değil, gerekiyorsa uygulamanın kritik bağımlılıklarının kullanılabilirliğini de doğrulamalıdır.
TLS sertifikalarının yenilenmesi otomatikleştirilmeli ve sertifika süreleri izlenmelidir.
Stats ve yönetim arayüzleri internete açık bırakılmamalı, güvenilir ağlar veya IP adresleri ile sınırlandırılmalıdır.
Rate limiting kullanılmalı ancak bunun tek başına kapsamlı bir DDoS koruması olmadığı unutulmamalıdır.
Yüksek erişilebilirlik gereken ortamlarda birden fazla HAProxy instance'ı kullanılmalı ve Keepalived gibi çözümlerle sanal IP (VIP) yönetimi yapılmalıdır.
HAProxy yapılandırması değiştirildikten sonra
haproxy -cile sözdizimi kontrol edilmeli ve servis yeniden yüklenmeden önce yapılandırmanın geçerli olduğu doğrulanmalıdır.
Sonuç
HAProxy, yüksek performanslı yük dengeleme ve reverse proxy ihtiyaçları için güçlü ve esnek bir çözümdür. Layer 4 ve Layer 7 seviyelerinde trafik yönetimi, gelişmiş health check mekanizmaları, TLS sonlandırma, ACL, sticky session ve rate limiting gibi özellikleri sayesinde hem klasik web uygulamalarında hem de mikroservis mimarilerinde kullanılabilir.
HAProxy'den maksimum verim almak için yalnızca yük dengeleme algoritmasını seçmek yeterli değildir. Health check yapılandırması, bağlantı limitleri, TLS ayarları, gözlemlenebilirlik, güvenlik kontrolleri ve yüksek erişilebilirlik mimarisi birlikte değerlendirilmelidir. Doğru tasarlanmış bir HAProxy altyapısı, uygulamaların performansını ve erişilebilirliğini artırırken trafik yönetimini de merkezi ve kontrol edilebilir hale getirir.