Nginx – Konfigurace Load Balanceru (NGINX Load Balancer)

By | 18/11/2023

Last Updated on 10/12/2023 by administrator

Nginx – Konfigurace Load Balanceru (NGINX Load Balancer)

Nginx – Konfigurace Load Balanceru (NGINX Load Balancer)

Motivace:

Nginx může být používán jako load balancer pro distribuci provozu mezi více backend serverů. Nginx poskytuje několik strategií load balancingu, včetně round-robin, least connections, a dalších.

Návod ukazuje tak nakonfigurovat Nginx jako load balancer pro dva webové servery a následně pro ně získat SSL certifikát.

OS:

Implementace byla prováděna na Ubuntu 22.04 LTS. Nicméně návod bude pravděpodobně aplikovatelný na nižší verze Ubuntu.

Topologie sítě:

Nginx - Konfigurace Load Balanceru

Princip funkce:

Mějme dva webové servery (tzn. backend servery) pod IP adresama 192.168.0.150 a 192.168.0.151. Ty jsou schované za Nginx reverzní proxy pod IP adresou 192.168.0.120.

Klient (například webový prohlížeč) zadá webovou adresu mujweb.mooo.com do svého prohlížeče a odešle HTTPS požadavek na tuto adresu. Doménové jméno mujweb.mooo.com je je přeloženo na nějakém DNS serveru na IP adresu 7.47.97.41. Požadavek od klienta nejprve dorazí k routeru, který přeloží IP adresu 7.47.97.41 na 192.168.0.120 a tímto požadavek dorazí na Nginx load balanceru. Nginx analyzuje příchozí HTTPS požadavek od klienta. Podle své konfigurace typu load balancingu rozhodne, na který backend server přesměrovat požadavek.

Implementace [1]:

Veškterá implemetace se provádí na Nginx serveru (192.168.0.120).

Instalace Nginx:

Aktualizace seznamu balíčků z repozitářů:

sudo apt update

Instalace služby Nginx:

apt install nginx -y

Pokud je nakonfigurovaný firewall (lze zjistit příkazem sudo ufw status), je nutné povolit provoz TCP/443 a TCP/80:

sudo ufw allow 443/tcp
sudo ufw allow 80/tcp

Konfigurace Virtualhosta pro doménu mujweb.mooo.com:

Vytvořit soubor s názvem mujweb.mooo.com:

vi /etc/nginx/sites-available/mujweb.mooo.com

a vložit do něj tento konfigurační blok níže. V níže uvedené konfiguraci je rozdělení zátěže mezi backend servery rovnoměrné:

upstream weboveservery {
    server 192.168.0.151;
    server 192.168.0.152;
}

server {
    listen 80;
    server_name mujweb.mooo.com;

    location / {
        proxy_pass http://weboveservery;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Legenda:

  • upstream – definuje skupinu backend serverů s názvem weboveservery
  • listen 80 – Nginx naslouchá na portu 80, který je obvyklým portem pro HTTP.
  • server_name – Definuje doménu pro tento virtuálního host, v tomto případě mujweb.mooo.com
  • proxy_pass – Tato direktiva říká Nginx, aby přesměroval všechny požadavky na adresu definovanou v bloku upstream s názvem weboveservery.
  • proxy_set_header – Tyto direktivy nastavují specifické HTTP hlavičky pro předání informací o původním požadavku

Vytvořit symbolický link mezi konfiguračním souborem pro virtuálního hosta /etc/nginx/sites-available/mujweb.mooo.com a adresářem /etc/nginx/sites-enabled/, který Nginx načítá pro aktivní virtuální hosty:

sudo ln -s /etc/nginx/sites-available/mujweb.mooo.com /etc/nginx/sites-enabled/

Pro zkontrolování Nginx syntaxe použít:

sudo nginx -t

Provést restart služby Nginx:

sudo systemctl reload nginx

Základní konfigurace hotova!

Jak odebrat server z load balancingu:

Pokud je nutné dočasně odebrat backend server z rotace load balancingu, provede se to parametrem down:

upstream backend {
    server 192.168.0.151;
    server 192.168.0.152 down;
}

Typy load balancingu [2]:

Round Robin:

Jedná se o nejjednodušší formu load balancingu, kde je každý nový požadavek přidělen jednomu ze serverů v cyklickém pořadí. Tento přístup je jednoduchý, ale nebere v úvahu aktuální stav serverů. Jedná se o defaultní formu load balancingu.

Least connection

Least connection je algoritmus load balancingu v Nginx, který směruje nové požadavky na server s nejnižším aktuálním počtem aktivních spojení. Tato strategie se snaží minimalizovat počet aktivních spojení na jednotlivých backend serverech, což může být užitečné, pokud servery mají různou kapacitu nebo výkon.

Příklad nastavení:

upstream backend {
    least_conn;
    server 192.168.0.151;
    server 192.168.0.152;
}
IP Hash:

Algoritmus IP hash je způsob, jakým Nginx rozhoduje, který server z backend skupiny bude obsluhovat konkrétní klienta na základě zdrojové IP adresy klienta. To znamená, že požadavky od stejné IP adresy budou vždy směrovány na stejný backend server. Toto může být užitečné v případech, kdy je potřeba udržet stavové informace na serveru pro konkrétního klienta (client’s session “sticky” or “persistent”), což je často případ například u aplikací, které používají relace.

upstream backend {
    ip_hash;
    server 192.168.0.151;
    server 192.168.0.152;
}

Další typy load balancingu [1]:

Weight:

Weight jsou užitečné ve scénářích, kde backend servery mají různou kapacitu nebo výkonnost. Pomocí váh lze dosáhnout vyvážení zátěže tak, aby výkonnější servery dostávaly větší podíl provozu. Vyšší váha znamená, že na daný backend server bude směrováno více požadavků než na servery s nižší váhou. Defaultní hodnota je weight=1:

Příklad nastavení, kdy server 192.168.0.151 bude dostávat 3x více zátěže, než server 192.168.0.152.

upstream backend {
    server 192.168.0.151 weight=3;
    server 192.168.0.152 weight=1;
}

Další metody load balancingu jsou uvedené zde.

Health check:

Při použití open-source verze Nginx (bez Nginx Plus) není přímo k dispozici zabudovanou podporu pro health checks [2]. Nicméně pokud se jeden z backend serveru stane nedostupným, Nginx automaticky přesměruje HTTP požadavek na dostupný backend server v reálném čase.

V praxi to probíhá docela rychle.

Zabezpečení serverů pomocí SSL:

Pro zabezpečení webových serverů je možné získat certifikát zdarma na 3 měsíce. Vše se opět konfiguruje na Nginx serveru (192.168.0.120), kde stačí stáhnout certifikát pro doménové jméno a jsou tímto pokryty všechny backend servery.

V tomto článku je uvedeno jak nainstalovat Certbota na Nginx server.

Instalace Certbot Nginx (Install Certbot Nginx)

Zdroj:

[1] https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

[2] https://docs.nginx.com/nginx/admin-guide/load-balancer/http-health-check/

Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérský softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030 Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Leave a Reply

Your email address will not be published. Required fields are marked *