Instalacija HAProxy-a
Instalacija Haproxy-a može se razlikovati ovisno o operativnom sustavu koji koristite. Evo koraka za instalaciju Haproxy-a na nekim od popularnih operativnih sustava:
Ubuntu / Debian:
Koristite sljedeće naredbe u terminalu:
-
Ažuriranje paketnih izvora:
sudo apt-get update
-
Instalacija Haproxy-a:
sudo apt-get install haproxy
-
Potvrda instalacije:
haproxy -v
CentOS / RHEL:
-
Instalacija EPEL repozitorija (ako već nije instaliran):
sudo yum install epel-release
-
Instalacija Haproxy-a:
sudo yum install haproxy
-
Potvrda instalacije:
haproxy -v
Konfiguracija:
Nakon instalacije, konfiguracijski datoteku možete pronaći obično na putanji /etc/haproxy/haproxy.cfg
. Otvorite tu datoteku koristeći uređivač teksta (npr. nano
, vim
, gedit
) i prilagodite konfiguraciju prema vašim potrebama.
Nakon što izmijenite konfiguracijsku datoteku, sačuvajte promjene i pokrenite Haproxy servis. Ovisno o distribuciji Linuxa, naredbe za upravljanje servisom mogu biti različite:
-
Za Ubuntu / Debian:
sudo systemctl start haproxy
sudo systemctl enable haproxy # Ovo osigurava da se Haproxy pokrene pri pokretanju sustava
-
Za CentOS / RHEL:
sudo systemctl start haproxy
sudo systemctl enable haproxy
Nakon ovih koraka, Haproxy bi trebao biti uspješno instaliran i pokrenut na vašem sustavu. Možete pristupiti konfiguracijskoj datoteci kako biste prilagodili postavke prema vašim zahtjevima i potrebama aplikacije koju želite balansirati.
HAProxy sa više domena
Host tabela na haproxy:
/etc/hosts
127.0.0.1 localhost 127.0.1.1 router | |
140.82.58.111 server1 | |
95.179.179.5 server2 | |
199.247.28.183 server3 | |
# The following lines are desirable for IPv6 capable hosts | |
::1 localhost ip6-localhost ip6-loopback | |
ff02::1 ip6-allnodes | |
ff02::2 ip6-allrouters |
global | |
log /dev/log local0 | |
log /dev/log local1 notice | |
chroot /var/lib/haproxy | |
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners | |
stats timeout 30s | |
user haproxy | |
group haproxy | |
daemon | |
defaults | |
log global | |
mode http | |
option httplog | |
option dontlognull | |
timeout connect 10s | |
timeout client 60s | |
timeout server 60s | |
errorfile 400 /etc/haproxy/errors/400.http | |
errorfile 403 /etc/haproxy/errors/403.http | |
errorfile 408 /etc/haproxy/errors/408.http | |
errorfile 500 /etc/haproxy/errors/500.http | |
errorfile 502 /etc/haproxy/errors/502.http | |
errorfile 503 /etc/haproxy/errors/503.http | |
errorfile 504 /etc/haproxy/errors/504.http | |
frontend http_in | |
mode http | |
option httplog | |
bind *:80 | |
option forwardfor | |
acl host_server1 hdr(host) -i entroinfo.xyz | |
acl host_server1 hdr(host) -i www.entroinfo.xyz | |
acl host_server2 hdr(host) -i sub1.kubehttps.xyz | |
acl host_server3 hdr(host) -i sub2.kubehttps.xyz | |
use_backend http_server1 if host_server1 | |
use_backend http_server2 if host_server2 | |
use_backend http_server3 if host_server3 | |
backend http_server1 | |
mode http | |
option httplog | |
option forwardfor | |
server server1 server1:80 | |
backend http_server2 | |
mode http | |
option httplog | |
option forwardfor | |
server server2 server2:80 | |
backend http_server3 | |
mode http | |
option httplog | |
option forwardfor | |
server server3 server3:80 | |
frontend https_in | |
mode tcp | |
option tcplog | |
bind *:443 | |
acl tls req.ssl_hello_type 1 | |
tcp-request inspect-delay 5s | |
tcp-request content accept if tls | |
acl host_server1 req.ssl_sni -i entroinfo.xyz | |
acl host_server1 req.ssl_sni -i www.entroinfo.xyz | |
acl host_server2 req.ssl_sni -i sub1.kubehttps.xyz | |
acl host_server3 req.ssl_sni -i sub2.kubehttps.xyz | |
use_backend https_server1 if host_server1 | |
use_backend https_server2 if host_server2 | |
use_backend https_server3 if host_server3 | |
backend https_server1 | |
mode tcp | |
option tcplog | |
option ssl-hello-chk | |
server server1 server1:443 | |
backend https_server2 | |
mode tcp | |
option tcplog | |
option ssl-hello-chk | |
server server2 server2:443 | |
backend https_server3 | |
mode tcp | |
option tcplog | |
option ssl-hello-chk | |
server server3 server3:443 |
Provera konfiguracije
Da biste provjerili ispravnost konfiguracijske datoteke Haproxyja, koristite naredbu haproxy -c -f /putanja/do/konfiguracijske/datoteke/haproxy.cfg
.
Ova naredba provjerava ispravnost sintakse konfiguracijske datoteke bez pokretanja Haproxyja. Ako postoji bilo kakva pogreška u sintaksi datoteke, ova naredba će prikazati poruku o pogrešci koja će vam pomoći u otklanjanju problema.
Primjer naredbe za provjeru konfiguracije Haproxyja:
haproxy -c -f /etc/haproxy/haproxy.cfg
Zamijenite /etc/haproxy/haproxy.cfg
stvarnom putanjom do vaše konfiguracijske datoteke.
Ako nema pogrešaka pri provjeri konfiguracije, naredba će vratiti poruku poput "Configuration file is valid". Ako postoje greške, dobit ćete odgovarajuću poruku koja će vam pomoći da identificirate i ispravite problem u konfiguracijskoj datoteci.
Global
Opcije pod globalnom sekcijom u konfiguracijskoj datoteci Haproxy-a postavljaju globalne parametre i postavke koje se primjenjuju na razini cijelog Haproxy servisa. Ovdje su neke od glavnih opcija koje se mogu postaviti unutar globalne sekcije:
-
log: Definira način na koji se logovi generiraju i gdje se šalju. Primjer:
log /dev/log local0
. -
chroot: Postavlja direktorij u kojem će Haproxy promijeniti korijenski direktorij nakon pokretanja, čime se osigurava dodatna sigurnost.
-
stats socket: Definira putanju do Unix socketa za interakciju s Haproxy statistikama.
-
stats timeout: Postavlja vremensko ograničenje za prikupljanje statistika.
-
user i group: Postavlja korisničko ime i grupu pod kojima će Haproxy pokrenuti procese radi sigurnosti.
-
daemon: Ova opcija govori Haproxyju da se pokrene kao daemon, tj. kao pozadinski proces.
-
maxconn: Postavlja maksimalni broj aktivnih konekcija koje Haproxy može obraditi.
Primjer globalne sekcije u Haproxy konfiguraciji:
global
log /dev/log local0
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
maxconn 2000
Ove opcije se koriste za postavljanje globalnih parametara Haproxyja koji će se primijeniti na sve frontend i backend sekcije definirane u konfiguracijskoj datoteci. Važno je prilagoditi ove opcije prema potrebama i zahtjevima vaše infrastrukture i aplikacije kako bi Haproxy radio kako treba i osigurao optimalnu učinkovitost i sigurnost.
Defaults
Opcija defaults
u Haproxy konfiguraciji služi za postavljanje zadanih vrijednosti i parametara koji se primjenjuju na sve backendove i frontendove ako se ti parametri eksplicitno ne definiraju u određenim sekcijama.
Evo nekoliko ključnih opcija koje se često koriste unutar defaults
sekcije:
-
mode: Postavljanje načina rada (mode) koji se koristi za obradu prometa, poput
http
,tcp
,health
, itd. Primjer:mode http
. -
log: Definira način generiranja logova za promet koji prolazi kroz Haproxy.
-
timeout connect: Postavlja vremensko ograničenje za uspostavu TCP konekcije.
-
timeout client: Postavlja vremensko ograničenje za čekanje na aktivnost od klijenta.
-
timeout server: Postavlja vremensko ograničenje za čekanje na aktivnost od servera.
-
option: Postavljanje specifičnih opcija koje kontroliraju ponašanje Haproxyja. Na primjer,
option http-server-close
zatvara HTTP sesiju nakon odgovora od servera.
Primjer defaults
sekcije u Haproxy konfiguraciji:
defaults
mode http
log global
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option http-server-close
Ove opcije postavljaju zadane vrijednosti za sve frontendove i backendove ako se ove vrijednosti ne definiraju eksplicitno unutar pojedinačnih sekcija. To omogućuje jednostavnije i konzistentnije upravljanje parametrima kao što su vremenska ograničenja, načini rada i opcije za sve dijelove konfiguracije Haproxyja. Važno je prilagoditi ove zadane vrijednosti prema potrebama i zahtjevima vašeg sustava kako bi Haproxy radio kako treba i osigurao optimalnu učinkovitost.