HAProxy

From Linux Wiki
Revision as of 14:26, 16 July 2026 by Wikiadmin (talk | contribs) (→‎Ansible playbook)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

HAProxy pe Ubuntu 2X.04 LTS[edit | edit source]

HAProxy
HAProxy

Instalare HAProxy[edit | edit source]

La instalare HAProxy activează serviciul systemd. # apt -y install haproxy


Structura fișierului de configurare[edit | edit source]

Fișierul principal: # nano /etc/haproxy/haproxy.cfg

Configurația este împărțită în:

  • global – setări pentru procesul HAProxy
  • defaults – setări implicite pentru toate secțiunile
  • frontend – puncte de intrare pentru trafic
  • backend – serverele către care se trimite traficul

Secțiunea global[edit | edit source]

global log /dev/log local0 log /dev/log local1 notice maxconn 4096 user haproxy group haproxy daemon

  • log /dev/log local0 – trimite logurile către syslog.
  • log /dev/log local1 notice – al doilea canal de log, nivel minim notice.
  • maxconn 4096 – număr maxim de conexiuni simultane.
  • user/group haproxy – rulează cu userul de sistem haproxy.
  • daemon – rulează în background.

Secțiunea defaults[edit | edit source]

defaults log global mode http option httplog option dontlognull timeout connect 5s timeout client 30s timeout server 30s

  • log global – folosește setările din secțiunea global.
  • mode http – modul implicit pentru frontend/backend.*
  • option httplog – loguri detaliate HTTP.
  • option dontlognull – nu loghează conexiuni goale.
  • timeout connect/client/server – limite de timp pentru conexiuni.

* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults

Frontend HTTP (port 80)[edit | edit source]

frontend http_in bind *:80 mode http option forwardfor default_backend http_webserver

  • *bind :80 – ascultă pe portul 80.
  • mode http – procesează header-ele HTTP.
  • option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.
  • default_backend http_webserver – trimite traficul către backend-ul HTTP.

Backend HTTP[edit | edit source]

backend http_webserver mode http balance leastconn option httpchk GET / server vm01 192.168.14.11:80 check server vm02 192.168.14.22:80 check server vm03 192.168.14.33:80 check

  • mode http – backend-ul procesează HTTP.
  • balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.
  • option httpchk GET / – health-check HTTP.
  • server vm01/vm02/vm03 – cele trei VM.

HTTPS (port 443) cu SSL Termination în HAProxy[edit | edit source]

În această situaţie HAProxy gestionează certificatul.

Generare certificat Let’s Encrypt[edit | edit source]

Necesită port 80 public și domeniu valid.
Certbot, în modul --standalone, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.
Dacă HAProxy este pornit, acesta ocupă portul 80 și Certbot nu poate porni serverul de validare, ceea ce duce la eșecul generării certificatului.

Instalare certbot

apt -y install certbot

Oprire temporară HAProxy

systemctl stop haproxy

Generare certificat

certbot certonly --standalone -d wiki.stradivart.ro

Creare fișier PEM pentru HAProxy

# mkdir -p /etc/haproxy/certs # cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \ /etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \ > /etc/haproxy/certs/wiki.stradivart.ro.pem # chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem

Frontend HTTPS (SSL termination)[edit | edit source]

frontend https_in bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem mode http option forwardfor default_backend http_webserver

  • *bind :443 ssl crt ... – HAProxy decriptează SSL.
  • mode http – traficul devine HTTP după terminarea SSL.
  • default_backend http_webserver – backend-ul HTTP unic.

Backend HTTPS (SSL termination)[edit | edit source]

În cazul SSL termination, backend-ul nu procesează trafic HTTPS.
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).
De aceea backend-ul este identic cu backend-ul HTTP.

backend http_webserver mode http balance leastconn option httpchk GET / server vm01 192.168.14.11:80 check server vm02 192.168.14.22:80 check server vm03 192.168.14.33:80 check

  • mode http – backend-ul procesează HTTP.
  • balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.
  • option httpchk GET / – health-check HTTP.
  • server vm01/vm02/vm03 – cele trei VM.

HTTPS (port 443) cu SSL Passthrough[edit | edit source]

Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.

Frontend HTTPS (SSL passthrough)[edit | edit source]

frontend https_in bind *:443 mode tcp default_backend httpS_webserver

  • *bind :443 – ascultă pe portul 443.
  • mode tcp – HAProxy nu decriptează SSL.
  • default_backend httpS_webserver – backend separat în modul TCP.

Backend HTTPS (SSL passthrough)[edit | edit source]

backend httpS_webserver mode tcp balance leastconn server vm01 192.168.14.11:443 check server vm02 192.168.14.22:443 check server vm03 192.168.14.33:443 check

  • mode tcp – forward transparent al pachetelor SSL.
  • balance leastconn – distribuție inteligentă.
  • server vm01/vm02/vm03 – VM-urile ISPConfig.

Pagina de statistici HAProxy[edit | edit source]

listen stats bind *:9000 mode http stats enable stats uri /stats stats refresh 5s stats auth admin:pass123

  • *bind :9000 – port dedicat pentru statistici.
  • stats uri /stats – URL-ul paginii.
  • stats auth – autentificare basic HTTP.

Accesare pagina de statistici[edit | edit source]

http://192.168.14.123:9000/stats

HAProxy_stats
HAProxy_stats


FILE



FILE

FILE