HAProxy
Co je HAProxy a k čemu slouží
HAProxy je software, který funguje jako reverzní proxy server. Reverzní proxy server je prostředník mezi uživateli a vašimi servery. HAProxy přesměruje požadavky uživatelů na různé servery podle nastavených pravidel. Tento proces se nazývá load balancing, neboli vyvažování zátěže. Load balancing zajišťuje, že žádný server není přetížený a že je zátěž rovnoměrně rozdělena mezi všechny dostupné servery.
HAProxy je velmi užitečné například v systémech, které používají Docker. Docker umožňuje spouštět mnoho aplikací na jednom serveru, a každá aplikace má svůj vlastní port. HAProxy může přesměrovat všechny tyto porty na jeden port (například 443, který se používá pro zabezpečené spojení HTTPS), a spravovat přístup k těmto aplikacím. Kromě toho může HAProxy zabezpečit provoz pomocí různých pravidel a umožnit přihlášení na webové stránky, pokud to aplikace sama nenabízí.
Instalace
Pro instalaci HAProxy na různých distribucích Linuxu použijte následující příkazy:
pacman -S haproxy # Pro Arch-based distribuce
dnf install haproxy # Pro RHEL-based distribuce
apt install haproxy # Pro Debian-based distribuce
Konfigurační soubor HAProxy najdete v /etc/haproxy/haproxy.cfg
.
Konfigurace
Základní sekce
Userlist - Seznam uživatelů pro přihlášení na stránku
Userlist je seznam uživatelů, kteří se mohou přihlásit na webovou stránku.
userlist [nazev listu]
user [username] password [hashed heslo]
Frontend - Co vidí uživatel
Frontend sekce obsahuje pravidla pro to, co vidí uživatel, když přistupuje na vaši stránku.
frontend main
bind [public IP]:80
bind [public IP]:443 ssl crt [složka s certifikáty]
acl is-blocked-ip src -f [soubor s blokovanými IP]
http-request deny if is-blocked-ip # Pravidlo pro blokování IP
http-request redirect scheme https unless { ssl_fc } # Vynucení SSL
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
acl ACL_alpine hdr(host) -i alpine.slamaci.eu # ACL pro jednu URL
acl is_log_request path_end .log # Blokování otevírání .log souborů
http-request deny if is_log_request !ACL_alpine # Zablokuje .log pokud není ACL alpine
default_backend Apache # Základní backend
Backend - Zpracování na serveru
Backend sekce obsahuje pravidla pro to, jak HAProxy přesměruje požadavky na vaše servery.
backend Apache # Název backendu
balance roundrobin # Styl vyvažování zátěže
option forwardfor # Zajištění viditelnosti původní IP v HTTP logech
http-request set-header X-Real-IP %[src]
server apache 127.0.0.1:80 check # IP a port, kde běží služba
backend dashy
balance roundrobin
acl is_internal src [Vaše IP] # Definice vaší IP
acl is_authenticated http_auth(AuthUsers) # Žádost o přihlášení na základě userlistu
http-request auth realm MySite if !is_internal !is_authenticated # Pokud uživatel je na povolené IP, nemusí se přihlašovat
server dashy 127.0.0.1:101 check # IP a port, kde běží služba
Certifikáty
Skript pro generování certifikátu pro wildcard doménu a jeho naformátování pro HAProxy:
domena="$1"
sudo certbot certonly --manual --preferred-challenges=dns --email radek@slamaci.eu --server https://acme-v02.api.letsencrypt.org/directory --domain $domena
cat /etc/letsencrypt/live/$domena/fullchain.pem /etc/letsencrypt/live/$domena/privkey.pem > /etc/certs/$domena.pem
systemctl restart haproxy
Tento skript vytvoří certifikát pro zadanou doménu a spojí potřebné soubory do jednoho, který je pak použitelný v HAProxy. Certifikát zajišťuje zabezpečenou komunikaci mezi uživateli a vaším serverem.