Bosh sahifa Wiki HAProxy

HAProxy

HAProxy — yuqori unumli ochiq kodli load balancer va proxy dasturi. U TCP hamda HTTP trafikni bir nechta backend server orasida taqsimlash, health check, TLS termination, request routing va observability uchun ishlatiladi. HAProxy odatda internet clientlari bilan ilova serverlari orasida turadi, ammo database TCP failover yoki ichki service ingress kabi boshqa qatlamlarda ham qo‘llanishi mumkin.

Frontend va backend

Konfiguratsiyada frontend ulanish qabul qiladigan address, port, protocol mode va routing qoidalarini belgilaydi. backend esa real serverlar, balancing algoritmi va health checklarni saqlaydi. listen kichik konfiguratsiyada frontend va backendni bitta bo‘limda birlashtirishi mumkin. defaults takroriy timeout va mode qiymatlarini meros beradi.

frontend web
    bind :443 ssl crt /etc/haproxy/certs/site.pem
    mode http
    default_backend app

backend app
    mode http
    balance roundrobin
    option httpchk GET /health
    server app1 10.0.0.11:8000 check
    server app2 10.0.0.12:8000 check

HTTP mode request method, path, host va headerlarni tushunadi. TCP mode byte oqimini L4 darajada uzatadi va PostgreSQL, TLS passthrough yoki maxsus protokol uchun ishlatiladi. Frontend va backend mode mosligi routing hamda logging semantikasiga ta’sir qiladi.

Balancing algoritmlari

roundrobin sog‘lom serverlarni navbat bilan tanlaydi. leastconn faol ulanishi eng kam serverga yo‘naltiradi va uzoq sessionlarda foydali. source client IP hashi asosida barqaror tanlov beradi. Server weight qiymati kuchliroq tugunga ko‘proq trafik beradi.

Sticky session cookie yoki boshqa key bilan clientni ma’lum backendga bog‘lashi mumkin. Bu lokal session state bilan ishlashni osonlashtiradi, ammo notekis yuk va server ishdan chiqqanda sessiya yo‘qolishini keltiradi. Stateless backend va umumiy session store odatda erkin balanslashga imkon beradi.

Health check

TCP check portga ulanishni, HTTP check esa endpoint javobi va statusini tekshiradi. rise serverni qayta healthy deb olish uchun ketma-ket muvaffaqiyat, fall esa down qilish uchun xatolar sonini belgilaydi. Interval juda qisqa bo‘lsa backendga ortiqcha yuk, juda uzun bo‘lsa nosoz serverga ko‘proq trafik ketadi.

Health endpoint faqat process tirikligini emas, xizmat request qabul qilishga tayyorligini ko‘rsatishi mumkin. Biroq har checkda og‘ir database query bajarish dependencyga hujumga o‘xshash yuk beradi. Liveness, readiness va dependency holati ehtiyojga ko‘ra ajratiladi.

ACL va routing

Access Control List request xususiyatidan boolean shart hosil qiladi. Masalan, host yoki path asosida backend tanlanadi:

acl api_path path_beg /api/
use_backend api if api_path

ACL tartibi va default backend aniq bo‘lishi kerak. Host headerni domain allowlistsiz ichki backend nomiga map qilish SSRF yoki routing bypass yaratishi mumkin. Normalization, case va URL decoding qoidalari proxy hamda backendda mos bo‘ladi.

TLS va headerlar

HAProxy TLSni frontendda tugatib, certificate va private keyni yuklaydi. Backendga plain HTTP yoki qayta TLS ulanish mumkin. Backend TLSda server certificate verification yoqilmasa, ichki tarmoqdagi MITM xavfi qoladi. SNI asosida certificate tanlash va ALPN orqali HTTP/2 negotiation qo‘llanadi.

Proxy X-Forwarded-For, X-Forwarded-Proto yoki standart Forwarded header qo‘shadi. Backend faqat ishonchli proxy IPdan kelgan headerga ishonadi. HAProxy tashqi client yuborgan spoofed qiymatni almashtiradi yoki aniq zanjir siyosati bilan qo‘shadi. PROXY protocol TCP darajada asl addressni keyingi proxyga uzatishi mumkin; qabul qiluvchi endpoint uni alohida yoqishi kerak.

Reload va kuzatuv

HAProxy graceful reload’da yangi process konfiguratsiya bilan ulanish qabul qiladi, eski process mavjud sessionlarni tugatadi. Config avval syntax checkdan o‘tadi. Certificate va map fayllarni runtime API orqali ayrim holatda yangilash mumkin. Qisqa timeout yoki noto‘g‘ri reload uzoq WebSocket ulanishlarini uzishi mumkin.

Stats socket va Prometheus exporter active sessions, queue, response time, error, retries va server holatini beradi. Log request timingni bir nechta bosqichga ajratadi. Backend queue o‘sishi server capacity yoki maxconn chegarasini, health check flap esa dependency yoki threshold muammosini ko‘rsatadi.

Bog‘liq tushunchalar

Load balancing, Reverse proxy, Health check, ACL, TLS termination, PROXY protocol, High availability