GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit Nginx jako loadbalancer pro Apache nebo Tomcat pro HTTP/HTTPS

Nginx můžete použít jako loadbalancer před vaší webovou aplikací.

Pokud například vaše podniková aplikace běží na Apache (nebo Tomcat), můžete nastavit 2. instanci vaší podnikové aplikace na Apache (nebo Tomcat) na jiném serveru.

A pak můžete umístit Nginx na front-end, což zajistí rovnováhu zatížení mezi dvěma servery Apache (nebo Tomcat nebo JBoss).

Pokud jste v Nginxu nováčkem, je důležité porozumět rozdílu mezi Nginx vs Apache a Nginx Architecture.

Nginx podporuje následující tři typy vyvažování zátěže:

  1. round-robin – Toto je výchozí typ pro Nginx, který používá typický algoritmus round-robin k rozhodnutí, kam odeslat příchozí požadavek
  2. nejméně připojeno – Jak název napovídá, příchozí požadavek bude odeslán na server, který má menší počet připojení.
  3. ip-hash – Toto je užitečné, když chcete mít trvalé nebo pevné připojení příchozího požadavku. V tomto typu se k rozhodnutí, na který server má být požadavek odeslán, používá IP adresa klienta.

1. Definujte upstream a proxy_pass v konfiguračním souboru Nginx

Pro vyrovnávání zátěže musíte do konfiguračního souboru nginx přidat dvě věci:1) upstream 2) proxy_pass

Nejprve upstream: Zadejte jedinečný název (může být název vaší aplikace) a uveďte všechny servery, které budou tímto Nginxem vyvažovat zátěž.

V následujícím příkladu je „crmdev“ název upstreamu, což je název aplikace, která běží na obou jednotlivých webových serverech Apache (101.1 a 102.2, jak je uvedeno níže). Místo „crmdev“ zde můžete zadat cokoli, co se vám líbí.

Poznámka:Upstream by měl být definován uvnitř vašeho „http“ kontextu Nginx.

upstream crmdev {
    server 192.168.101.1;
    server 192.168.101.2;
}

Poznámka:Pokud jednotlivé servery běží na jiném portu (jiném než 80), zadejte číslo portu, jak je uvedeno níže v upstream

upstream crmdev {
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
}

Za druhé, proxy_pass: Zadejte jedinečný název pro upstream, který byl definován v předchozím kroku jako proxy_pass ve vaší sekci „location“, která bude v sekci „server“, jak je uvedeno níže.

server {
  listen 80;
  
  location / {
    proxy_pass http://crmdev;
  }
}

Poznámka:V tomto příkladu samotný nginx naslouchá na portu 80, jak je znázorněno výše u parametru listen.

Vezměte prosím na vědomí, že proxy_pass můžete také použít k nastavení Nginx jako zpětného proxy k Apache/PHP.

2. Definujte upstream a proxy_pass v Nginx Default Config File

Poznámka:Výše ​​uvedené by měly být obvykle pod http nebo https, jak je uvedeno níže.

http {
  upstream crmdev {
   server 192.168.101.1:8080;
   server 192.168.101.2:8080;
  }

  server {
      listen 80;

      location / {
          proxy_pass http://crmdev;
      }
  }
}

Pokud však používáte default.conf, který je dodáván s výchozím souborem nginx.conf, nemusíte zadávat „http“, protože je již definováno v kontextu http.

Poznámka:V případě HTTPS nahraďte kontext „http“ (v prvním řádku výše) https. V řádku proxy_pass také použijte https://{název vašeho-upstream-u}

V tomto případě, pokud použijete „http“, jak je uvedeno výše, můžete obdržet následující chybovou zprávu http direktiva není povolena:

Starting nginx: nginx: [emerg] "http" directive is not allowed here in /etc/nginx/conf.d/default.conf:1

Toto je kopie mého souboru default.conf, kam jsem přidal upstream na začátek (bez http) a poté zakomentoval výchozí umístění a přidal nové umístění pomocí proxy_pass.

# vi /etc/nginx/conf.d/default.conf
upstream crmdev {
    server 127.0.0.1:4080;
    server 127.0.0.1:7080;
}
server {
  listen       3080;
  server_name  localhost;
  
  #location / {
  #    root   /usr/share/nginx/html;
  #    index  index.html index.htm;
  #}
  
  location / {
    proxy_pass http://crmdev;
  }
..
..
}

3. Nastavte nejméně připojený algoritmus pro Nginx Load Balancer

V tomto algoritmu je příchozí požadavek odeslán na server, který má nejmenší počet existujících aktivních připojení.

Za tímto účelem přidejte klíčové slovo „least_conn“ do horní části upstreamu, jak je znázorněno níže.

upstream crmdev {
    least_conn;
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
}

Pokud máte několik serverů uvedených v nejméně_conn a pokud více serverů má podobně nízký počet stávajících aktivních připojení, pak mezi těmito servery bude jeden vybrán na základě vážené kruhové analýzy.

4. Nastavení Persistence nebo Sticky Algorithm pro Nginx Load Balancer

Nevýhodou kruhové a nejméně připojené metody je, že následné připojení od klienta nepůjde na stejný server ve fondu. To může být v pořádku pro aplikaci nezávislou na relaci.

Pokud je však vaše aplikace závislá na relaci, pak po navázání počátečního připojení s konkrétním serverem chcete, aby všechna budoucí připojení z tohoto konkrétního klienta šla na stejný server. K tomu použijte algoritmus ip_hash, jak je znázorněno níže.

upstream crmdev {
    ip_hash;
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
} 

Pro hash, pro IPv4 adresu, jsou použity první tři oktety. Pokud se jedná o adresu IPv6, použije se celá adresa.

5. Možnosti hmotnosti pro jednotlivé servery

Můžete také zadat váhu pro konkrétní server ve vašem fondu. Ve výchozím nastavení mají všechny servery stejnou prioritu (váhu). tj. Výchozí hodnota hmotnosti je 1.

Toto chování však můžete změnit přiřazením váhy serveru, jak je uvedeno níže.

upstream crmdev {
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080;
}

V tomto příkladu máme celkem 5 serverů. Ale váha na 3. serveru je 2. To znamená, že na každých 6 nových požadavků přijdou 2 požadavky na 3. server a zbytek serveru dostane 1 požadavek.

To je užitečné pro rozložení větší zátěže na konkrétní server, který má více koňských sil.

I když ve výše uvedeném příkladu je váha použita s výchozím algoritmem round-robin, můžete váhu použít také pro nejmenší_conn a ip_hash.

6. Možnosti časového limitu pro jednotlivé servery – max_fails a fail_timeout

Můžete také zadat max_fails a fail_timeout pro konkrétní server, jak je uvedeno níže.

upstream crmdev {
    server 192.168.101.1:8080 max_fails=3 fail_timeout=30s;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080;
}

Ve výše uvedeném:

  • Výchozí fail_timeout je 10 sekund. V tomto výše uvedeném příkladu je nastaveno na 30 sekund. To znamená, že pokud do 30 sekund došlo k x počtu neúspěšných pokusů (jak je definováno pomocí max_fails), server bude nedostupný. Server také zůstane nedostupný po dobu 30 sekund.
  • Výchozí max_fails je 1 pokus. Ve výše uvedeném příkladu je toto nastaveno na 3 pokusy. To znamená, že po 3 neúspěšných pokusech o připojení k tomuto konkrétnímu serveru bude Nginx považovat tento server za nedostupný po dobu trvání fail_timeout, což je 30 sekund.

7. Přiřaďte záložní server v Nginx LoadBalancer Pool

V následujícím příkladu je 5. server označen jako záložní pomocí klíčového slova „backup“ na konci parametru serveru.

upstream crmdev {
    server 192.168.101.1:8080 max_fails=3 fail_timeout=30s;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080 backup;
}

Výše uvedené vytvoří 5. server (192.168.101.5) jako záložní server. Příchozí požadavek nebude předán tomuto serveru, dokud nebudou všechny ostatní 4 servery mimo provoz.


Linux
  1. Jak přesměrovat HTTP na HTTPS v Nginx

  2. Přesměrování HTTP na HTTPS v NginX

  3. Jak automaticky přesměrovat HTTP na HTTPS na serverech Apache?

  1. Jak nakonfigurovat Nginx jako webový server a reverzní proxy pro Apache na CentOS 8

  2. Jak nastavit Nginx jako reverzní proxy pro Apache na Debianu 11

  3. Jak nastavit Apache jako frontend proxy pro Node.js

  1. Jak nastavit HAProxy jako Load Balancer pro Nginx na CentOS 8

  2. Jak povolit HTTP/2 v Apache v systému Linux

  3. Jak povolit HTTP/2.0 na serveru Nginx:Průvodce krok za krokem