HAProxy: Difference between revisions

From Linux Wiki
Jump to navigation Jump to search
 
(23 intermediate revisions by the same user not shown)
Line 68: Line 68:
</code>
</code>


* *bind :80 – ascultă pe portul 80.
* bind *:80 – ascultă pe portul 80.
* mode http – procesează header-ele HTTP.
* mode http – procesează header-ele HTTP.
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.
Line 193: Line 193:
* balance leastconn – distribuție inteligentă.
* balance leastconn – distribuție inteligentă.
* server vm01/vm02/vm03 – VM-urile ISPConfig.
* server vm01/vm02/vm03 – VM-urile ISPConfig.
=== Frontend HTTP (port 80) - ACME Challenge ===
Această secțiune descrie configurarea HAProxy pentru a permite generarea certificatelor Let’s Encrypt în ISPConfig atunci când HAProxy funcționează în modul SSL Passthrough.
Pentru validarea HTTP‑01, traficul către <span style="">/.well-known/acme-challenge/</span> trebuie direcționat către backend-ul HTTP al ISPConfig.
==== Frontend HTTP (ACME Challenge Forwarding) ====
<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;acl letsencrypt-acl path_beg /.well-known/acme-challenge/
&#32;&#32;&#32;&#32;use_backend letsencrypt-backend if letsencrypt-acl
&#32;&#32;&#32;&#32;default_backend ispconfig_http
</code>
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge
* use_backend - Forward ACME challenge către backend-ul dedicat
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal
==== Backend HTTP (ACME Challenge Forwarding) ====
Backend dedicat pentru Let’s Encrypt.
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;backend letsencrypt-backend
&#32;&#32;&#32;&#32;mode http
&#32;&#32;&#32;&#32;server isp1 192.168.14.11:80 check
&#32;&#32;&#32;&#32;server isp2 192.168.14.22:80 check
&#32;&#32;&#32;&#32;server isp3 192.168.14.33:80 check
</code>
==== Backend HTTP (trafic normal) ====
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;backend ispconfig_http
&#32;&#32;&#32;&#32;mode http
&#32;&#32;&#32;&#32;balance roundrobin
&#32;&#32;&#32;&#32;option httpchk GET /
&#32;&#32;&#32;&#32;server isp1 192.168.14.11:80 check
&#32;&#32;&#32;&#32;server isp2 192.168.14.22:80 check
&#32;&#32;&#32;&#32;server isp3 192.168.14.33:80 check
</code>


=== Pagina de statistici HAProxy ===
=== Pagina de statistici HAProxy ===
Line 215: Line 263:
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]


=== Ansible playbook ===
 
==== Ansible playbook pentru configurare ====
 
===== Fişiere necesare =====
 
{| class="responsive-three-cols"
|-
| class="col" style="vertical-align:middle; text-align:center; padding:15px;" |
 
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]
 
| class="col" style="vertical-align:middle; text-align:center; padding:15px;" |
 
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]
 
| class="col" style="vertical-align:middle; text-align:center; padding:15px;" |
 
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]
 
|}
 
===== Instalarea HAProxy si configurarea primului frontend şi backend =====
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml
</code>
 
===== Confingurarea frontend şi backend pentru HAProxy =====
 
<code class="mw-code mw-highlight plainlinks" style="display:block"><!--
-->&#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml
</code>

Latest revision as of 12:39, 25 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.

Frontend HTTP (port 80) - ACME Challenge[edit | edit source]

Această secțiune descrie configurarea HAProxy pentru a permite generarea certificatelor Let’s Encrypt în ISPConfig atunci când HAProxy funcționează în modul SSL Passthrough. Pentru validarea HTTP‑01, traficul către /.well-known/acme-challenge/ trebuie direcționat către backend-ul HTTP al ISPConfig.

Frontend HTTP (ACME Challenge Forwarding)[edit | edit source]

frontend http_in bind *:80 mode http acl letsencrypt-acl path_beg /.well-known/acme-challenge/ use_backend letsencrypt-backend if letsencrypt-acl default_backend ispconfig_http

  • acl letsencrypt-acl path_beg - detectăm cererile ACME challenge
  • use_backend - Forward ACME challenge către backend-ul dedicat
  • default_backend - Restul traficului HTTP merge către backend-ul HTTP normal

Backend HTTP (ACME Challenge Forwarding)[edit | edit source]

Backend dedicat pentru Let’s Encrypt. Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.

backend letsencrypt-backend mode http server isp1 192.168.14.11:80 check server isp2 192.168.14.22:80 check server isp3 192.168.14.33:80 check


Backend HTTP (trafic normal)[edit | edit source]

Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.

backend ispconfig_http mode http balance roundrobin option httpchk GET / server isp1 192.168.14.11:80 check server isp2 192.168.14.22:80 check server isp3 192.168.14.33:80 check

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


Ansible playbook pentru configurare[edit | edit source]

Fişiere necesare[edit | edit source]
Descarcă fișierul de inventar si variabile
Descarcă fișierul de instalare și configurare iniţială
Descarcă fișierul de actualizare a configurării
Instalarea HAProxy si configurarea primului frontend şi backend[edit | edit source]

# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml

Confingurarea frontend şi backend pentru HAProxy[edit | edit source]

# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml