HAProxy: Difference between revisions

From Linux Wiki
Jump to navigation Jump to search
 
(20 intermediate revisions by the same user not shown)
Line 32: Line 32:
    daemon
    daemon
</code>
</code>
* log /dev/log local0 – trimite logurile către syslog.
* log /dev/log local0 – trimite logurile către syslog.
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.
Line 51: Line 52:
</code>
</code>
* log global – folosește setările din secțiunea global.
* log global – folosește setările din secțiunea global.
* mode http – modul implicit pentru frontend/backend.
* mode http – modul implicit pentru frontend/backend.*
* option httplog – loguri detaliate HTTP.
* option httplog – loguri detaliate HTTP.
* option dontlognull – nu loghează conexiuni goale.
* option dontlognull – nu loghează conexiuni goale.
* timeout connect/client/server – limite de timp pentru conexiuni.
* 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
&#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults
 
==== Frontend HTTP (port 80) ====
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;frontend http_in
&#32;&#32;&#32;&#32;bind *:80
&#32;&#32;&#32;&#32;mode http
&#32;&#32;&#32;&#32;option forwardfor
&#32;&#32;&#32;&#32;default_backend http_webserver
</code>
 
* *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 ====
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;backend http_webserver
&#32;&#32;&#32;&#32;mode http
&#32;&#32;&#32;&#32;balance leastconn
&#32;&#32;&#32;&#32;option httpchk GET /
&#32;&#32;&#32;&#32;server vm01 192.168.14.11:80 check
&#32;&#32;&#32;&#32;server vm02 192.168.14.22:80 check
&#32;&#32;&#32;&#32;server vm03 192.168.14.33:80 check
</code>
 
* 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.<br>
Certbot, în modul <span style="  font-family: Courier New;">--standalone</span>, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.<br>
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'''
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;apt -y install certbot
</code>
 
'''Oprire temporară HAProxy'''
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;systemctl stop haproxy
</code>
 
'''Generare certificat'''
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;certbot certonly --standalone -d wiki.stradivart.ro
</code>
 
'''Creare fișier PEM pentru HAProxy'''
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# mkdir -p /etc/haproxy/certs
&#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \
&#32;&#32;&#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \
&#32;&#32;&#32;> /etc/haproxy/certs/wiki.stradivart.ro.pem
&#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem
</code>
 
==== Frontend HTTPS (SSL termination) ====
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;frontend https_in
&#32;&#32;&#32;&#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem
&#32;&#32;&#32;&#32;mode http
&#32;&#32;&#32;&#32;option forwardfor
&#32;&#32;&#32;&#32;default_backend http_webserver
</code>
* *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) ====
 
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.<br>
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).<br>
De aceea backend-ul este identic cu backend-ul HTTP.
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;backend http_webserver
&#32;&#32;&#32;&#32;mode http
&#32;&#32;&#32;&#32;balance leastconn
&#32;&#32;&#32;&#32;option httpchk GET /
&#32;&#32;&#32;&#32;server vm01 192.168.14.11:80 check
&#32;&#32;&#32;&#32;server vm02 192.168.14.22:80 check
&#32;&#32;&#32;&#32;server vm03 192.168.14.33:80 check
</code>
 
* 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 ===
 
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.
 
==== Frontend HTTPS (SSL passthrough) ====
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;frontend https_in
&#32;&#32;&#32;&#32;bind *:443
&#32;&#32;&#32;&#32;mode tcp
&#32;&#32;&#32;&#32;default_backend httpS_webserver
</code>
 
* *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) ====
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;backend httpS_webserver
&#32;&#32;&#32;&#32;mode tcp
&#32;&#32;&#32;&#32;balance leastconn
&#32;&#32;&#32;&#32;server vm01 192.168.14.11:443 check
&#32;&#32;&#32;&#32;server vm02 192.168.14.22:443 check
&#32;&#32;&#32;&#32;server vm03 192.168.14.33:443 check
</code>
 
* mode tcp – forward transparent al pachetelor SSL.
* balance leastconn – distribuție inteligentă.
* server vm01/vm02/vm03 – VM-urile ISPConfig.
 
=== Pagina de statistici HAProxy ===
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;listen stats
&#32;&#32;&#32;&#32;bind *:9000
&#32;&#32;&#32;&#32;mode http
&#32;&#32;&#32;&#32;stats enable
&#32;&#32;&#32;&#32;stats uri /stats
&#32;&#32;&#32;&#32;stats refresh 5s
&#32;&#32;&#32;&#32;stats auth admin:pass123
</code>
 
* *bind :9000 – port dedicat pentru statistici.
* stats uri /stats – URL-ul paginii.
* stats auth – autentificare basic HTTP.
 
==== Accesare pagina de statistici ====
http://192.168.14.123:9000/stats
 
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]
 
{| style="width:100%"
|-
| style="width:33%; vertical-align:middle; text-align:center; padding:15px;" |
 
 
FILE
 
 
| style="width:33%; vertical-align:middle; text-align:center; padding:15px;" |
 
 
FILE
 
| style="width:33%; vertical-align:middle; text-align:center; padding:15px;" |
 
FILE
 
|}

Latest revision as of 14:26, 16 July 2026

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