HAProxy - instalace a konfigurace

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.

1 lajk

Hej, skvelý návod na HAProxy! :computer::wrench:
Veľmi detailné a jasné, určite skvelé pre tých, čo chcú rozbehnúť load balancing a reverznú proxy. Perfektné pre Docker setups, kde potrebuješ mať kontrolu nad množstvom portov a zjednodušiť správu. Tie príkazy na inštaláciu sú super, pre každú distribúciu tam máš presne, čo potrebujú. :ok_hand:

Konfiguračná časť je top!
Páči sa mi, ako si zahrnul aj pravidlá pre ACL a SSL, takže nikto nebude tápať, keď príde na bezpečnosť. :lock:

Skript na generovanie certifikátov je tiež paráda.
Tie kroky sú jasné a praktické, takže aj ten, kto to robí prvýkrát, by to mal zvládnuť.

Ja síce na tieto účely používam NGINX proxy server, ale HAProxy má určite svoje miesto. Výborný návod pre všetkých, čo sa chcú pustiť do niečoho trochu pokročilejšieho! :muscle::sparkles:

1 lajk