HAProxy
HAProxy pe Ubuntu 2X.04 LTS

Instalare HAProxy
La instalare HAProxy activează serviciul systemd.
# apt -y install haproxy
Structura fișierului de configurare
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
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
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)
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
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.22: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
În această situaţie HAProxy gestionează certificatul.
Generare certificat Let’s Encrypt
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)
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.