Editing
HAProxy
(section)
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== HAProxy cu SSL Passthrough și Mapări Dinamice Layer 7 == [[File:haproxyLayer7.png|782x616px|none|HAProxy Layer7]] Acest scenariu avansat descrie configurarea HAProxy ca un "Router Layer 7 (Content-Based Switch)". 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). === Configurare Frontend-uri și Backend-uri Modulare === Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`). ==== Configurare Frontend ==== Fișierele sunt stocate modular în directorul inclus secundar (`conf.d/`). <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> # nano /etc/haproxy/conf.d/websites.cfg    # FRONTEND HTTP - Port 80 (Cu suport ACME Challenge integrat dinamic)    frontend fe_http     bind *:80     mode http       # Extrage stringul curat al domeniului (taie portul :80 trimis de unele browsere)     http-request set-var(txn.backend) req.hdr(host),field(1,:),lower,map(/etc/haproxy/maps/web-http.map)       # Detecție trafic ACME Challenge (Let's Encrypt / ISPConfig)     acl is_acme path_beg /.well-known/acme-challenge/       # Securitate: Blocare 403 dacă domeniul nu există în map ȘI nu este o cerere ACME     http-request deny deny_status 403 if ! { var(txn.backend) -m found } !is_acme       # Rutare: Trimite către backend-ul identificat în map     use_backend %[var(txn.backend)] if { var(txn.backend) -m found }       # Fallback obligatoriu pentru procesarea automată a certificatelor ACME generate în ISPConfig     default_backend be_vm1_http    # FRONTEND HTTPS - Port 443 (SSL Passthrough transparent pe bază de SNI)    frontend fe_https     bind *:443     mode tcp       # Inspectează pachetele inițiale TCP pentru a citi header-ul TLS nesecurizat     tcp-request inspect-delay 5s     tcp-request content accept if { req.ssl_hello_type 1 }       # Rutare Layer 4 bazată pe SNI-ul extras din handshake-ul TLS potrivit în map-ul HTTPS     use_backend %[req.ssl_sni,lower,map(/etc/haproxy/maps/web-https.map)]       # Dacă domeniul accesat prin TLS nu există în map, conexiunea este respinsă direct     default_backend be_https_deny   </code> ==== Configurare Backend ==== <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> # nano /etc/haproxy/conf.d/websites.cfg    # DEFINIRE BACKEND-URI SERVERE VIRTUALE    # BACKEND-URI VM1 (192.168.14.11)  backend be_vm1_http     mode http     server vm1_web 192.168.14.11:80 check    backend be_vm1_https     mode tcp     server vm1_ssl 192.168.14.11:443 check    # BACKEND-URI VM2 (192.168.14.22)  backend be_vm2_http     mode http     server vm2_web 192.168.14.22:80 check    backend be_vm2_https     mode tcp     server vm2_ssl 192.168.14.22:443 check    # BACKEND-URI VM3 (192.168.14.33)  backend be_vm3_http     mode http     server vm3_web 192.168.14.33:80 check    backend be_vm3_https     mode tcp     server vm3_ssl 192.168.14.33:443 check    # BACKEND SIGURANȚĂ (DENY)  backend be_https_deny     mode tcp </code> === Structură Fișiere Mapare Dinamică === 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). ==== Fișier Mapare HTTP (Port 80) ==== <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> # nano /etc/haproxy/maps/web-http.map  # VM1 - 192.168.1.11  domeniu.eu be_vm1_http  sub.domeniu.eu be_vm1_http  # VM2 - 192.168.1.22  domeniu.com be_vm2_http  sub.domeniu.com be_vm2_http  # VM3 - 192.168.1.33  domeniu.ro be_vm3_http  sub.domeniu.ro be_vm3_http </code> ==== Fișier Mapare HTTPS (Port 443) ==== <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> # nano /etc/haproxy/maps/web-https.map  # VM1 - 192.168.1.11  domeniu.eu be_vm1_https  sub.domeniu.eu be_vm1_https  # VM2 - 192.168.1.22  domeniu.com be_vm2_https  sub.domeniu.com be_vm2_https  # VM3 - 192.168.1.33  domeniu.ro be_vm3_https  sub.domeniu.ro be_vm3_https </code> === Integrare Modulară în Systemd (conf.d) === Pentru ca HAProxy să încarce automat toate fișierele de configurare din directorul secundar <tt>conf.d/</tt>, trebuie modificat scriptul de pornire al serviciului în Systemd. ==== Modificarea fișierului de serviciu ==== Caută linia implicită de pornire și comenteaz-o Adaugă direct sub ea noua instrucțiune care include ambele căi de configurare ("haproxy.cfg" și directorul "conf.d/"). <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> # nano /usr/lib/systemd/system/haproxy.service    # ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS  ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /run/haproxy.pid </code> ==== Reîncărcarea și Aplicarea Modificărilor ==== <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> # systemctl daemon-reload  # systemctl restart haproxy </code> ==== Managementul Configurării ==== 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). <code class="mw-code mw-highlight plainlinks" style="display:block"><!-- --> # haproxy -c -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ <span style="font-style: italic;color:#4d4d4d"># Validarea sintaxei</span>  # systemctl reload haproxy <span style="font-style: italic;color:#4d4d4d"># Reîncărcarea serviciului cu noua configurare</span> </code>
Summary:
Please note that all contributions to Linux Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Linux Wiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
Edit source
View history
More
Navigation
Main page
Aplicatii Linux
UrBackup
rSyslog
KeepAlived
HAProxy
USB over IP
Pi-hole
DHCP
BIND DNS
Hardware Linux
Adaugare Disk
Extindere Disk
Docker
Instalare Docker CE
Portainer
Container UrBackup
Container PiHole
Raspberry Pi
NTP Server
Snippets
History Command
Access Control List
Troubleshooting
Colectare Info
CPU
RAM
Disk
Tools
What links here
Related changes
Special pages
Page information