• 30-10-2025, 20:51:53
    #1
    Pek çoğumuz Nginx'i, mod_proxy'i, Envoyu, Caddyi ya da IIS/ARR'yi duymuşuzdur veya kullanmışızdır. Ancak hiç kullandığımız Reverse Proxy yazılımının ne kadar hızlı olduğunu merak ettiniz mi?
    Gelin, bu reverse proxy yazılımları ile HAProxy'i karşılaştıralım, avantajlarına ve dezavantajlarına bakalım.

    Öncelikle bilmeyen arkadaşlar için kısaca "Reverse Proxy" veya "Ters Proxy" kavramını açıklayalım:
    Proxy deyince aklınıza bağlantımızı başka bir bilgisayar üzerinden geçiren sistemler geliyor olabilir ancak bu Proxy'nin sadece bir türüdür ve bunlara "forward proxy" veya basitçe proxy denir.
    Reverse Proxy ise bunun tersten yapılan halidir yani siz internete çıkmak için başka bir bilgisayardan geçmek yerine web sunucunuz internete çıkmak için bir proxy arkasında bulunur ve sunucunuza bağlananlar reverse proxy'ye bağlanır o da istekleri arkadaki uygulama sunucunuza gönderirler.

    Reverse Proxylerin ana kullanım amacı değişkendir en yaygın kullanım amacı birden fazla uygulama sunucusunu tek sunucuda organize etmek örneğin /api 8080 / ise 5000 portundaki sunucuya yönlendirilsin diye emirler vermektir ancak bir diğer kullanım amacıda Web sitenizi savunmada (L7 firewall vb. bulunmadığı sürece) ilk kapı görevi görmesidir.

    HAProxy'yi diğerlerinden ayıran en büyük özelliği tamamen reverse proxy odaklı olmasıdır, nginx gibi statik web dosyalarını (yani png, js, css gibi dosyaları) servis etmez bu tür özellikte içermez, bu application server (yani uygulama sunucunuz) veya CDN'nizin görevidir.
    HAProxy tabii sadece saf reverse proxydir de diyemeyiz bu çok büyük bir basitleştirme olur, kullanım alanları çok geniş özellikle kurumsal ağlarda ve büyük web sitelerinde özellikle ticari Load Balancer yazılımlarında alt yazılım olarak kullanılıyor.
    Örneğin pek çok L7 DDOS koruması, WAF HAProxy ve Nginx üzerine inşaa edilmiştir.

    HAProxy kafa karıştırıcı veya karmaşık olarak nitelendirilse de ve küçük web siteleri için gereksiz gibi gözükse de bu tür evet ya da hayır cevabı vermek aşırı nesnel olmayacaktır zira her websitesinin ihtiyaçları farklıdır küçük bir web sitesi için HAProxy kullanımı bazı durumlarda kendi tecrübeme göre daha basit, performanslı ve kolay olabilmektedir özellikle TLS termination açısından vazgeçilmezdir.

    Yine bir terim'i açıklayalım "TLS Termination": Reverse Proxy'nin TLS ile şifrelenmiş arkadaki sunuculardan gelen veriyi deşifre edip ardından tekrar şifrelemesidir.

    HAProxy'yi bu açıdan hiç bir açık kaynak web sunucusu geçememiştir.

    Peki HAProxy bana göre mi değil mi sorusuna üstte belirttiğim gibi kesin olarak evet ya da hayır yanıtı vermek doğru olmasa da genel senaryolara göre yanıtlar hazırladım.

    Amacınız:

    - PHP host hizmeti sağlamak ise:
    En iyi tercihiniz LiteSpeed olacaktır, HAProxy işinizi fazla görmeyecektir hatta maintenance açısından size kötü sonuçları olacaktır
    - Çok fazla API var Go, Node, Python, Dotnet, Java hepsinden var ve bunları birleştirmek istiyorsanız:
    HAProxy tam da size göre ancak kubernates ve service meshleri araştırmanızı öneririm.
    - Birden fazla sunucunuz var ve yükü bunlar arasında dengelemek istiyorsanız:
    HAProxy sizin için uygundur ama ilk başlarda DNS tabanlı yük dengelemeyi denemenizi öneririm bunu ileride açıklayacağım bir konuda anlatacağım
    - Kendi çapınızda sistemlerinizi güvenceye almak, rate limit ve atak tespiti yapmak istiyor iseniz:
    HAProxy uygun bir temeldir ancak kendi başına ataktan korunmaya fazla bir faydası olmayacaktır, nginx gibi HAProxy'de üzerine eklenti yazılabilir ve bu şekilde WAF vb. eklentileri yapabilirsiniz

    Kuruluma geçelim:

    Basitlik olsun diye kurulumu Ubuntu Server 24.04'e göre yapacağım ancak genelde HAProxy Kurumsal Linux dağıtımlarında kullanılır.

    $ sudo apt install haproxy
    haproxy'yi kurduktan sonraki adım ise

    /etc/haproxy/haproxy.cfg düzenlemek

    düzenlemek için herhangi bir editörü kullanabilirsiniz emacs olur vim olur nano olur farketmez

    dosya içeriği şu şekilde görülecektir


    normalde bu kısımda detaylı açıklama yok kendim açıklama ekledim


    global
            log /dev/log    local0
            log /dev/log    local1 notice
            # haproxy'nin güvenlik sebebiyle config dosyası hariç oluşturacağı dosyaları kullanabileceği dizin
            chroot /var/lib/haproxy
            # istatistik UNIX socketi (basitçe açıklama güvenli internete açık olmayan soket)
            stats socket /run/haproxy/admin.sock mode 660 level admin
            stats timeout 30s
            # haproxy görevinin çalışacağı kullanıcı
            user haproxy
            group haproxy
            # haproxynin arkada çalışması gerektiğini belirtir
            daemon
    
            # ssl sertifikası
            ca-base /etc/ssl/certs
            crt-base /etc/ssl/private
    
            # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
           # kullanıcılacak TLS algoritmalarının yeri, bu kısım yüksek güvenlikli PCI DSS uyumlu sunucularda değiştirilir
           # gereksiz yere değiştirmeyin
            ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
            ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
            ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
    
    defaults
            log     global
            mode    http
            option  httplog
            option  dontlognull
            timeout connect 5000
            timeout client  50000
            timeout server  50000
            # hata sayfaları
            errorfile 400 /etc/haproxy/errors/400.http
            errorfile 403 /etc/haproxy/errors/403.http
            errorfile 408 /etc/haproxy/errors/408.http
            errorfile 500 /etc/haproxy/errors/500.http
            errorfile 502 /etc/haproxy/errors/502.http
            errorfile 503 /etc/haproxy/errors/503.http
            errorfile 504 /etc/haproxy/errors/504.http
    varsayılan config kendi başına bir sunucu aktifleştirmiyor (istatistik sunucusu hariç ancak bu konu kapsamında değil)

    şimdi yapmamız gereken şey haproxy'ye bir web sunucusu aktifleştirmesini söylemek

    öncelikle terimlerimizi öğrenelim haproxy'de frontend bir de backend dediğimiz terimler var ancak bu terimler web için bildiğiniz backend frontend terimleriyle alakasız

    frontend sitenize bağlanacakların bağlanacağı ara sunucu

    burada kafası karışanlar olabilir: sunucu demek bildiğiniz kasa demek değil uygulama anlamında, teknik bilgisi az arkadaşlar için bunu port yönlendrme gibi düşünün (çok alakasız ama en anlaşılır bu şekilde olur diye düşünüyorum)

    frontend kısımının sözdizimi oldukça basit

    frontend http
        mode http
        bind :443
        bind :80
        default_backend webservers
    sıra geldi backend kısımına

    backend webservers
       mode http
       balance roundrobin # birden fazla sunucu varsa yük dengeleme algoritması örneğin roundrobin ileri gider eğer daha fazla sunucu yoksa tekrar başa döner
       server s1 127.0.0.1:5000 # ip ve portu sunucu local değilse sunucu ipsiyle ve portuyla değiştirin
    HAProxy'yi efektif olarak kullanmak için belgelerini okuyabilirsiniz, İngilizce olsalarda anlaşılması günümüz çağında zor değiller ileriki zamanlarda istek olursa belgelemeleri çevirip paylaşabilirim.

    HAProxy ek özellikler:

    HAProxy'de ACL'ler ile koşullara bağlı olarak bağlantıyı kapatma farklı servere yönlendirme gibi eylemler yapabileceğinizi biliyor muydunuz?

    http-request silentdrop if req.hdr_beg(referer) -i domain # referer headeri domain ile başlıyorsa bağlantıyı dondurur ve sürekli yükleniyorda bırakır
    HAProxy ile bağlantılara ID ekleme:

    Bağlantılara ID ekleyerek log izlemeyi kolaylaştırabilirsiniz



            unique-id-format "%[uuid]"
            unique-id-header X-Correlation-ID
            http-after-response set-header X-Correlation-ID "%[unique-id] "
    Server header silme:
    Arka sunucularınızın hangi web server yazılımı çalıştırdığının bilinmesini genel olarak engeller (tamamen engellemez, öğrenmenin başka yollarıda var)

    http-response del-header Server
    verilen configler backend altına yazılacaktır

    Hız olarak HAProxy ve diğer Reverse Proxy'lerin karşılaştırılması:

    1. HAProxy
    2. Envoy
    3. Nginx
    4. caddy
    5. mod_proxy

    IIS ARR hakkında internette bir benchmark yok.

    HAProxy'deki engelleme modları:

    Deny:
    403 hatası verir

    Silentdrop:
    Sürekli yükleniyorda bırakır, amaç karşı tarafı yormaktır genelde siber saldırılara karşı kullanılır ancak bazı durumlarda TCP_RESET atmak daha etkilidir

    Tarpit:
    Uzun süre yükleniyorda kalır ardından bir hata mesajı döndürür

    Reset:
    Karşı taraf TCP_RESET alır

    HAProxy sadece http için değil TCP load balancing içinde kullanılabilir, bunu ileriki bir konuda anlatacağım özellikle Minecraft gibi oyunlar için sıklıkla kullanılır.

    HAProxy yük dengeleme modları:

    roundrobin: tüm sunucular ağırlıklarına göre turlar halinde kullanılırlar
    static-rr: roundrobin'e çok benzerdir ve yapı itibariyle sunucu sayısı sınırlaması yoktur, roundrobin aksine ağırlıklar anlık olarak değiştirilemez
    leastconn: en az bağlantı kurulan sunucuyu seçer
    first: ilk uygun sunucuyu seçer
    hash: bir verinin bu ip olur header olur hashı alınarak buna göre sabit sunucu seçilir
    source: ipye göre hashlenerek sunucu belirlenir
    uri
    url_param
    hdr
    random
    rdp-cookie
    log-hash
    sticky: sunucuyu oldukça sabit tutmaya çalışır






    Türkçe olarak HAProxy hakkında detaylı bilgi az olduğu için bu paylaşımı yapmak istedim, umarım beğenmişsinizdir.
  • 30-10-2025, 20:56:40
    #2
    Bir de cloudflare pingora var ama pek kullanılan birşey değil. Ama aslında hepsinden çok kullanılması lazım bence çünkü cloudflare'ın altyapısını oluşturuyor. Saniyede 40 milyon requesti karşılıyormuş.
  • 30-10-2025, 21:12:32
    #3
    multiwhatsapp adlı üyeden alıntı: mesajı görüntüle
    Bir de cloudflare pingora var ama pek kullanılan birşey değil. Ama aslında hepsinden çok kullanılması lazım bence çünkü cloudflare'ın altyapısını oluşturuyor. Saniyede 40 milyon requesti karşılıyormuş.
    Pingora bir kütüphane, kendi başına bir server yazılımı değil