İçeriğe geç
Proxy Types 6 dk okuma 1272 görüntülenme

HAProxy

HAProxy'nin güçlü yük dengeleme ve proxy yeteneklerini keşfedin. Trafiği verimli dağıtmayı, sunucu sağlığını izlemeyi ve uygulama güvenilirliğini artırmayı öğrenin.

HAProxy

HAProxy (High Availability Proxy), ağ trafiğini birden fazla backend sunucuya dağıtarak performansı, güvenilirliği ve sunucu kapasitesini en üst düzeye çıkaran açık kaynaklı, yüksek performanslı bir TCP/HTTP yük dengeleyici ve proxy sunucusudur. OSI modelinin hem 4. katmanında (TCP) hem de 7. katmanında (HTTP) çalışır; böylece uygulamalar ve servisler için hassas trafik yönetimi, yüksek erişilebilirlik ve verimli kaynak kullanımı sağlar.

HAProxy hızı, kararlılığı ve çok yüksek trafik hacimlerini kaldırabilmesiyle tanınır. İstemci isteklerinin dengeli dağıtılması, sunucuların aşırı yüklenmemesi ve bakım işlemlerinin kesintisiz yürütülmesi için genellikle web sunucularının, uygulama sunucularının ve veritabanı kümelerinin önüne konumlandırılır.

HAProxy ile yük dengeleme

Yük dengeleme, ağ trafiğini server farm veya küme olarak bilinen bir backend sunucu grubuna dağıtma sürecidir. HAProxy, kaynak kullanımını optimize etmek, throughput'u en üst düzeye çıkarmak, yanıt süresini en aza indirmek ve tek tek sunucuların aşırı yüklenmesini önlemek amacıyla bir sonraki isteği hangi sunucunun alacağını belirlemek için çeşitli algoritmalar kullanır.

HAProxy yük dengelemesinin temel bileşenleri:

  • Algoritma seçimi: HAProxy, farklı uygulama ihtiyaçlarına uyacak birkaç algoritma sunar.
  • Sunucu health check'leri: backend sunucuların erişilebilirliğinin ve yanıt verme durumunun sürekli izlenmesi.
  • Sunucu ağırlıklandırma: belirli sunucuların daha fazla trafik alacak şekilde önceliklendirilmesi.

Yük dengeleme algoritmaları

HAProxy, backend bölümünde yapılandırılan bir dizi algoritma sunar:

  • roundrobin: istekleri backend grubundaki her sunucuya sırayla dağıtır. Varsayılan algoritmadır.
  • leastconn: yeni bağlantıları en az aktif bağlantıya sahip sunucuya yönlendirir. Uzun ömürlü bağlantılar için idealdir.
  • source: sunucuyu belirlemek için kaynak IP adresinin hash'ini kullanır. Bir istemcinin sürekli aynı sunucuya bağlanmasını sağlar; açık oturum kalıcılığı bulunmayan, durum bilgisi tutan uygulamalar için kullanışlıdır.
  • uri: sunucu seçmek için URL'nin sol kısmını (query string'den önceki bölümü) hash'ler. Önbellek proxy'leri için kullanışlıdır.
  • hdr(<name>): belirtilen bir HTTP header'ının değerini hash'ler.
  • random: rastgele bir sunucu seçer.
backend web_servers
    balance roundrobin
    server web1 192.168.1.10:80 check
    server web2 192.168.1.11:80 check
    server web3 192.168.1.12:80 check

HAProxy ile proxy'leme

Proxy'leme, bir istemci veya sunucu adına hareket eden bir aracı sunucuyu içerir. HAProxy bir reverse proxy olarak çalışır: istemcilerden gelen bağlantıları kabul eder, bunları backend sunuculara iletir ve sunucuların yanıtlarını istemcilere geri döndürür. Bu soyutlama katmanı güvenlik, performans ve operasyonel avantajlar sağlar.

4. katman (TCP) proxy'leme

  1. katmanda HAProxy, uygulama katmanı içeriğini incelemeden ham TCP bağlantılarını iletir. Bu, içerik incelemesinin gerekmediği ya da istenmediği HTTP dışı servisler, veritabanları veya özel protokoller için uygundur.
listen mysql_cluster
    bind *:3306
    mode tcp
    balance leastconn
    server db1 192.168.1.20:3306 check
    server db2 192.168.1.21:3306 check

7. katman (HTTP) proxy'leme

  1. katmanda HAProxy, HTTP istek ve yanıt header'larını, URL'leri ve çerezleri inceleyip değiştirebilir. Bu, içerik tabanlı yönlendirme, SSL sonlandırma, URL yeniden yazma ve oturum kalıcılığı gibi gelişmiş özellikleri mümkün kılar.
frontend http_frontend
    bind *:80
    mode http
    default_backend web_servers

HAProxy yapılandırma bileşenleri

HAProxy yapılandırması genellikle /etc/haproxy/haproxy.cfg dosyasında bulunur ve birkaç bölüme ayrılır.

global bölümü

global bölümü, loglama, güvenlik ayarları ve performans limitleri gibi süreç genelindeki parametreleri tanımlar. Bu ayarlar tüm HAProxy örneği için geçerlidir.

global
    log /dev/log    local0 info
    maxconn 20000
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    user haproxy
    group haproxy
    daemon
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners

defaults bölümü

defaults bölümü, kendisinden sonra gelen tüm listen, frontend ve backend bölümleri için varsayılan parametreleri belirtir. Bu, yapılandırmadaki tekrarları azaltır.

defaults
    mode http
    log global
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    option httplog
    option dontlognull
    option http-server-close

frontend bölümü

Bir frontend, HAProxy'nin istemci bağlantılarını dinlediği, dışarıya açık giriş noktasını tanımlar. IP adresini, portu, protokolü (mode) ve Access Control List'leri (ACL) kullanarak istekleri belirli backend'lere yönlendirme kurallarını belirtir.

frontend http_in
    bind *:80
    mode http
    acl host_app1 hdr(host) -i app1.example.com
    acl host_app2 hdr(host) -i app2.example.com

    use_backend app1_servers if host_app1
    use_backend app2_servers if host_app2
    default_backend default_web_servers

backend bölümü

Bir backend, HAProxy'nin istekleri iletebileceği sunucu grubunu tanımlar. Yük dengeleme algoritmasını, health check parametrelerini ve tek tek sunucu tanımlarını içerir.

backend app1_servers
    balance leastconn
    option httpchk GET /healthz
    server s1 10.0.0.10:8080 check inter 2000 fall 3 rise 2
    server s2 10.0.0.11:8080 check inter 2000 fall 3 rise 2 backup
  • check: sunucu için health check'leri etkinleştirir.
  • inter 2000: her 2000ms'de bir kontrol eder.
  • fall 3: art arda 3 başarısız kontrolden sonra sunucuyu kapalı olarak işaretler.
  • rise 2: art arda 2 başarılı kontrolden sonra sunucuyu açık olarak işaretler.
  • backup: sunucu yalnızca backup olmayan diğer tüm sunucular kapalı olduğunda kullanılır.

listen bölümü

Bir listen bölümü, frontend ve backend işlevlerini tek bir blokta birleştirir. Genellikle daha basit yapılandırmalarda veya HAProxy'nin istatistik sayfası gibi servislerde kullanılır.

listen stats_page
    bind *:8080
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm HAProxy\ Statistics
    stats auth admin:securepassword
    stats refresh 5s

Access Control List'ler (ACL)

ACL'ler, istemci isteklerindeki belirli kriterleri (örneğin kaynak IP, host header'ı, URL yolu, HTTP metodu) eşleştirmek için kullanılan güçlü koşul kurallarıdır. Dinamik yönlendirme, içerik anahtarlama ve engellemeyi mümkün kılarlar.

frontend website_frontend
    bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem

    # Yola göre ACL'ler
    acl is_admin_area path_beg /admin
    acl is_api_v1   path_beg /api/v1

    # ACL'lere göre yönlendirme
    use_backend admin_backend if is_admin_area
    use_backend api_v1_backend if is_api_v1
    default_backend main_website_backend

Health check'ler

HAProxy, isteklerin yalnızca çalışır durumdaki örneklere gönderilmesini sağlamak için backend sunucuların sağlığını sürekli izler. Bir sunucu health check'lerde başarısız olursa, HAProxy onu toparlanana kadar geçici olarak rotasyondan çıkarır.

  • TCP check (check): temel port bağlantısı.
  • HTTP check (option httpchk): bir HTTP isteği gönderir (örneğin GET /health) ve geçerli bir HTTP durum kodu (2xx veya 3xx) bekler.
  • SSL Hello check (ssl-hello-chk): bir SSL el sıkışmasının kurulup kurulamayacağını kontrol eder.

Gelişmiş HAProxy özellikleri

SSL sonlandırma ve offloading

HAProxy, SSL/TLS şifreleme ve şifre çözme işlemlerini üstlenerek CPU yoğun bu görevi backend sunuculardan alabilir. Gelen HTTPS trafiğinin şifresini çözer ve backend'e düz HTTP iletir; ya da uçtan uca SSL için yeniden şifreleyebilir.

frontend https_in
    bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem
    mode http
    default_backend web_servers

Sticky session'lar (kalıcılık)

Sticky session'lar, bir istemcinin isteklerinin oturum boyunca sürekli aynı backend sunucuya yönlendirilmesini sağlar. Oturum durumunu tek tek sunucularda tutan uygulamalar için bu kritik önemdedir.

  • Çerez tabanlı kalıcılık: HAProxy istemcinin tarayıcısına bir çerez ekler; bu çerez sonraki isteklerde doğru backend sunucuyu belirlemek için kullanılır.
  • Kaynak IP kalıcılığı: istemcinin kaynak IP adresini kullanarak isteği sürekli aynı sunucuya yönlendirir (NAT arkasında daha az güvenilirdir).
backend web_servers_sticky
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server s1 10.0.0.10:80 check cookie s1
    server s2 10.0.0.11:80 check cookie s2

İçerik tabanlı yönlendirme

İçerik tabanlı yönlendirme, trafiği istemci isteğindeki belirli özniteliklere (istenen URL yolu, HTTP host header'ı veya özel HTTP header'ları) göre farklı backend sunucu havuzlarına yönlendirir. Bu, mikroservis mimarilerini veya çok kiracılı (multi-tenant) uygulamaları kolaylaştırır.

(Örnek, frontend bölümünde acl host_app1 ve use_backend ile zaten gösterildi.)

HAProxy'nin kendi yüksek erişilebilirliği

HAProxy backend servislerin yüksek erişilebilirliği için tasarlanmış olsa da, HAProxy örneklerinin kendisi de Keepalived gibi araçlarla birlikte VRRP (Virtual Router Redundancy Protocol) gibi harici mekanizmalar kullanılarak yüksek erişilebilir hale getirilebilir. Bu, arıza durumunda birincil ve ikincil HAProxy sunucuları arasında otomatik devreye giren bir yüzen IP adresi oluşturur ve yük dengeleme hizmetinin kesintisiz sürmesini sağlar.

HAProxy ile Nginx karşılaştırması (kısa)

Hem HAProxy hem de Nginx reverse proxy ve yük dengeleyici olarak çalışabilir. Temel tasarım hedefleri ve tipik kullanım senaryoları farklıdır.

Özellik HAProxy Nginx
Birincil rol Adanmış, yüksek performanslı yük dengeleyici ve proxy Web sunucusu, reverse proxy, yük dengeleyici, önbellek
Performans Son derece yüksek (özellikle L4/TCP) Yüksek (iyi bir çok yönlü seçenek)
Yapılandırma Yük dengeleme için özel tasarlanmış, kapsamlı seçenekler Daha genel amaçlı, esnek
Önbellekleme Sınırlı (harici modül gerektirir) Yerleşik, güçlü HTTP önbellekleme
Statik dosya sunumu Birincil odağı değil Mükemmel, yüksek düzeyde optimize
Modülerlik Görece monolitik Zengin modül ekosistemiyle yüksek modüler
SSL sonlandırma Evet Evet
WebSockets Evet Evet

HAProxy genellikle saf yük dengeleme performansının ve sağlam health check'lerin kritik olduğu, yüksek trafikli ortamlarda tercih edilir. Nginx ise yük dengelemenin yanı sıra web sunumu, önbellekleme ve reverse proxy kombinasyonuna ihtiyaç duyulduğunda sıkça kullanılır. İkisinin birlikte konumlandırıldığını görmek yaygındır: HAProxy birincil yük dengeleyici olarak çalışırken, Nginx uygulama düzeyindeki belirli proxy işlerini veya statik içeriği üstlenir.

Güncellendi: 03.03.2026
Kategoriye dön

Proxy'lerimizi deneyin

100+ ülkede 20,000+ proxy

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.