Marco Burmeister
private Homepage
HAProxy ist ein Load Balancer, der TCP und HTTP/HTTPS Datenverkehr als Load Balancer oder Reverse-Proxy behandeln kann.
Er ist als OpenSource verfügbar. Es gibt aber auch professionelle Unterstützung bei Bedarf.
Auf dieser Seite wird es um konkrete Anwendungsfälle in dem Umfeld gehen, an denen ich mal gearbeitet hatte.
Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Die Seite ist in die folgenden Bereiche eingeteilt:
In diesem Abschnitt werde ich ein paar allgemeine Beschreibungen / Hinweise zum HAProxy zentral erfassen.
haproxy.cfg
liegt.haproxy.cfg
heißt und in /etc/haproxy
liegt.haproxy -c -V -f /etc/haproxy/haproxy.cfg
(C für check, V für verbose und f für die Datei)
HAProxy als Reverse Proxy für RDP Zugriffe
# Windows Server
frontend [Identifikationsbezeichnung-Frontend]
bind *:[Port auf Server auf dem HAProxy läuft]
mode tcp
option tcplog
default_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
mode tcp
option tcpka
balance leastconn
server [Bezeichner für Servername] [IP-Addresse / DNS Name]:[Port] check weight 1
# Windows Server
frontend [Identifikationsbezeichnung-Frontend]
bind *:[Port auf Server auf dem HAProxy läuft]
mode tcp
option tcplog
default_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
mode tcp
option tcpka
balance leastconn
server [Bezeichner für Servername] ✂
[IP-Addresse / DNS Name]:[Port] check weight 1
# Windows Server
frontend front_msosrdp1
bind *:14000
mode tcp
option tcplog
default_backend back_msosrdp1
# Windows Server
backend back_msosrdp1
mode tcp
option tcpka
balance leastconn
server meinserver 192.168.10.10:3389 check weight 1
HAProxy als Reverse Proxy für MS SQL Server Zugriffe
Hinweis:
Die hier gezeigte Lösung hat im Augenblick noch ein technisches Problem. Wird bei einer laufenden Verbindung zu einem SQL Server aus einem SQL Server
Management Studio heraus z.B. der Wizard für die Availability Group Einrichtung gestartet, so wird das entsprechende Fenster leider nicht zurückgesendet.
Diese Funktion muss leider via T-SQL eingerichtet werden.
frontend [Identifikationsbezeichnung-Frontend]
bind :[Port auf Server auf dem HAProxy läuft]
mode tcp
# option forwardfor - nur HTTP
option tcplog
option tcpka
use_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
mode tcp
server [Bezeichner für Servername] [IP-Addresse / DNS Name]:[Port] check
frontend [Identifikationsbezeichnung-Frontend]
bind :[Port auf Server auf dem HAProxy läuft]
mode tcp
# option forwardfor - nur HTTP
option tcplog
option tcpka
use_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
mode tcp
server [Bezeichner für Servername] ✂
[IP-Addresse / DNS Name]:[Port] check
frontend front_mssqlsrv1
bind :14001
mode tcp
# option forwardfor - nur HTTP
option tcplog
option tcpka
use_backend back_mssqlsrv1
backend back_mssqlsrv1
mode tcp
server meinsqlserver1 192.168.10.10.:1433 check
HAProxy als Load Balancer für MariaDB/MySQL Zugriffe
# MariaDB Galera Cluster
frontend [Identifikationsbezeichnung-Frontend]
bind *:[Port auf Server auf dem HAProxy läuft]
mode tcp
option tcplog
default_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
mode tcp
option tcpka
balance leastconn
server [Bezeichner für Servername] [IP-Addresse / DNS Name]:[Port] check weight 1
server [Bezeichner für Servername] [IP-Addresse / DNS Name]:[Port] check weight 1
server [Bezeichner für Servername] [IP-Addresse / DNS Name]:[Port] check weight 1
# MariaDB Galera Cluster
frontend [Identifikationsbezeichnung-Frontend]
bind *:[Port auf Server auf dem HAProxy läuft]
mode tcp
option tcplog
default_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
mode tcp
option tcpka
balance leastconn
server [Bezeichner für Servername] ✂
[IP-Addresse / DNS Name]:[Port] check weight 1
server [Bezeichner für Servername] ✂
[IP-Addresse / DNS Name]:[Port] check weight 1
server [Bezeichner für Servername] ✂
[IP-Addresse / DNS Name]:[Port] check weight 1
# MariaDB Galera Cluster
frontend front_mariadbgal1
bind *:14002
mode tcp
option tcplog
default_backend back_mariadbgal1
backend back_mariadbgal1
mode tcp
option tcpka
balance leastconn
server dbsrv1 192.168.10.11:3306 check weight 1
server dbsrv2 192.168.10.12:3306 check weight 1
server dbsrv3 192.168.10.13:3306 check weight 1
HAProxy als Reverse Proxy für HTTP und HTTPS Zugriffe
haproxy.cfg
vom HAProxy liegt.
haproxy.cfg
vom HAProxy in /etc/haproxy
.
root
auf dem Serer mit HAProxy werdenmkdir /etc/haproxy/mycerts
cd /etc/haproxy/mycerts
openssl genrsa -out haproxy.key 2048
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out haproxy.key
openssl genrsa -out haproxy.key 2048
openssl genpkey -algorithm RSA ✂
-pkeyopt rsa_keygen_bits:2048 ✂
-out haproxy.key
openssl req -new -key haproxy.key -out haproxy.csr
openssl x509 -req -days 365 -in haproxy.csr -signkey haproxy.key -out haproxy.crt
cat haproxy.crt haproxy.key > haproxy.pem
frontend [Identifikationsbezeichnung-Frontend]
bind *:80
bind *:[Port auf Server auf dem HAProxy läuft] ssl crt [Pfad und Dateiname self signed certificate]
http-request redirect scheme https if !{ ssl_fc }
mode http
default_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
mode http
balance roundrobin
option forwardfor
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server [Bezeichner für Servername] [IP-Addresse / DNS Name]:[Port] check-ssl ssl verify none
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
frontend [Identifikationsbezeichnung-Frontend]
bind *:80
bind *:[Port auf Server auf dem HAProxy läuft] ✂
ssl crt [Pfad und Dateiname self signed certificate]
http-request redirect scheme https ✂
if !{ ssl_fc }
mode http
default_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
mode http
balance roundrobin
option forwardfor
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server [Bezeichner für Servername] ✂
[IP-Addresse / DNS Name]:[Port] check-ssl ✂
ssl verify none
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto ✂
https if { ssl_fc }
# HTTPS Forward
frontend front_webserver1
bind *:80
bind *:14005 ssl crt /etc/haproxy/mycerts/haproxy.pem
http-request redirect scheme https if !{ ssl_fc }
mode http
default_backend back_webserver1
backend back_webserver1
mode http
balance roundrobin
option forwardfor
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server meinwebserver1 192.168.10.14:443 check-ssl ssl verify none
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
# HTTPS Forward
frontend front_webserver1
bind *:80
bind *:14005 ssl crt /etc/haproxy/mycerts/haproxy.pem
http-request redirect scheme https ✂
if !{ ssl_fc }
mode http
default_backend back_webserver1
backend back_webserver1
mode http
balance roundrobin
option forwardfor
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server meinwebserver1 192.168.10.14:443 check-ssl ✂
ssl verify none
http-request set-header X-Forwarded-Port ✂
%[dst_port]
http-request add-header X-Forwarded-Proto ✂
https if { ssl_fc }
HAProxy als TCP Forwarder für https-Zugriffe
haproxy.cfg
vom HAProxy liegt.
haproxy.cfg
vom HAProxy in /etc/haproxy
.
root
auf dem Serer mit HAProxy werdenmkdir /etc/haproxy/mycerts
cd /etc/haproxy/mycerts
openssl genrsa -out haproxy.key 2048
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out haproxy.key
openssl genrsa -out haproxy.key 2048
openssl genpkey -algorithm RSA ✂
-pkeyopt rsa_keygen_bits:2048 ✂
-out haproxy.key
openssl req -new -key haproxy.key -out haproxy.csr
openssl x509 -req -days 365 -in haproxy.csr -signkey haproxy.key -out haproxy.crt
cat haproxy.crt haproxy.key > haproxy.pem
frontend [Identifikationsbezeichnung-Frontend]
bind *:10443 ssl crt /etc/haproxy/mycerts/haproxy.pem
mode tcp
default_backend [Identifikationsbezeichnung-Backend]
backend [Identifikationsbezeichnung-Backend]
server [Bezeichner für Servername] [IP-Addresse / DNS Name]:[Port] check ssl verify none
frontend [Identifikationsbezeichnung-Frontend]
bind *:10443 ssl crt ✂
/etc/haproxy/mycerts/haproxy.pem
mode tcp
default_backend [ID-Backend]
backend [ID-Backend]
server [Bezeichner für Servername] ✂
[IP-Addresse / DNS Name]:[Port] ✂
check ssl verify none
# HTTPS Forward
frontend front_webserver1
bind *:10443 ssl crt /etc/haproxy/mycerts/haproxy.pem
mode tcp
default_backend back_webserver1
backend back_webserver1
server meinwebserver1 192.168.10.14:443 check ssl verify none
# HTTPS Forward
frontend front_webserver1
bind *:10443 ssl crt ✂
/etc/haproxy/mycerts/haproxy.pem
mode tcp
default_backend back_webserver1
backend back_webserver1
server meinwebserver1 192.168.10.14:443 check ✂
ssl verify none
Wenn die Verbindung fehlschlägt (HAProxy Fehlermeldung: "Server xxx is DOWN, reason: Layer 4 timeout), so sollte die "check
"
Angabe/Funktion hinter der Kombination <ServerIP>:<Port>
entfernt werden.
In diesem Abschnitt stelle ich aufgetretene Fehler und deren mögliche Lösung zusammen.
sudo semanage port -a -t http_port_t -p tcp 10443
sudo semanage port -a -t http_port_t ✂
-p tcp 10443
Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.
dhparams.pem
Datei via openssl
zu erstellen und einzubinden.
dhparams.pem
sudo openssl dhparam -out /etc/haproxy/dhparams.pem 2048
sudo openssl dhparam -out ✂
/etc/haproxy/dhparams.pem 2048
dhparams.pem
in Konfiguration
vi
und ergänzen eine Zeile:sudo vi /etc/haproxy/haproxy.cfg
ssl-default-server-ciphers PROFILE=SYSTEM
eine neue Zeile:
ssl-dh-param-file /etc/haproxy/dhparams.pem
ssl-dh-param-file ✂
/etc/haproxy/dhparams.pem
HAProxy
systemctl
.
Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Für den Inhalt von Internet-Seiten, auf die von dieser Seite verwiesen wird, übernehme ich keine Verantwortung!
Marco Burmeister, Copyright © 2022 - 2024
zuletzt geändert: 2024-08-11
URL: https://www.marco-burmeister.de/helferlein/de_haproxy.html
Impressum