| Beide Seiten der vorigen Revision
Vorhergehende Überarbeitung
Nächste Überarbeitung
|
Vorhergehende Überarbeitung
|
haproxy [2025/10/27 18:20] jango [Kompilieren] |
haproxy [2025/10/29 09:24] (aktuell) jango [ACL] |
| |
| =====Installation===== | =====Installation===== |
| | |
| | * Service Ubuntu: /lib/systemd/system/haproxy.service |
| | * Service RHEL: /etc/systemd/system/haproxy.service |
| |
| <box red>In den meissten Distributionen installiert der Paketmanager eine veraltete Version (1.8)</box> | <box red>In den meissten Distributionen installiert der Paketmanager eine veraltete Version (1.8)</box> |
| |
| <code> | <code> |
| sudo dnf install gcc pcre-devel tar make wget openssl-devel -y | sudo dnf install gcc pcre-devel tar make wget openssl-devel systemd-devel -y |
| |
| wget http://www.haproxy.org/download/2.8/src/haproxy-2.8.3.tar.gz | wget http://www.haproxy.org/download/2.8/src/haproxy-2.8.3.tar.gz |
| make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1 USE_SYSTEMD=1 | make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1 USE_SYSTEMD=1 |
| sudo make install | sudo make install |
| | |
| | sudo cp haproxy /usr/sbin/haproxy |
| | sudo mkdir -p /etc/haproxy |
| | |
| | # Wahrscheinlich nicht funktional, besser from scratch erstellen |
| | # cp examples/basic-config-edge.cfg /etc/haproxy/haproxy.cfg |
| </code> | </code> |
| |
| <box orange>dnf install systemd-devel</box> | Create a service file /etc/systemd/system/haproxy.service |
| | |
| | <code> |
| | [Unit] |
| | Description=HAProxy Load Balancer |
| | After=network.target |
| | |
| | [Service] |
| | ExecStart=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -Ws |
| | ExecReload=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q |
| | ExecReload=/bin/kill -USR2 $MAINPID |
| | Restart=always |
| | User=root |
| | Group=root |
| | |
| | [Install] |
| | WantedBy=multi-user.target |
| | </code> |
| | |
| | <code> |
| | sudo systemctl daemon-reexec |
| | sudo systemctl daemon-reload |
| | sudo systemctl enable haproxy |
| | sudo systemctl start haproxy |
| | </code> |
| | |
| | <code> |
| | # Fix not needed |
| | setcap 'cap_net_bind_service=+ep' /usr/sbin/haproxy |
| | </code> |
| | ====Manueller Start==== |
| | |
| | <code> |
| | haproxy -f /etc/haproxy/haproxy.cfg [-Ws] |
| | haproxy -db -f /etc/haproxy/haproxy.cfg |
| | </code> |
| =====Konfiguration===== | =====Konfiguration===== |
| |
| See also [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/|HAProxy configuration tutorials]] | See also [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/|HAProxy configuration tutorials]] |
| ====Global==== | ====Global==== |
| | |
| | * [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/configuration-basics/global/|HAProxy Globals]] |
| | * [[https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#3|Keywords in global section]] |
| |
| Der globale Abschnitt befindet sich oben in Ihrer Konfigurationsdatei. Er definiert Anweisungen auf Prozessebene, beispielsweise die maximale Anzahl zulässiger Verbindungen, den Speicherort der Protokolle und den Benutzer und die Gruppe, unter der der Prozess ausgeführt werden soll. Das folgende Beispiel zeigt nur einige der verfügbaren Optionen: | Der globale Abschnitt befindet sich oben in Ihrer Konfigurationsdatei. Er definiert Anweisungen auf Prozessebene, beispielsweise die maximale Anzahl zulässiger Verbindungen, den Speicherort der Protokolle und den Benutzer und die Gruppe, unter der der Prozess ausgeführt werden soll. Das folgende Beispiel zeigt nur einige der verfügbaren Optionen: |
| |
| ====Defaults==== | ====Defaults==== |
| | |
| | * [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/configuration-basics/defaults/|HAProxy Defaults]] |
| |
| In einem Abschnitt "defaults" werden allgemeine Einstellungen gespeichert, die von den nachfolgenden Frontend- und Backend-Abschnitten übernommen werden. Er kann auch lange Konfigurationen durch Reduzierung doppelter Zeilen verkürzen. Beispiel für eine Standardkonfiguration: Durch Hinzufügen von Standardeinstellungen zur Konfiguration können Sie Einstellungen definieren, die gegebenenfalls von allen darunter liegenden Abschnitten übernommen werden. Beispielsweise ist "mode" sowohl auf ein Frontend als auch auf ein Backend anwendbar, "balance" hingegen nur auf Backends. Nicht alle Anweisungen können in "defaults" aufgenommen werden, z.B. die Zeilen "bind" und "server". | In einem Abschnitt "defaults" werden allgemeine Einstellungen gespeichert, die von den nachfolgenden Frontend- und Backend-Abschnitten übernommen werden. Er kann auch lange Konfigurationen durch Reduzierung doppelter Zeilen verkürzen. Beispiel für eine Standardkonfiguration: Durch Hinzufügen von Standardeinstellungen zur Konfiguration können Sie Einstellungen definieren, die gegebenenfalls von allen darunter liegenden Abschnitten übernommen werden. Beispielsweise ist "mode" sowohl auf ein Frontend als auch auf ein Backend anwendbar, "balance" hingegen nur auf Backends. Nicht alle Anweisungen können in "defaults" aufgenommen werden, z.B. die Zeilen "bind" und "server". |
| ====Frontend==== | ====Frontend==== |
| |
| Ein "frontend" Abschnitt definiert die IP-Adressen und Ports, mit denen Clients eine Verbindung herstellen können. Sie können beliebig viele Frontend-Abschnitte hinzufügen, um verschiedene Websites oder Anwendungen im Internet verfügbar zu machen. | Ein "frontend" Abschnitt ([[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/configuration-basics/frontends/|HAProxy Frontend]]) definiert die IP-Adressen und Ports, mit denen Clients eine Verbindung herstellen können. Sie können beliebig viele Frontend-Abschnitte hinzufügen, um verschiedene Websites oder Anwendungen im Internet verfügbar zu machen. |
| |
| <code> | <code> |
| ====Backend==== | ====Backend==== |
| |
| Ein "backend" Abschnitt definiert einen Serverpool, an den der Load Balancer Anfragen weiterleitet. Sie können beliebig viele Backend-Abschnitte hinzufügen. Jedes Backend-Schlüsselwort wird durch eine Bezeichnung, z. B. "web_servers", von anderen unterschieden. | Ein "backend" Abschnitt ([[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/configuration-basics/backends/|HAProxy Backend]]) definiert einen Serverpool, an den der Load Balancer Anfragen weiterleitet. Sie können beliebig viele Backend-Abschnitte hinzufügen. Jedes Backend-Schlüsselwort wird durch eine Bezeichnung, z. B. "web_servers", von anderen unterschieden. |
| |
| <code> | <code> |
| |
| Siehe [[https://serverfault.com/questions/1193486/how-to-configure-health-check-for-postfix-behind-haproxy-when-using-the-proxy-pr]] | Siehe [[https://serverfault.com/questions/1193486/how-to-configure-health-check-for-postfix-behind-haproxy-when-using-the-proxy-pr]] |
| | =====ACL===== |
| | |
| | ACL geben true oder false zurück. Die ACL kann dann in jeder Zeile angewendet werden die ein conditional if or unless statement abfragt. Siehe [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/custom-rules/acls/|ACL Dokumentation]] |
| | |
| | <code> |
| | frontend www |
| | bind :80 |
| | acl images_url path_beg -i /images/ |
| | use_backend static_assets if images_url |
| | </code> |
| | |
| | =====Fetches===== |
| | |
| | [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/custom-rules/fetches/|Fetch Dokumentation]] |
| | |
| | Eine Funktion, die Informationen über die aktuelle Anfrage, die aktuelle Antwort, die Verbindung oder den internen Zustand des Load Balancers zurückgibt. |
| | |
| | <code> |
| | frontend www |
| | bind :80 |
| | http-request deny if { path /api/bad/ } |
| | </code> |
| | |
| | <code> |
| | frontend www |
| | bind :80 |
| | http-request set-var(txn.http_version) req.ver |
| | http-response add-header Via "%[var(txn.http_version)] %[hostname]" |
| | </code> |
| | =====Persistence===== |
| | |
| | ====Stick Table==== |
| | |
| | Siehe [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/custom-rules/stick-tables/|Stick Table Dokumentation]] |
| | |
| | <code> |
| | # Track src IP, max 1Mill entries expire after 30m |
| | backend app_servers |
| | stick-table type ip size 1m expire 30m |
| | stick on src |
| | server app1 192.168.1.10:80 check |
| | server app2 192.168.1.11:80 check |
| | </code> |
| | |
| =====Links===== | =====Links===== |
| |
| | * [[https://docs.haproxy.org/|Offizielle Dokumentation]] |
| * [[https://discourse.haproxy.org/t/haproxy-email-preserve-client-ip/5699/4]] | * [[https://discourse.haproxy.org/t/haproxy-email-preserve-client-ip/5699/4]] |
| * [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/client-ip-preservation/transparent-proxying/]] | * [[https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/client-ip-preservation/transparent-proxying/]] |
| * [[https://www.linuxbabe.com/mail-server/smtp-imap-proxy-with-haproxy-debian-ubuntu-centos]] | * [[https://www.linuxbabe.com/mail-server/smtp-imap-proxy-with-haproxy-debian-ubuntu-centos]] |
| * [[https://www.haproxy.com/blog/efficient-smtp-relay-infrastructure-with-postfix-and-load-balancers|Untested]] | * [[https://www.haproxy.com/blog/efficient-smtp-relay-infrastructure-with-postfix-and-load-balancers|Untested]] |