<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.stradivart.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikiadmin</id>
	<title>Linux Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stradivart.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wikiadmin"/>
	<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/wiki/Special:Contributions/Wikiadmin"/>
	<updated>2026-11-01T10:29:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=431</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=431"/>
		<updated>2026-11-01T01:11:54Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Pagina de statistici HAProxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;br /&gt;
&lt;br /&gt;
=== Replicare Multi-Master / Multi-Node ===&lt;br /&gt;
[[File:HaproxySQL_MM.png|782x616px|none|HAProxy Multi-Master]]&lt;br /&gt;
&lt;br /&gt;
Destinat arhitecturilor sincrone de tip MariaDB Galera Cluster sau MySQL Group Replication. Deoarece toate cele 3 noduri pot accepta simultan operațiuni de scriere și citire (Read/Write), HAProxy va distribui conexiunile dinamic între toate mașinile virtuale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;    &lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Traficul este împărțit dinamic pe toate cele 3 noduri active&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node1 192.168.14.11:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node2 192.168.14.22:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node3 192.168.14.33:3306 check weight 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Fără directiva backup - Toate nodurile sunt tratate ca primare și rulează în paralel.&lt;br /&gt;
* balance leastconn - Esențial în Multi-Master. Deoarece interogările SQL au durate și eforturi complet diferite, algoritmul trimite conexiunile noi către cel mai liber server hardware în acea milisecundă, prevenind suprasaturarea unui singur nod.&lt;br /&gt;
* weight 1 - Toate serverele au ponderi egale. Dacă un nod din cluster este mai puternic din punct de vedere hardware, îi puteți crește valoarea (ex: weight 2) pentru a-i aloca proporțional mai multe conexiuni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pagina de statistici HAProxy ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=430</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=430"/>
		<updated>2026-11-01T01:11:43Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Pagina de statistici HAProxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;br /&gt;
&lt;br /&gt;
=== Replicare Multi-Master / Multi-Node ===&lt;br /&gt;
[[File:HaproxySQL_MM.png|782x616px|none|HAProxy Multi-Master]]&lt;br /&gt;
&lt;br /&gt;
Destinat arhitecturilor sincrone de tip MariaDB Galera Cluster sau MySQL Group Replication. Deoarece toate cele 3 noduri pot accepta simultan operațiuni de scriere și citire (Read/Write), HAProxy va distribui conexiunile dinamic între toate mașinile virtuale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;    &lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Traficul este împărțit dinamic pe toate cele 3 noduri active&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node1 192.168.14.11:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node2 192.168.14.22:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node3 192.168.14.33:3306 check weight 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Fără directiva backup - Toate nodurile sunt tratate ca primare și rulează în paralel.&lt;br /&gt;
* balance leastconn - Esențial în Multi-Master. Deoarece interogările SQL au durate și eforturi complet diferite, algoritmul trimite conexiunile noi către cel mai liber server hardware în acea milisecundă, prevenind suprasaturarea unui singur nod.&lt;br /&gt;
* weight 1 - Toate serverele au ponderi egale. Dacă un nod din cluster este mai puternic din punct de vedere hardware, îi puteți crește valoarea (ex: weight 2) pentru a-i aloca proporțional mai multe conexiuni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pagina de statistici HAProxy ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=429</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=429"/>
		<updated>2026-11-01T01:10:52Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Multi-Master / Multi-Node */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;br /&gt;
&lt;br /&gt;
=== Replicare Multi-Master / Multi-Node ===&lt;br /&gt;
[[File:HaproxySQL_MM.png|782x616px|none|HAProxy Multi-Master]]&lt;br /&gt;
&lt;br /&gt;
Destinat arhitecturilor sincrone de tip MariaDB Galera Cluster sau MySQL Group Replication. Deoarece toate cele 3 noduri pot accepta simultan operațiuni de scriere și citire (Read/Write), HAProxy va distribui conexiunile dinamic între toate mașinile virtuale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;    &lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Traficul este împărțit dinamic pe toate cele 3 noduri active&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node1 192.168.14.11:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node2 192.168.14.22:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node3 192.168.14.33:3306 check weight 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Fără directiva backup - Toate nodurile sunt tratate ca primare și rulează în paralel.&lt;br /&gt;
* balance leastconn - Esențial în Multi-Master. Deoarece interogările SQL au durate și eforturi complet diferite, algoritmul trimite conexiunile noi către cel mai liber server hardware în acea milisecundă, prevenind suprasaturarea unui singur nod.&lt;br /&gt;
* weight 1 - Toate serverele au ponderi egale. Dacă un nod din cluster este mai puternic din punct de vedere hardware, îi puteți crește valoarea (ex: weight 2) pentru a-i aloca proporțional mai multe conexiuni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pagina de statistici HAProxy ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=428</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=428"/>
		<updated>2026-11-01T01:10:35Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Pagina de statistici HAProxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;br /&gt;
&lt;br /&gt;
=== Replicare Multi-Master / Multi-Node ===&lt;br /&gt;
[[File:HaproxySQL_MM.png|782x616px|none|HAProxy Multi-Master]]&lt;br /&gt;
&lt;br /&gt;
Destinat arhitecturilor sincrone de tip MariaDB Galera Cluster sau MySQL Group Replication. Deoarece toate cele 3 noduri pot accepta simultan operațiuni de scriere și citire (Read/Write), HAProxy va distribui conexiunile dinamic între toate mașinile virtuale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;    &lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Traficul este împărțit dinamic pe toate cele 3 noduri active&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node1 192.168.14.11:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node2 192.168.14.22:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node3 192.168.14.33:3306 check weight 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Fără directiva backup - Toate nodurile sunt tratate ca primare și rulează în paralel.&lt;br /&gt;
* balance leastconn - Esențial în Multi-Master. Deoarece interogările SQL au durate și eforturi complet diferite, algoritmul trimite conexiunile noi către cel mai liber server hardware în acea milisecundă, prevenind suprasaturarea unui singur nod.&lt;br /&gt;
* weight 1 - Toate serverele au ponderi egale. Dacă un nod din cluster este mai puternic din punct de vedere hardware, îi puteți crește valoarea (ex: weight 2) pentru a-i aloca proporțional mai multe conexiuni.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=427</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=427"/>
		<updated>2026-11-01T01:10:22Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Ansible playbook pentru configurare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;br /&gt;
&lt;br /&gt;
=== Replicare Multi-Master / Multi-Node ===&lt;br /&gt;
[[File:HaproxySQL_MM.png|782x616px|none|HAProxy Multi-Master]]&lt;br /&gt;
&lt;br /&gt;
Destinat arhitecturilor sincrone de tip MariaDB Galera Cluster sau MySQL Group Replication. Deoarece toate cele 3 noduri pot accepta simultan operațiuni de scriere și citire (Read/Write), HAProxy va distribui conexiunile dinamic între toate mașinile virtuale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;    &lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Traficul este împărțit dinamic pe toate cele 3 noduri active&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node1 192.168.14.11:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node2 192.168.14.22:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node3 192.168.14.33:3306 check weight 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Fără directiva backup - Toate nodurile sunt tratate ca primare și rulează în paralel.&lt;br /&gt;
* balance leastconn - Esențial în Multi-Master. Deoarece interogările SQL au durate și eforturi complet diferite, algoritmul trimite conexiunile noi către cel mai liber server hardware în acea milisecundă, prevenind suprasaturarea unui singur nod.&lt;br /&gt;
* weight 1 - Toate serverele au ponderi egale. Dacă un nod din cluster este mai puternic din punct de vedere hardware, îi puteți crește valoarea (ex: weight 2) pentru a-i aloca proporțional mai multe conexiuni.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=426</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=426"/>
		<updated>2026-11-01T01:09:52Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Multi-Master / Multi-Node */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;br /&gt;
&lt;br /&gt;
=== Replicare Multi-Master / Multi-Node ===&lt;br /&gt;
[[File:HaproxySQL_MM.png|782x616px|none|HAProxy Multi-Master]]&lt;br /&gt;
&lt;br /&gt;
Destinat arhitecturilor sincrone de tip MariaDB Galera Cluster sau MySQL Group Replication. Deoarece toate cele 3 noduri pot accepta simultan operațiuni de scriere și citire (Read/Write), HAProxy va distribui conexiunile dinamic între toate mașinile virtuale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;    &lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Traficul este împărțit dinamic pe toate cele 3 noduri active&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node1 192.168.14.11:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node2 192.168.14.22:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node3 192.168.14.33:3306 check weight 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Fără directiva backup - Toate nodurile sunt tratate ca primare și rulează în paralel.&lt;br /&gt;
* balance leastconn - Esențial în Multi-Master. Deoarece interogările SQL au durate și eforturi complet diferite, algoritmul trimite conexiunile noi către cel mai liber server hardware în acea milisecundă, prevenind suprasaturarea unui singur nod.&lt;br /&gt;
* weight 1 - Toate serverele au ponderi egale. Dacă un nod din cluster este mai puternic din punct de vedere hardware, îi puteți crește valoarea (ex: weight 2) pentru a-i aloca proporțional mai multe conexiuni.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=425</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=425"/>
		<updated>2026-11-01T01:08:49Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Multi-Master / Multi-Node */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;br /&gt;
&lt;br /&gt;
=== Replicare Multi-Master / Multi-Node ===&lt;br /&gt;
[[File:HaproxySQL_MM.png|782x616px|none|HAProxy Multi-Master]]&lt;br /&gt;
&lt;br /&gt;
Destinat arhitecturilor sincrone de tip MariaDB Galera Cluster sau MySQL Group Replication. Deoarece toate cele 3 noduri pot accepta simultan operațiuni de scriere și citire (Read/Write), HAProxy va distribui conexiunile dinamic între toate mașinile virtuale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;    &lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Traficul este împărțit dinamic pe toate cele 3 noduri active&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node1 192.168.14.11:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node2 192.168.14.22:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node3 192.168.14.33:3306 check weight 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Fără directiva backup - Toate nodurile sunt tratate ca primare și rulează în paralel.&lt;br /&gt;
* balance leastconn - Esențial în Multi-Master. Deoarece interogările SQL au durate și eforturi complet diferite, algoritmul trimite conexiunile noi către cel mai liber server hardware în acea milisecundă, prevenind suprasaturarea unui singur nod.&lt;br /&gt;
* weight 1 - Toate serverele au ponderi egale. Dacă un nod din cluster este mai puternic din punct de vedere hardware, îi puteți crește valoarea (ex: weight 2) pentru a-i aloca proporțional mai multe conexiuni.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=424</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=424"/>
		<updated>2026-11-01T01:08:37Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Master/Slave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;br /&gt;
&lt;br /&gt;
=== Replicare Multi-Master / Multi-Node ===&lt;br /&gt;
[[File:HaproxySQL_MM.png.png|782x616px|none|HAProxy Multi-Master]]&lt;br /&gt;
&lt;br /&gt;
Destinat arhitecturilor sincrone de tip MariaDB Galera Cluster sau MySQL Group Replication. Deoarece toate cele 3 noduri pot accepta simultan operațiuni de scriere și citire (Read/Write), HAProxy va distribui conexiunile dinamic între toate mașinile virtuale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Multi-Master)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_multimaster&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;    &lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Traficul este împărțit dinamic pe toate cele 3 noduri active&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node1 192.168.14.11:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node2 192.168.14.22:3306 check weight 1&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server db_node3 192.168.14.33:3306 check weight 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Fără directiva backup - Toate nodurile sunt tratate ca primare și rulează în paralel.&lt;br /&gt;
* balance leastconn - Esențial în Multi-Master. Deoarece interogările SQL au durate și eforturi complet diferite, algoritmul trimite conexiunile noi către cel mai liber server hardware în acea milisecundă, prevenind suprasaturarea unui singur nod.&lt;br /&gt;
* weight 1 - Toate serverele au ponderi egale. Dacă un nod din cluster este mai puternic din punct de vedere hardware, îi puteți crește valoarea (ex: weight 2) pentru a-i aloca proporțional mai multe conexiuni.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=File:HaproxySQL_MM.png&amp;diff=423</id>
		<title>File:HaproxySQL MM.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=File:HaproxySQL_MM.png&amp;diff=423"/>
		<updated>2026-11-01T01:07:18Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=422</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=422"/>
		<updated>2026-11-01T00:57:58Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Prerechizite: Utilizatorul de Health Check */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'192.168.14.11';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=421</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=421"/>
		<updated>2026-11-01T00:55:46Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Master/Slave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp - Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn - Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... - Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions - Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup - Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=420</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=420"/>
		<updated>2026-11-01T00:54:40Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Master/Slave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă dbm devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – Obligatoriu pentru baze de date. Suprascrie modul HTTP implicit.&lt;br /&gt;
* balance leastconn – Direcționează conexiunile noi către nodul cu cele mai puține sesiuni active.&lt;br /&gt;
* option mysql-check user ... – Interoghează nativ serverul MySQL pentru a-i verifica starea.&lt;br /&gt;
* on-marked-down shutdown-sessions – Dacă Masterul pică testul de sănătate, HAProxy taie instant toate conexiunile active/persistente din pool, forțând aplicația să se mute imediat pe Slave-ul de backup.&lt;br /&gt;
* backup – Marchează serverul ca pasiv. Nu primește trafic atât timp cât nodul principal este online.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=419</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=419"/>
		<updated>2026-11-01T00:53:25Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Master/Slave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;'''&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg'''&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă mdb devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=418</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=418"/>
		<updated>2026-11-01T00:53:04Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Master/Slave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă mdb devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=417</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=417"/>
		<updated>2026-11-01T00:52:28Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Replicare Master/Slave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;amp;#32;# FRONTEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;frontend fe_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:3306&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND DATABASE (Master/Slave)&lt;br /&gt;
&amp;amp;#32;backend be_mysql_master_slave&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option mysql-check user haproxy_check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Master - preia 100% din trafic în mod normal&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbm 192.168.14.11:3306 check on-marked-down shutdown-sessions&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Serverul Slave - preia traficul DOAR dacă mdb devine offline&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server dbs 192.168.14.22:3306 check backup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=416</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=416"/>
		<updated>2026-11-01T00:48:01Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Prerechizite: Utilizatorul de Health Check */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;br /&gt;
&lt;br /&gt;
=== Replicare Master/Slave ===&lt;br /&gt;
[[File:HaproxySQL_MS.png|782x616px|none|HAProxy Master-Slave]]&lt;br /&gt;
&lt;br /&gt;
Destinat infrastructurilor clasice Master/Slave. Aplicația folosește un singur punct de conexiune (db.domeniu.lan:3306). HAProxy trimite tot traficul către Master, în timp ce Slave-ul stă în așteptare (backup) și preia automat activitatea doar dacă Masterul intră în crash.&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=File:HaproxySQL_MS.png&amp;diff=415</id>
		<title>File:HaproxySQL MS.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=File:HaproxySQL_MS.png&amp;diff=415"/>
		<updated>2026-11-01T00:45:44Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=414</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=414"/>
		<updated>2026-11-01T00:44:09Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Prerechizite: Utilizatorul de Health Check */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Se execută pe Master (dacă replicarea este pornită).&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=413</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=413"/>
		<updated>2026-11-01T00:43:07Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HAProxy pentru Baze de Date (MySQL / MariaDB) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=412</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=412"/>
		<updated>2026-11-01T00:42:46Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Managementul Configurării */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy pentru Baze de Date (MySQL / MariaDB) ==&lt;br /&gt;
&lt;br /&gt;
Această secțiune descrie configurarea HAProxy în Modul TCP (Layer 4) pentru baze de date. Deoarece MySQL/MariaDB folosește un protocol binar propriu, HAProxy nu va inspecta conținutul pachetelor, ci doar va ruta conexiunile la nivel de port.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Prerechizite: Utilizatorul de Health Check ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să poată verifica dacă serverele MySQL sunt &amp;quot;vii&amp;quot; (fără a deschide doar portul TCP orbește), trebuie creat un utilizator fără parole și fără privilegii pe serverul de baze de date.&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;CREATE USER 'haproxy_check'@'IP_SERVER_HAPROXY';&lt;br /&gt;
&amp;amp;#32;FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=411</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=411"/>
		<updated>2026-10-22T12:07:07Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Managementul Configurării: Restart vs Reload */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=410</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=410"/>
		<updated>2026-10-22T12:05:56Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Reîncărcarea și Aplicarea Modificărilor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;# systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării: Restart vs Reload ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=409</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=409"/>
		<updated>2026-10-22T12:05:18Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Modificarea fișierului de serviciu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării: Restart vs Reload ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=408</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=408"/>
		<updated>2026-10-22T12:04:44Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Note de Implementare și Reguli Stricte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Integrare Modulară în Systemd (conf.d) ===&lt;br /&gt;
&lt;br /&gt;
Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar &amp;lt;tt&amp;gt;conf.d/&amp;lt;/tt&amp;gt;, trebuie modificat scriptul de pornire al serviciului în Systemd.&lt;br /&gt;
&lt;br /&gt;
==== Modificarea fișierului de serviciu ====&lt;br /&gt;
&lt;br /&gt;
Caută linia implicită de pornire și comenteaz-o&lt;br /&gt;
Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare (&amp;quot;haproxy.cfg&amp;quot; și directorul &amp;quot;conf.d/&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /usr/lib/systemd/system/haproxy.service&lt;br /&gt;
&amp;amp;#32;#ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS&lt;br /&gt;
&amp;amp;#32;ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reîncărcarea și Aplicarea Modificărilor ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# systemctl daemon-reload&lt;br /&gt;
&amp;amp;#32;systemctl restart haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Managementul Configurării: Restart vs Reload ====&lt;br /&gt;
&lt;br /&gt;
Unul dintre marile avantaje ale acestei arhitecturi este capacitatea de a aplica modificări fără a întrerupe sesiunile HTTP/HTTPS active ale utilizatorilor (Zero-Downtime).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Validarea sintaxei&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;amp;#32;# systemctl reload haproxy &amp;lt;span style=&amp;quot;font-style: italic;color:#4d4d4d&amp;quot;&amp;gt;# Reîncărcarea serviciului cu noua configurare&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=407</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=407"/>
		<updated>2026-10-22T11:35:59Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Note de Implementare și Reguli Stricte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Note de Implementare și Reguli Stricte ===&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=406</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=406"/>
		<updated>2026-10-22T10:49:08Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fișier Mapare HTTPS (Port 443) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Note de Implementare și Reguli Stricte ===&lt;br /&gt;
* '''Tăierea Porturilor (`field(1,:)`):''' Este critică în frontend-ul HTTP. Fără această funcție, o cerere trimisă de browser către `domeniu.ro:80` va eșua la mapare deoarece fișierul `.map` conține doar cheia simplă `domeniu.ro`.&lt;br /&gt;
* '''Ordinea Regulilor în HAProxy:''' Regulile de tip `http-request deny` sunt evaluate de engine înaintea regulilor de tip `use_backend`. Din acest motiv, regula de deny trebuie să conțină neapărat clauza condițională `if ! { var(txn.backend) -m found }` pentru a nu bloca traficul legitim.&lt;br /&gt;
* '''Aplicarea Modificărilor:''' Ori de câte ori se adaugă un domeniu nou în fișierele `.map`, nu este necesar restartul serviciului, ci doar reîncărcarea configurării în memorie:&lt;br /&gt;
  # haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/&lt;br /&gt;
  # systemctl reload haproxy&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=405</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=405"/>
		<updated>2026-10-22T10:48:32Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Configurare Backend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurare Backend ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=404</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=404"/>
		<updated>2026-10-22T10:48:25Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Configurare Frontend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
==== Configurare Frontend ====&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configurare Backend ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=403</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=403"/>
		<updated>2026-10-22T10:47:19Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Configurare Backend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configurare Backend ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=402</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=402"/>
		<updated>2026-10-22T10:46:14Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configurare Backend ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=401</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=401"/>
		<updated>2026-10-22T10:45:26Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Configurare Frontend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configurare Backend ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# DEFINIRE BACKEND-URI SERVERE VIRTUALE&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM1 (192.168.14.11)&lt;br /&gt;
&amp;amp;#32;backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_web 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm1_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm1_ssl 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM2 (192.168.14.22)&lt;br /&gt;
&amp;amp;#32;backend be_vm2_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_web 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm2_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm2_ssl 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND-URI VM3 (192.168.14.33)&lt;br /&gt;
&amp;amp;#32;backend be_vm3_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_web 192.168.14.33:80 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;backend be_vm3_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm3_ssl 192.168.14.33:443 check&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# BACKEND SIGURANȚĂ (DENY)&lt;br /&gt;
&amp;amp;#32;backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=400</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=400"/>
		<updated>2026-10-22T10:41:28Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Configurare Frontend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=399</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=399"/>
		<updated>2026-10-22T10:39:39Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Configurare Frontend-uri și Backend-uri Modulare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
&amp;amp;#32;# nano /etc/haproxy/conf.d/websites.cfg&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl is_acme path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare: Trimite către backend-ul identificat în map&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[var(txn.backend)] if { var(txn.backend) -m found }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_vm1_http&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;frontend fe_https&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request inspect-delay 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;tcp-request content accept if { req.ssl_hello_type 1 }&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;# Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend be_https_deny&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=398</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=398"/>
		<updated>2026-10-22T10:34:07Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Configurare Frontend-uri și Backend-uri Modulare ===&lt;br /&gt;
&lt;br /&gt;
Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=397</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=397"/>
		<updated>2026-10-22T10:30:55Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fișier Mapare HTTPS (Port 443) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=396</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=396"/>
		<updated>2026-10-22T10:30:45Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fișier Mapare HTTP (Port 80) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;# VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;# VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;#VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;#VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=395</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=395"/>
		<updated>2026-10-22T10:29:02Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fișier Mapare HTTP (Port 443) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;#VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;#VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTPS (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;#VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;#VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=394</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=394"/>
		<updated>2026-10-22T10:28:46Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fișier Mapare HTTP (Port 80) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;#VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;#VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 443) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-https.map&lt;br /&gt;
&amp;amp;#32;# VM1 - 192.168.1.11&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_https&lt;br /&gt;
&amp;amp;#32;#VM2 - 192.168.1.22&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_https&lt;br /&gt;
&amp;amp;#32;#VM3 - 192.168.1.33&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_https&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_https&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=393</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=393"/>
		<updated>2026-10-22T10:25:58Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Structură Fișiere Mapare Dinamică */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;br /&gt;
&lt;br /&gt;
==== Fișier Mapare HTTP (Port 80) ====&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/maps/web-http.map&lt;br /&gt;
&amp;amp;#32;domeniu.eu            be_vm1_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.eu        be_vm1_http&lt;br /&gt;
&amp;amp;#32;domeniu.com           be_vm2_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.com       be_vm2_http&lt;br /&gt;
&amp;amp;#32;domeniu.ro            be_vm3_http&lt;br /&gt;
&amp;amp;#32;sub.domeniu.ro        be_vm3_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=392</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=392"/>
		<updated>2026-10-22T10:23:55Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;br /&gt;
&lt;br /&gt;
=== Structură Fișiere Mapare Dinamică ===&lt;br /&gt;
&lt;br /&gt;
Pentru a evita modificarea continuă a fișierului principal de configurare la adăugarea de noi domenii, folosim fișiere de mapare de tip cheie-valoare (*.map).&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=391</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=391"/>
		<updated>2026-10-22T10:22:28Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;br /&gt;
&lt;br /&gt;
Acest scenariu avansat descrie configurarea HAProxy ca un &amp;quot;Router Layer 7 (Content-Based Switch)&amp;quot;. Această arhitectură permite consolidarea mai multor domenii și subdomenii complet diferite pe un singur IP public extern, rutând traficul dinamic către mașini virtuale (backend-uri) separate, fără ca HAProxy să decripteze traficul SSL/TLS (SSL Passthrough).&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=390</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=390"/>
		<updated>2026-10-22T09:18:35Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=389</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=389"/>
		<updated>2026-10-22T09:17:34Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* Fişiere necesare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Media:Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=388</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=388"/>
		<updated>2026-10-22T09:09:33Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=File:HaproxyLayer7.png&amp;diff=387</id>
		<title>File:HaproxyLayer7.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=File:HaproxyLayer7.png&amp;diff=387"/>
		<updated>2026-10-22T09:08:23Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=386</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=386"/>
		<updated>2026-10-22T09:04:21Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:HaproxyL7.png|782x616px|none|HAProxy Layer7]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=385</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=385"/>
		<updated>2026-10-22T09:04:08Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: /* HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:HaproxyL7.png|782x616px|none|HAProxy]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=384</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=384"/>
		<updated>2026-10-22T09:02:38Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 ==&lt;br /&gt;
[[File:HAProxyL7.png|782x616px|none|HAProxy]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=383</id>
		<title>HAProxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=HAProxy&amp;diff=383"/>
		<updated>2026-10-22T09:00:00Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== HAProxy - Load Balancing Standard (Grup Unic Backend) ==&lt;br /&gt;
[[File:HAProxy.png|782x616px|none|HAProxy]]&lt;br /&gt;
=== Instalare HAProxy ===&lt;br /&gt;
La instalare HAProxy activează serviciul systemd.&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt -y install haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Structura fișierului de configurare ===&lt;br /&gt;
&lt;br /&gt;
Fișierul principal:&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# nano /etc/haproxy/haproxy.cfg&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configurația este împărțită în:&lt;br /&gt;
* global – setări pentru procesul HAProxy&lt;br /&gt;
* defaults – setări implicite pentru toate secțiunile&lt;br /&gt;
* frontend – puncte de intrare pentru trafic&lt;br /&gt;
* backend – serverele către care se trimite traficul&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea global ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local0&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log /dev/log local1 notice&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;maxconn 4096&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;user haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;group haproxy&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;daemon&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* log /dev/log local0 – trimite logurile către syslog.&lt;br /&gt;
* log /dev/log local1 notice – al doilea canal de log, nivel minim notice.&lt;br /&gt;
* maxconn 4096 – număr maxim de conexiuni simultane.&lt;br /&gt;
* user/group haproxy – rulează cu userul de sistem haproxy.&lt;br /&gt;
* daemon – rulează în background.&lt;br /&gt;
&lt;br /&gt;
==== Secțiunea defaults ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;defaults&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;log     global&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode    http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  httplog&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option  dontlognull&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout connect 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout client  30s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;timeout server  30s&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* log global – folosește setările din secțiunea global.&lt;br /&gt;
* mode http – modul implicit pentru frontend/backend.*&lt;br /&gt;
* option httplog – loguri detaliate HTTP.&lt;br /&gt;
* option dontlognull – nu loghează conexiuni goale.&lt;br /&gt;
* timeout connect/client/server – limite de timp pentru conexiuni.&lt;br /&gt;
&amp;amp;#32;* Dacă un frontend sau backend are propriul mode (ex: mode tcp), acesta suprascrie automat valoarea din defaults&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (port 80) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* bind *:80 – ascultă pe portul 80.&lt;br /&gt;
* mode http – procesează header-ele HTTP.&lt;br /&gt;
* option forwardfor – adaugă X‑Forwarded‑For cu IP-ul real al clientului.&lt;br /&gt;
* default_backend http_webserver – trimite traficul către backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Termination în HAProxy ===&lt;br /&gt;
&lt;br /&gt;
În această situaţie HAProxy gestionează certificatul.&lt;br /&gt;
&lt;br /&gt;
==== Generare certificat Let’s Encrypt ====&lt;br /&gt;
&lt;br /&gt;
Necesită port 80 public și domeniu valid.&amp;lt;br&amp;gt;&lt;br /&gt;
Certbot, în modul &amp;lt;span style=&amp;quot;  font-family: Courier New;&amp;quot;&amp;gt;--standalone&amp;lt;/span&amp;gt;, pornește un mini‑webserver intern pe portul 80 pentru a răspunde la challenge-ul HTTP‑01 de la Let’s Encrypt.&amp;lt;br&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Instalare certbot'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;apt -y install certbot&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Oprire temporară HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;systemctl stop haproxy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Generare certificat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;certbot certonly --standalone -d wiki.stradivart.ro&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Creare fișier PEM pentru HAProxy'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# mkdir -p /etc/haproxy/certs&lt;br /&gt;
&amp;amp;#32;# cat /etc/letsencrypt/live/wiki.stradivart.ro/fullchain.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;/etc/letsencrypt/live/wiki.stradivart.ro/privkey.pem \&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;gt; /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;# chmod 600 /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443 ssl crt /etc/haproxy/certs/wiki.stradivart.ro.pem&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option forwardfor&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend http_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* *bind :443 ssl crt ... – HAProxy decriptează SSL.&lt;br /&gt;
* mode http – traficul devine HTTP după terminarea SSL.&lt;br /&gt;
* default_backend http_webserver – backend-ul HTTP unic.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL termination) ====&lt;br /&gt;
&lt;br /&gt;
În cazul SSL termination, backend-ul nu procesează trafic HTTPS.&amp;lt;br&amp;gt;&lt;br /&gt;
HAProxy decriptează SSL în frontend, iar backend-ul primește trafic HTTP normal (non‑SSL).&amp;lt;br&amp;gt;&lt;br /&gt;
De aceea backend-ul este identic cu backend-ul HTTP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend http_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode http – backend-ul procesează HTTP.&lt;br /&gt;
* balance leastconn – trimite traficul către serverul cu cele mai puține conexiuni active.&lt;br /&gt;
* option httpchk GET / – health-check HTTP.&lt;br /&gt;
* server vm01/vm02/vm03 – cele trei VM.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS (port 443) cu SSL Passthrough ===&lt;br /&gt;
&lt;br /&gt;
Webserver-ul gestionează certificatul. HAProxy doar forward-ează pachetele SSL.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend https_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:443&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend httpS_webserver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :443 – ascultă pe portul 443.&lt;br /&gt;
* mode tcp – HAProxy nu decriptează SSL.&lt;br /&gt;
* default_backend httpS_webserver – backend separat în modul TCP.&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTPS (SSL passthrough) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend httpS_webserver&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode tcp&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance leastconn&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm01 192.168.14.11:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm02 192.168.14.22:443 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server vm03 192.168.14.33:443 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* mode tcp – forward transparent al pachetelor SSL.&lt;br /&gt;
* balance leastconn – distribuție inteligentă.&lt;br /&gt;
* server vm01/vm02/vm03 – VM-urile ISPConfig.&lt;br /&gt;
&lt;br /&gt;
=== Frontend HTTP (port 80) - ACME Challenge ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Pentru validarea HTTP‑01, traficul către &amp;lt;span style=&amp;quot;&amp;quot;&amp;gt;/.well-known/acme-challenge/&amp;lt;/span&amp;gt; trebuie direcționat către backend-ul HTTP al ISPConfig.&lt;br /&gt;
&lt;br /&gt;
==== Frontend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;frontend http_in&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:80&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;acl letsencrypt-acl path_beg /.well-known/acme-challenge/&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;use_backend letsencrypt-backend if letsencrypt-acl&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;default_backend ispconfig_http&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* acl letsencrypt-acl path_beg - detectăm cererile ACME challenge&lt;br /&gt;
* use_backend - Forward ACME challenge către backend-ul dedicat&lt;br /&gt;
* default_backend - Restul traficului HTTP merge către backend-ul HTTP normal&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (ACME Challenge Forwarding) ====&lt;br /&gt;
&lt;br /&gt;
Backend dedicat pentru Let’s Encrypt.&lt;br /&gt;
Acesta trebuie să trimită cererile către portul 80 al serverrelor ISPConfig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend letsencrypt-backend&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Backend HTTP (trafic normal) ====&lt;br /&gt;
&lt;br /&gt;
Backend-ul standard pentru HTTP (port 80), folosit pentru redirectări, panel ISPConfig, sau site-uri HTTP.&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;backend ispconfig_http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;balance roundrobin&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;option httpchk GET /&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp1 192.168.14.11:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp2 192.168.14.22:80 check&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;server isp3 192.168.14.33:80 check&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pagina de statistici HAProxy ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;listen stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;bind *:9000&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;mode http&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats enable&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats uri /stats&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats refresh 5s&lt;br /&gt;
&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;&amp;amp;#32;stats auth admin:pass123&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* *bind :9000 – port dedicat pentru statistici.&lt;br /&gt;
* stats uri /stats – URL-ul paginii.&lt;br /&gt;
* stats auth – autentificare basic HTTP.&lt;br /&gt;
&lt;br /&gt;
==== Accesare pagina de statistici ====&lt;br /&gt;
http://192.168.14.123:9000/stats&lt;br /&gt;
&lt;br /&gt;
[[File:HAProxy stats.png|782x616px|none|HAProxy_stats]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ansible playbook pentru configurare ====&lt;br /&gt;
&lt;br /&gt;
===== Fişiere necesare =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;responsive-three-cols&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Inventory.ini|Descarcă fișierul de inventar si variabile]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy.yaml|Descarcă fișierul de instalare și configurare iniţială]]&lt;br /&gt;
&lt;br /&gt;
| class=&amp;quot;col&amp;quot; style=&amp;quot;vertical-align:middle; text-align:center; padding:15px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
[[File:Filethumb.png|thumb|right|link=Haproxy-conf.yaml|Descarcă fișierul de actualizare a configurării]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Instalarea HAProxy si configurarea primului frontend şi backend =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Confingurarea frontend şi backend pentru HAProxy =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# ansible-playbook -i /path/to/Inventory.ini /path/to/Haproxy-conf.yaml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.stradivart.ro/index.php?title=Raspberry_Pi_NTP_Server&amp;diff=381</id>
		<title>Raspberry Pi NTP Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.stradivart.ro/index.php?title=Raspberry_Pi_NTP_Server&amp;diff=381"/>
		<updated>2026-10-20T23:07:23Z</updated>

		<summary type="html">&lt;p&gt;Wikiadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Configurarea Raspberry Pi ca server NTP folosint NEO-7M ==&lt;br /&gt;
Un server NTP asigura sincronizarea corecta a orei pentru toate dispozitivele dintr-o retea, prevenind erori în loguri, autentificari sau servicii care depind de timp precis. Folosind un modul GPS cu PPS, un Raspberry Pi poate deveni o sursa Stratum‑1 foarte stabila și independenta de internet. Acest proiect prezinta configurarea unui astfel de server NTP simplu și fiabil pentru uz local.&lt;br /&gt;
&lt;br /&gt;
=== Componente folosite ===&lt;br /&gt;
Pentru realizarea acestui server NTP stratum 1 am folosit componente simple, accesibile si usor de integrat. Lista de mai jos include toate elementele hardware necesare pentru configuratie.&lt;br /&gt;
* Raspberry Pi 1 Model B - 180 RON (pret din 2012)&lt;br /&gt;
* Modul GPS u-blox NEO-7M - 49,07 RON&lt;br /&gt;
* Antena GPS ~28 dB gain - 67 RON&lt;br /&gt;
* Fire jumper female–female - 5,79 RON&lt;br /&gt;
* Card SD 16 GB - aprox 30 RON&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;i&amp;gt;preturi valabile in decembrie 2025&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configurare UART și activare PPS ===&lt;br /&gt;
Pe Raspberry Pi, consola seriala este activa implicit, ceea ce blocheaza utilizarea interfetei UART pentru modulul GPS. Pentru a putea folosi portul serial și semnalul PPS, este necesara dezactivarea consolei și activarea manuala a suportului UART și PPS.&lt;br /&gt;
&lt;br /&gt;
==== Dezactivarea consolei seriale ====&lt;br /&gt;
Pentru dezactivarea consolei seriale editam fisierul /boot/firmware/cmdline.txt de unde stergem segmentul care contine consola, de obicei ceva de forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;console=serial0,115200&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lasam restul liniei pe un singur rand, exact cum era.&lt;br /&gt;
&lt;br /&gt;
==== Verificarea activarii UART ====&lt;br /&gt;
Editam fisierul /boot/firmware/config.txt unde ne asiguram ca exista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;[all]&lt;br /&gt;
&amp;amp;#32;enable_uart=1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Activarea modulului PPST ====&lt;br /&gt;
Incarcam modulul PPS executand:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;echo 'pps-gpio' &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pentru configurarea pinului PPS (GPIO 18) editam din nou fisierul /boot/firmware/config.txt iar in partea de jos adaugam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;dtoverlay=pps-gpio,gpiopin=18&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aceasta indica kernelului ca semnalul PPS este conectat la GPIO 18.&lt;br /&gt;
&lt;br /&gt;
Dupa ce efectuam aceste modificari, oprim systemul in vederea conectarii modului de GPS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Conectarea modului GPS ===&lt;br /&gt;
Dupa dezactivarea consolei seriale și activarea suportului PPS, interfața UART a Raspberry Pi devine libera pentru comunicarea cu modulul GPS. Conectarea se face direct pe pinii GPIO, folosind alimentarea de 5V, masa comuna și liniile de date RX/TX, plus semnalul PPS.&lt;br /&gt;
&lt;br /&gt;
==== Schema de conectare ====&lt;br /&gt;
&lt;br /&gt;
[[File:GPIOtoGPS.jpg|800px|none|Schema conactare]]&lt;br /&gt;
&lt;br /&gt;
* Conectam pinul de 5V al Raspberry Pi la pinul de alimentare al modulului GPS.&lt;br /&gt;
* Conectam GND la masa modulului GPS.&lt;br /&gt;
* Conectam TX0 de pe Raspberry Pi la RX al modulului GPS (Pi transmite → GPS primește).&lt;br /&gt;
* Conectam RX0 de pe Raspberry Pi la TX al modulului GPS (GPS transmite → Pi primește).&lt;br /&gt;
* Conectam GPIO 18 la pinul PPS al modulului GPS, conform configurarii din config.txt&lt;br /&gt;
&lt;br /&gt;
=== Test pentru UART si PPS ===&lt;br /&gt;
Dupa conectarea modulului GPS si configurarea UART/PPS, putem verifica functionarea celor doua interfete direct din sistem.&lt;br /&gt;
&lt;br /&gt;
==== Test UART (NMEA) ====&lt;br /&gt;
Pentru a verifica daca modulul GPS transmite date NMEA prin UART:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# cat /dev/serial0&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;$GNRMC,140221.00,A,4423.43286,N,02605.77991,E,0.096,,250226,,,A,V*14&lt;br /&gt;
&amp;amp;#32;$GNVTG,,T,,M,0.096,N,0.178,K,A*3C&lt;br /&gt;
&amp;amp;#32;$GNGGA,140221.00,4423.43286,N,02605.77991,E,1,10,2.11,105.1,M,34.9,M,,*44&lt;br /&gt;
&amp;amp;#32;$GNGSA,A,3,10,23,15,29,16,26,27,18,,,,,3.30,2.11,2.54,1*00&lt;br /&gt;
&amp;amp;#32;$GNGSA,A,3,02,25,,,,,,,,,,,3.30,2.11,2.54,3*07&lt;br /&gt;
&amp;amp;#32;.............&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest rezultat confirma faptul ca Pi-ul primeste date GPS de la modul&lt;br /&gt;
Daca totul este configurat corect, ar trebui sa apara siruri NMEA. In cazul in care nu apare asemenator mai sus, verificati conexiunile RX/TX si setarile UART.&lt;br /&gt;
&lt;br /&gt;
==== Instalare unelte PPS si testare ====&lt;br /&gt;
Pentru testarea semnalului PPS, instalati pachetul necesar:&lt;br /&gt;
&lt;br /&gt;
* apt install pps-tools&lt;br /&gt;
&lt;br /&gt;
Dupa instalare, verificam semnalul PPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# ppstest /dev/pps0&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;trying PPS source &amp;quot;/dev/pps0&amp;quot;&lt;br /&gt;
&amp;amp;#32;found PPS source &amp;quot;/dev/pps0&amp;quot;&lt;br /&gt;
&amp;amp;#32;ok, found 1 source(s), now start fetching data...&lt;br /&gt;
&amp;amp;#32;source 0 - assert 1769914968.660167945, sequence: 330 - clear  0.000000000, sequence: 0&lt;br /&gt;
&amp;amp;#32;source 0 - assert 1769914969.660165119, sequence: 331 - clear  0.000000000, sequence: 0&lt;br /&gt;
&amp;amp;#32;source 0 - assert 1769914970.660164293, sequence: 332 - clear  0.000000000, sequence: 0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un rezultat corect va afisa impulsuri detectate la fiecare secunda.&lt;br /&gt;
&lt;br /&gt;
=== Configurare gpsd ===&lt;br /&gt;
Instalam pachetele necesare pentru gestionarea modulului GPS:&lt;br /&gt;
* apt install gpsd gpsd-clients&lt;br /&gt;
&lt;br /&gt;
==== Startup config pentru gpsd ====&lt;br /&gt;
Editam fisierul de configurare gpsd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# nano /etc/default/gpsd&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;START_DAEMON=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;amp;#32;DEVICES=&amp;quot;/dev/serial0 /dev/pps&amp;quot;&lt;br /&gt;
&amp;amp;#32;GPSD_OPTIONS=&amp;quot;-n&amp;quot;&lt;br /&gt;
&amp;amp;#32;USBAUTO=&amp;quot;false&amp;quot;&lt;br /&gt;
&amp;amp;#32;GPSD_SOCKET=&amp;quot;/var/run/gpsd.sock&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* START_DAEMON -&amp;gt; Porneste automat serviciul gpsd la boot. Daca este &amp;quot;false&amp;quot;, gpsd nu se lanseaza singur.&lt;br /&gt;
* DEVICES -&amp;gt; Aceasta linie indica gpsd sa deschida doua dispozitive simultan&lt;br /&gt;
** /dev/serial0 → fluxul NMEA provenit de pe UART (datele GPS clasice: GGA, RMC, sateliti etc.)&lt;br /&gt;
** /dev/pps → semnalul PPS hardware folosit pentru sincronizare precisa la nivel de secunda&lt;br /&gt;
* GPSD_OPTIONS -&amp;gt; Porneste gpsd chiar daca nu exista clienti conectati. Fara &amp;quot;-n&amp;quot;, gpsd asteapta un client inainte sa initializeze modulul GPS.&lt;br /&gt;
* USBAUTO -&amp;gt; Dezactiveaza detectarea automata a dispozitivelor GPS USB; necesar cand folosim un modul pe UART.&lt;br /&gt;
* GPSD_SOCKET -&amp;gt; Definește socket-ul UNIX prin care aplicatiile (cgps, chrony etc.) comunica cu gpsd.&lt;br /&gt;
&lt;br /&gt;
Repornim serviciul executand:&lt;br /&gt;
* service gpsd restart&lt;br /&gt;
&lt;br /&gt;
==== Testare gpsd ====&lt;br /&gt;
Testam functionarea modulului GPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# cgps -s&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqqqqqqqqqqqqqqqqSeen 21/Used 14qqk&lt;br /&gt;
&amp;amp;#32;x Time         2026-02-25T14:06:01.000Z (18)xxGNSS  S PRN  Elev  Azim   SNR Usex&lt;br /&gt;
&amp;amp;#32;x Latitude          44.43550340 N           xxGP 10    10  28.0 182.0  43.0  Y x&lt;br /&gt;
&amp;amp;#32;x Longitude         26.10252040 E           xxGP 15    15  16.0  80.0  46.0  Y x&lt;br /&gt;
&amp;amp;#32;x Alt (HAE, MSL)     128.736,     93.872  m xxGP 18    18  67.0  45.0  32.0  Y x&lt;br /&gt;
&amp;amp;#32;x Speed              0.02              km/h xxGP 23    23  57.0 144.0  37.0  Y x&lt;br /&gt;
&amp;amp;#32;x Track (true, var)     166.0,   5.8    deg xxGP 26    26  52.0 222.0  23.0  Y x&lt;br /&gt;
&amp;amp;#32;x Climb              1.92             m/min xxGP 27    27  30.0 299.0  27.0  Y x&lt;br /&gt;
&amp;amp;#32;x Status          3D DGPS FIX (9 secs)      xxGP 29    29  22.0 105.0  38.0  Y x&lt;br /&gt;
&amp;amp;#32;x Long Err  (XDOP, EPX)   0.56, +/-  2.2 m  xxSB127    40  31.0 142.0  35.0  Y x&lt;br /&gt;
&amp;amp;#32;x Lat Err   (YDOP, EPY)   0.64, +/-  2.4 m  xxSB128    41  15.0 114.0  31.0  Y x&lt;br /&gt;
&amp;amp;#32;x Alt Err   (VDOP, EPV)   1.28, +/-  4.5 m  xxGA  2   302  65.0 200.0  36.0  Y x&lt;br /&gt;
&amp;amp;#32;x 2D Err    (HDOP, CEP)   0.85, +/-  3.4 m  xxGA 25   325  19.0 157.0  34.0  Y x&lt;br /&gt;
&amp;amp;#32;x 3D Err    (PDOP, SEP)   1.54, +/-  7.4 m  xxGA 30   330  44.0 304.0  22.0  Y x&lt;br /&gt;
&amp;amp;#32;x Time Err  (TDOP)        0.90              xxGA 34   334  49.0 242.0  25.0  Y x&lt;br /&gt;
&amp;amp;#32;x Geo Err   (GDOP)        1.79              xxGA 36   336  74.0  38.0  29.0  Y x&lt;br /&gt;
&amp;amp;#32;x Speed Err (EPS)            +/- 17.5 km/h  xxGP  5     5   5.0  34.0   0.0  N x&lt;br /&gt;
&amp;amp;#32;x Track Err (EPD)         n/a               xxGP 16    16  55.0 285.0   0.0  N x&lt;br /&gt;
&amp;amp;#32;x Time offset                    -2113301 s xxGP 20    20   9.0  57.0  25.0 uN x&lt;br /&gt;
&amp;amp;#32;x Grid Square             KN34bj13          xxSB123    36  39.0 184.0  40.0  N x&lt;br /&gt;
&amp;amp;#32;x ECEF X, VX    4099907.290  m    0.020  m/sxxSB126    39  27.0 132.0   0.0  N x&lt;br /&gt;
&amp;amp;#32;x ECEF Y, VY    2008197.370  m    0.010  m/sxxSB136    49  35.0 209.0   0.0  N x&lt;br /&gt;
&amp;amp;#32;x ECEF Z, VZ    4439297.500  m    0.020  m/sxxGA  6   306   4.0  81.0  37.0  N x&lt;br /&gt;
&amp;amp;#32;mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Din coloana situata in partea dreapta observam ca sistemul nostru se conecteaza la:&lt;br /&gt;
* GP - GPS (Global Positioning System) este un sistem global de navigatie prin satelit dezvoltat de Statele Unite.&lt;br /&gt;
* GA - Galileo este sistemul european de navigatie prin satelit (GNSS), dezvoltat de Uniunea Europeana.&lt;br /&gt;
* SB - SBAS (Satellite-Based Augmentation System) este un sistem care imbunatateste precizia si fiabilitatea pozitionarii GNSS (GPS, Galileo etc.)&lt;br /&gt;
Alte sisteme de GNSS care nu sunt prezente in conexiunea nostra ar pute fi:&lt;br /&gt;
* GL - GLONASS este sistemul de navigatie prin satelit al Federatiei Ruse&lt;br /&gt;
* BD - BeiDou este sistemul de navigatie prin satelit al Chinei&lt;br /&gt;
&lt;br /&gt;
=== Configurarea serverului NTP ===&lt;br /&gt;
Acest server foloseste un modul GPS cu suport PPS pentru a furniza timp de inalta precizie, transformand sistemul intr-o sursa NTP stratum 1. In pasii urmatori configuram Chrony astfel incat sa foloseasca exclusiv GPS si PPS ca referinte de timp.&lt;br /&gt;
&lt;br /&gt;
==== Instalare Chrony ====&lt;br /&gt;
Inainte de instalare ne asiguram ca sistemul foloseste un singur serviciu NTP (Chrony va deveni sursa principala).&lt;br /&gt;
* apt install chrony&lt;br /&gt;
&lt;br /&gt;
==== Verificarea surselor NTP initiale ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# chronyc sources&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
&amp;amp;#32;===============================================================================&lt;br /&gt;
&amp;amp;#32;^* time.cloudflare.com           3   6     7     0  +3337us[ -12.3s] +/-   26ms&lt;br /&gt;
&amp;amp;#32;^+ 31.25.10.207                  3   6     7     0  -3833us[ -12.3s] +/-   93ms&lt;br /&gt;
&amp;amp;#32;^- 92-180-26-89.orangero.net     3   6     7     1  -2427us[ -12.3s] +/-   98ms&lt;br /&gt;
&amp;amp;#32;^+ ntp0.chroot.ro                2   6     7     1  -2785us[ -12.3s] +/-   52ms&lt;br /&gt;
&amp;amp;#32;&amp;lt;b&amp;gt;# chronyc tracking&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;Reference ID    : A29FC87B (time.cloudflare.com)&lt;br /&gt;
&amp;amp;#32;Stratum         : 4&lt;br /&gt;
&amp;amp;#32;Ref time (UTC)  : Wed Feb 25 14:12:12 2026&lt;br /&gt;
&amp;amp;#32;System time     : 0.000358473 seconds fast of NTP time&lt;br /&gt;
&amp;amp;#32;Last offset     : +0.000938197 seconds&lt;br /&gt;
&amp;amp;#32;RMS offset      : 0.000938197 seconds&lt;br /&gt;
&amp;amp;#32;Frequency       : 21.559 ppm fast&lt;br /&gt;
&amp;amp;#32;Residual freq   : -96.777 ppm&lt;br /&gt;
&amp;amp;#32;Skew            : 0.076 ppm&lt;br /&gt;
&amp;amp;#32;Root delay      : 0.052518558 seconds&lt;br /&gt;
&amp;amp;#32;Root dispersion : 0.001089336 seconds&lt;br /&gt;
&amp;amp;#32;Update interval : 1.7 seconds&lt;br /&gt;
&amp;amp;#32;Leap status     : Normal&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
chronyc sources afiseaza sursele NTP publice pe care sistemul le foloseste implicit, inainte de configurarea GPS‑ului.&lt;br /&gt;
chronyc tracking arata ca sistemul functioneaza momentan ca stratum 3, fiind doar un client NTP obisnuit.&lt;br /&gt;
&lt;br /&gt;
==== Editare configuratie Chrony ====&lt;br /&gt;
In aceasta etapa eliminam sursele NTP publice si configuram Chrony sa foloseasca exclusiv GPS (NMEA) si PPS ca referinte de timp. Ajustam parametrii de corectie initiala si stabilim PPS ca sursa principala, astfel incat serverul sa poata functiona ca stratum 1. Rezultatul final este un server NTP autonom, sincronizat direct din semnal GPS cu precizie sub‑microsecunda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# nano /etc/chrony/chrony.conf&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;#pool 2.debian.pool.ntp.org iburst&lt;br /&gt;
&amp;amp;#32;makestep 0.1 -1&lt;br /&gt;
&amp;amp;#32;initstepslew 1.0 GPS&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# GPS serial time (NMEA)&lt;br /&gt;
&amp;amp;#32;refclock SHM 0 delay 0.2 refid GPS poll 4 noselect&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;# PPS precise time&lt;br /&gt;
&amp;amp;#32;refclock PPS /dev/pps0 refid PPS lock GPS poll 4 prefer&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;2.debian.pool.ntp.org&amp;lt;/b&amp;gt; este serverul NTP public folosit initial de catre chrony&lt;br /&gt;
*&amp;lt;b&amp;gt;makestep&amp;lt;/b&amp;gt; permite corectii mari de timp atunci cand diferenta este prea mare pentru slew. Modificam din initialul &amp;quot;makestep 1.0 3&amp;quot; pentru a permite corectii oricand, cu limita mai mica.&lt;br /&gt;
*&amp;lt;b&amp;gt;initstepslew&amp;lt;/b&amp;gt; corecteaza timpul la boot daca diferenta fata de GPS este mai mare de 1 secunda.&lt;br /&gt;
&lt;br /&gt;
===== refclock SHM (NMEA) =====&lt;br /&gt;
NMEA este fluxul de timp citit din GPS prin gpsd și expus către Chrony printr-un segment SHM (shared memory). Acest semnal conține ora completă, dar are o întârziere naturală de aproximativ 200 ms și o precizie relativ slabă. Îl folosim cu noselect pentru că nu vrem ca NMEA să fie sursa principală de timp; rolul lui este doar să ofere context temporal pentru PPS, astfel încât impulsul PPS să poată fi „legat” corect de ora GPS.&lt;br /&gt;
&lt;br /&gt;
===== refclock PPS =====&lt;br /&gt;
PPS este semnalul hardware de precizie foarte mare (sub‑microsecundă), generat o dată pe secundă de modulul GPS. Spre deosebire de NMEA, PPS nu conține ora, ci doar impulsul exact, motiv pentru care îl „blocăm” pe GPS (lock GPS) pentru a-i oferi contextul temporal. Îl marcăm ca prefer deoarece PPS trebuie să fie sursa principală de sincronizare, fiind cea mai precisă referință disponibilă.&lt;br /&gt;
&lt;br /&gt;
Dupa salvarea noii configuratii restartam chrony&lt;br /&gt;
* service chrony restart&lt;br /&gt;
&lt;br /&gt;
==== Verificarea surselor NTP adaugate ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# chronyc sources&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
&amp;amp;#32;===============================================================================&lt;br /&gt;
&amp;amp;#32;#? GPS                           0   4   377    12   +289ms[ +289ms] +/-  129ms&lt;br /&gt;
&amp;amp;#32;#* PPS                           0   4   363    12    -13us[  -13us] +/-   57ms&lt;br /&gt;
&amp;amp;#32;&amp;lt;b&amp;gt;# chronyc tracking&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;Reference ID    : 50505300 (PPS)&lt;br /&gt;
&amp;amp;#32;Stratum         : 1&lt;br /&gt;
&amp;amp;#32;Ref time (UTC)  : Wed Feb 25 14:21:25 2026&lt;br /&gt;
&amp;amp;#32;System time     : 0.000000158 seconds slow of NTP time&lt;br /&gt;
&amp;amp;#32;Last offset     : -0.000000000 seconds&lt;br /&gt;
&amp;amp;#32;RMS offset      : 0.000000006 seconds&lt;br /&gt;
&amp;amp;#32;Frequency       : 21.246 ppm fast&lt;br /&gt;
&amp;amp;#32;Residual freq   : -0.000 ppm&lt;br /&gt;
&amp;amp;#32;Skew            : 0.159 ppm&lt;br /&gt;
&amp;amp;#32;Root delay      : 0.000000001 seconds&lt;br /&gt;
&amp;amp;#32;Root dispersion : 0.000071716 seconds&lt;br /&gt;
&amp;amp;#32;Update interval : 16.0 seconds&lt;br /&gt;
&amp;amp;#32;Leap status     : Normal&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dupa aplicarea configuratiei, Chrony incepe sa renunte la sursele NTP publice si sa foloseasca exclusiv GPS si PPS. In primele secunde, chronyc sources poate arata doar GPS, iar PPS apare abia dupa ce semnalul devine stabil. Pe masura ce PPS este validat si blocat pe GPS, chronyc tracking trece automat de la stratum 3 la stratum 1, confirmand ca serverul functioneaza acum ca o sursa autonoma de timp de inalta precizie.&lt;br /&gt;
&lt;br /&gt;
==== Configurarea serverului pentru acces LAN ====&lt;br /&gt;
&lt;br /&gt;
După ce serverul NTP funcționează corect pe GPS + PPS și a devenit stratum 1, următorul pas este să îl facem disponibil în rețeaua locală. Practic, permitem dispozitivelor din LAN să folosească acest server ca sursă principală de timp. Chrony nu răspunde implicit către rețea, așa că trebuie să activăm explicit accesul pentru subnetul nostru.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# nano /etc/chrony/chrony.conf&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;allow 192.168.1.0/24&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
După restart, Chrony ascultă pe toate interfețele pentru UDP 123, fiind gata să răspundă clienților din LAN.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# netstat -tulnp&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;Active Internet connections (only servers)&lt;br /&gt;
&amp;amp;#32;Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name&lt;br /&gt;
&amp;amp;#32;..........&lt;br /&gt;
&amp;amp;#32;udp        0      0 0.0.0.0:123     0.0.0.0:*                848/chronyd&lt;br /&gt;
&amp;amp;#32;..........&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cu aceste setari, configurarea serverului NTP este completa. Sistemul functioneaza acum ca un server stratum 1 bazat pe GPS + PPS, stabil, autonom si gata sa ofere timp precis intregii retele. Practic, in acest punct serverul este complet operational si pregatit sa serveasca LAN‑ul&lt;br /&gt;
&lt;br /&gt;
== Configurarea clientului NTP Ubuntu ==&lt;br /&gt;
Clientul NTP din retea va folosi serverul nostru stratum 1 ca sursa principala de timp. Pe Ubuntu, Chrony este usor de configurat si poate inlocui rapid pool‑urile implicite cu serverul nostru local.&lt;br /&gt;
&lt;br /&gt;
==== Instalare Chrony ====&lt;br /&gt;
Instalam Chrony pe client pentru a putea sincroniza timpul cu serverul NTP din LAN.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;# apt install chrony&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Verificare stare initiala ====&lt;br /&gt;
Inainte de modificari, clientul foloseste pool‑urile Ubuntu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# chronyc sources&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
&amp;amp;#32;===============================================================================&lt;br /&gt;
&amp;amp;#32;^- alphyn.canonical.com          2   6    17    34  -4699us[-4699us] +/-   75ms&lt;br /&gt;
&amp;amp;#32;^+ prod-ntp-5.ntp4.ps5.cano&amp;gt;     2   6    17    35  -5344us[-3553us] +/-   25ms&lt;br /&gt;
&amp;amp;#32;^* prod-ntp-4.ntp4.ps5.cano&amp;gt;     2   6    17    34  -4327us[-2535us] +/-   22ms&lt;br /&gt;
&amp;amp;#32;^- prod-ntp-3.ntp4.ps5.cano&amp;gt;     2   6    35    32  -5388us[-5388us] +/-   23ms&lt;br /&gt;
&amp;amp;#32;^+ ntp7.kernfusion.at            2   6    17    34  +8539us[  +10ms] +/-   37ms&lt;br /&gt;
&amp;amp;#32;^+ time.cloudflare.com           3   6    17    35  +1563us[+3354us] +/-   27ms&lt;br /&gt;
&amp;amp;#32;^- time.cloudflare.com           3   6    17    34   +822us[ +822us] +/-   28ms&lt;br /&gt;
&amp;amp;#32;^+ ntp7.kernfusion.at            2   6    17    35  +6762us[+8554us] +/-   38ms&lt;br /&gt;
&amp;amp;#32;&amp;lt;b&amp;gt;# chronyc tracking&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;Reference ID    : B97DBE39 (prod-ntp-4.ntp1.ps5.canonical.com)&lt;br /&gt;
&amp;amp;#32;Stratum         : 3&lt;br /&gt;
&amp;amp;#32;Ref time (UTC)  : Wed Feb 25 14:39:49 2026&lt;br /&gt;
&amp;amp;#32;System time     : 0.000061887 seconds slow of NTP time&lt;br /&gt;
&amp;amp;#32;Last offset     : +0.001791766 seconds&lt;br /&gt;
&amp;amp;#32;RMS offset      : 0.001791766 seconds&lt;br /&gt;
&amp;amp;#32;Frequency       : 18.468 ppm fast&lt;br /&gt;
&amp;amp;#32;Residual freq   : -0.238 ppm&lt;br /&gt;
&amp;amp;#32;Skew            : 0.038 ppm&lt;br /&gt;
&amp;amp;#32;Root delay      : 0.043355867 seconds&lt;br /&gt;
&amp;amp;#32;Root dispersion : 0.000964885 seconds&lt;br /&gt;
&amp;amp;#32;Update interval : 1.4 seconds&lt;br /&gt;
&amp;amp;#32;Leap status     : Normal&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Editare configuratie Chrony ====&lt;br /&gt;
Pentru ca acest client sa foloseasca serverul nostru NTP din LAN, trebuie sa inlocuim pool‑urile implicite Ubuntu cu adresa serverului local. Configuratia este simpla: comentam sursa initiala si adaugam serverul nostru stratum 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# nano /etc/chrony/chrony.conf&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;#pool ntp.ubuntu.com        iburst maxsources 4&lt;br /&gt;
&amp;amp;#32;#pool 0.ubuntu.pool.ntp.org iburst maxsources 1&lt;br /&gt;
&amp;amp;#32;#pool 1.ubuntu.pool.ntp.org iburst maxsources 1&lt;br /&gt;
&amp;amp;#32;#pool 2.ubuntu.pool.ntp.org iburst maxsources 2&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;server 192.168.1.23 iburst&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restartam chrony pentru aplicarea noilor configuratii&lt;br /&gt;
* service chrony restart&lt;br /&gt;
&lt;br /&gt;
==== Urmarirea sincronizarii ====&lt;br /&gt;
Dupa restart, clientul nu se sincronizeaza instant; are nevoie de cateva interogari pentru a valida sursa si a stabili offset‑ul. Folosim &amp;lt;b&amp;gt;watch&amp;lt;/b&amp;gt; pentru a vedea in timp real cum trece de la starea initiala, nesincronizata, la sincronizarea completa cu serverul nostru.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# watch -n1 &amp;quot;chronyc sources; echo; chronyc tracking&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
&amp;amp;#32;===============================================================================&lt;br /&gt;
&amp;amp;#32;^* 192.168.1.23                  1   6    17     9  +7517ns[  +21us] +/-  801us&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;Reference ID    : C0A80117 (192.168.1.23)&lt;br /&gt;
&amp;amp;#32;Stratum         : 2&lt;br /&gt;
&amp;amp;#32;Ref time (UTC)  : Wed Feb 25 14:44:20 2026&lt;br /&gt;
&amp;amp;#32;System time     : 0.000000002 seconds slow of NTP time&lt;br /&gt;
&amp;amp;#32;Last offset     : +0.000013356 seconds&lt;br /&gt;
&amp;amp;#32;RMS offset      : 0.000013356 seconds&lt;br /&gt;
&amp;amp;#32;Frequency       : 18.468 ppm fast&lt;br /&gt;
&amp;amp;#32;Residual freq   : -3.156 ppm&lt;br /&gt;
&amp;amp;#32;Skew            : 0.063 ppm&lt;br /&gt;
&amp;amp;#32;Root delay      : 0.000740285 seconds&lt;br /&gt;
&amp;amp;#32;Root dispersion : 0.000509834 seconds&lt;br /&gt;
&amp;amp;#32;Update interval : 2.0 seconds&lt;br /&gt;
&amp;amp;#32;Leap status     : Normal&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În aceasta faza, clientul vede serverul, dar inca nu il foloseste ca sursa activa.&lt;br /&gt;
Asteptam in acest ecran pana cand apare sincronizarea completa — se vede clar momentul in care clientul „prinde” serverul nostru.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code class=&amp;quot;mw-code mw-highlight plainlinks&amp;quot; style=&amp;quot;display:block&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;# watch -n1 &amp;quot;chronyc sources; echo; chronyc tracking&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
&amp;amp;#32;===============================================================================&lt;br /&gt;
&amp;amp;#32;^* 192.168.1.23                  1   6    17    41  +7517ns[  +21us] +/-  801us&lt;br /&gt;
&amp;amp;#32;&lt;br /&gt;
&amp;amp;#32;Reference ID    : C0A80117 (192.168.1.23)&lt;br /&gt;
&amp;amp;#32;Stratum         : 2&lt;br /&gt;
&amp;amp;#32;Ref time (UTC)  : Wed Feb 25 14:44:20 2026&lt;br /&gt;
&amp;amp;#32;System time     : 0.000000002 seconds slow of NTP time&lt;br /&gt;
&amp;amp;#32;Last offset     : +0.000013356 seconds&lt;br /&gt;
&amp;amp;#32;RMS offset      : 0.000013356 seconds&lt;br /&gt;
&amp;amp;#32;Frequency       : 18.468 ppm fast&lt;br /&gt;
&amp;amp;#32;Residual freq   : -3.156 ppm&lt;br /&gt;
&amp;amp;#32;Skew            : 0.063 ppm&lt;br /&gt;
&amp;amp;#32;Root delay      : 0.000740285 seconds&lt;br /&gt;
&amp;amp;#32;Root dispersion : 0.000645164 seconds&lt;br /&gt;
&amp;amp;#32;Update interval : 2.0 seconds&lt;br /&gt;
&amp;amp;#32;Leap status     : Normal&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum &amp;lt;b&amp;gt;chronyc sources&amp;lt;/b&amp;gt; arata serverul stratum 1 ca sursa selectata, iar &amp;lt;b&amp;gt;chronyc tracking&amp;lt;/b&amp;gt; confirma ca acest client a devenit stratum 2.&lt;br /&gt;
&lt;br /&gt;
== Concluzii ==&lt;br /&gt;
Pentru aceasta constructie am folosit un Raspberry Pi 1 deoarece ofera un consum de energie extrem de redus, zgomot electric minim si un mediu stabil, cu un singur nucleu. Aceste caracteristici il fac surprinzator de potrivit pentru sarcini de sincronizare a timpului, chiar daca modelele mai noi de Raspberry Pi ofera mai multa putere de procesare.&lt;br /&gt;
&lt;br /&gt;
Configuratia poate fi imbunatatita prin utilizarea unui Raspberry Pi echipat cu un HAT pentru SSD. Înlocuirea cardului micro‑SD elimina degradarea mediului de stocare si asigura o performanta mai constanta pe termen lung.&lt;br /&gt;
&lt;br /&gt;
Precizia poate fi imbunatatita si prin trecerea de la modulul NEO‑7M la un receptor dedicat pentru aplicatii de timing. Modulele din seria T sunt proiectate special pentru sincronizare si ofera un semnal PPS mai curat si mai stabil.&lt;br /&gt;
&lt;br /&gt;
Merita mentionat si faptul ca unele echipamente comerciale NTP sunt construite chiar pe hardware Raspberry Pi. Acest lucru face comparatia noastra si mai relevanta, deoarece platforma de baza este similara, iar diferentele de performanta provin in principal din alegerea componentelor si optimizarea firmware‑ului, nu din arhitecturi fundamental diferite.&lt;br /&gt;
&lt;br /&gt;
În comparatia cu echipamentele comerciale NTP, rezultatele au fost foarte apropiate. Unitatile dedicate au mentinut un jitter in jur de 0,2 milisecunde, in timp ce sistemul nostru a avut o medie intre 0,4 si 0,6 milisecunde — valori care se incadreaza confortabil in limitele acceptabile pentru sincronizare.&lt;br /&gt;
&lt;br /&gt;
Și rezultatele privind capacitatea de procesare au fost similare. Echipamentele comerciale au gestionat aproximativ 20 pâna la 30 de mii de cereri NTP pe minut, in timp ce sistemul nostru a sustinut intre 15 si 18 mii, demonstrând ca o solutie cu cost redus poate atinge performante apropiate de cele ale unui appliance dedicat.&lt;br /&gt;
&lt;br /&gt;
Per ansamblu, acest proiect arata ca, prin alegeri hardware bine gândite si o configurare corecta, un sistem compact si accesibil poate oferi o acuratete a timpului foarte apropiata de cea a echipamentelor NTP profesionale.&lt;br /&gt;
&lt;br /&gt;
Combinatia dintre Chrony si PPS bazat pe GNSS ofera o sursa de timp stabila si predictibila, potrivita pentru o gama larga de aplicatii.&lt;br /&gt;
Cu imbunatatiri incrementale, aceasta platforma poate fi rafinata si mai mult si adaptata unor medii de sincronizare mai pretentioase.&lt;br /&gt;
&lt;br /&gt;
== Building a GPS based Raspberry Pi NTP Server (NEO‑7M + PPS) ==&lt;br /&gt;
{{#ev:youtube|eqImO90rM4o}}&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
	</entry>
</feed>