Generator Nginx load balancer
Rozłóż ruch między serwery aplikacji
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćPodaj dalej
Komuś też się przyda?
Wyślij znajomemu link. Otworzy narzędzie od razu, bez konta i bez opłat.
Generator load balancera Nginx
Gdy jedna instancja aplikacji nie wystarcza, ruch rozkłada się między kilka serwerów. Nginx pełni wtedy rolę load balancera, zwiększając wydajność i niezawodność.
Metody rozkładu ruchu
| Metoda | Zasada działania |
|---|---|
| round-robin | po kolei do każdego serwera (domyślna) |
| least_conn | do serwera z najmniejszą liczbą połączeń |
| ip_hash | ten sam klient trafia do tego samego serwera |
Przykład
Dwie instancje aplikacji na portach 3000 i 3001 tworzą grupę backend. Nginx kieruje ruch metodą least_conn i utrzymuje do 32 połączeń keepalive na serwer.
Waga serwera
Dyrektywa weight pozwala kierować więcej ruchu do mocniejszej maszyny, np. server 10.0.0.1:3000 weight=3;. Serwer zapasowy ustawia się słowem backup, a wyłączony — down.
Jak działa generator load balancera Nginx
Generator zbiera wybrane ustawienia w jeden blok upstream i dopisuje do niego konfigurację proxy_pass wraz z nagłówkami przekazującymi dane klienta. Sam blok upstream jest listą serwerów, do których Nginx może kierować żądanie; reszta konfiguracji to reguły wyboru jednego z nich.
Mechanizm wyboru zależy od metody. W trybie round-robin Nginx przechodzi po liście serwerów po kolei i po ostatnim wraca do pierwszego. W least_conn wybiera serwer z najmniejszą liczbą aktywnych połączeń, a przy ustalonych wagach liczy ten stosunek względem wagi. W ip_hash wylicza skrót z adresu klienta i przypisuje go do stałego miejsca w grupie, więc ten sam klient trafia do tego samego serwera.
Waga nie jest proporcją ruchu wyrażoną w procentach — to mnożnik w kolejce wyboru. Przy wagach 3 i 1 (suma 4) co czwarte żądanie w round-robin trafia do lżejszego serwera, co daje 75% i 25%. Dyrektywa keepalive w upstreamie nie otwiera połączeń z góry — ustala, ile bezczynnych połączeń do każdego serwera Nginx może trzymać w cache i użyć ponownie. Dostępność sterują znaczniki backup i down oraz progi max_fails i fail_timeout: po przekroczeniu liczby nieudanych prób w oknie czasowym serwer jest pomijany na czas równy fail_timeout.
Przykład konfiguracji krok po kroku
- Do grupy trafiają dwie instancje aplikacji: 10.0.0.1:3000 na mocniejszej maszynie i 10.0.0.2:3001 na słabszej. Każda jest osobnym wpisem server w bloku upstream.
- Zostawiasz domyślną metodę round-robin i dodajesz weight=3 do pierwszego serwera. Suma wag wynosi 3 + 1 = 4, więc na każde 4 żądania trzy idą do 10.0.0.1:3000, a jedno do 10.0.0.2:3001 — czyli 75% i 25% ruchu.
- Jeśli czasy odpowiedzi są nierówne, przełączasz metodę na least_conn. Nginx wybierze wtedy serwer o najmniejszej liczbie aktywnych połączeń, a waga nadal wpływa na ten wybór.
- Dodajesz keepalive 32. Nginx może trzymać do 32 bezczynnych połączeń do każdego z dwóch serwerów, razem do 64 w puli. W bloku location ustawiasz proxy_http_version 1.1 oraz proxy_set_header dla nagłówka Connection z pustą wartością.
- Ustawiasz max_fails 3 i fail_timeout 30s. Gdy w ciągu 30 sekund trzy próby do 10.0.0.1:3000 zakończą się błędem, serwer wypada z grupy na 30 sekund i 100% ruchu obsługuje 10.0.0.2:3001.
- Na koniec dodajesz zapas: trzeci serwer 10.0.0.3:3002 oznaczasz słowem backup — przyjmuje ruch tylko wtedy, gdy oba serwery podstawowe są niedostępne.
Tabela referencyjna ustawień upstream
| Ustawienie | Składnia lub wartość | Efekt działania |
|---|---|---|
| round-robin | brak dodatkowej dyrektywy | Żądania trafiają po kolei do każdego serwera; metoda domyślna. |
| least_conn | least_conn; | Wybór serwera z najmniejszą liczbą aktywnych połączeń. |
| ip_hash | ip_hash; | Ten sam klient trafia do tego samego serwera. |
| weight | server 10.0.0.1:3000 weight=3; | Mnożnik w kolejce wyboru; wagi 3 i 1 dają podział 3:1, czyli 75% i 25%. |
| backup | server 10.0.0.3:3002 backup; | Serwer przyjmuje ruch tylko wtedy, gdy serwery podstawowe są niedostępne. |
| down | server 10.0.0.1:3000 down; | Serwer oznaczony jako wyłączony, nie bierze udziału w rozkładzie ruchu. |
| keepalive | keepalive 32; | Do 32 bezczynnych połączeń do każdego serwera trzymanych w cache; wymaga HTTP/1.1. |
| max_fails i fail_timeout | max_fails=3 fail_timeout=30s | Po 3 nieudanych próbach w oknie czasowym serwer jest pomijany na czas fail_timeout. |
Praktyczne wskazówki
- Zacznij od round-robin — domyślna metoda wystarcza, gdy instancje mają podobną moc, a żądania są krótkie. least_conn włączaj, gdy czasy odpowiedzi są nierówne i część połączeń utrzymuje się dłużej.
- Waga to nie pomiar wydajności — weight=3 ustawiaj świadomie, znając różnicę między maszynami. Sam stosunek 3:1 nie chroni szybszego serwera przed przeciążeniem przy nagłym wzroście ruchu.
- keepalive wymaga dwóch linii w location — proxy_http_version 1.1 oraz pusty nagłówek Connection. Bez nich pula połączeń nie zadziała mimo wpisu keepalive w upstreamie.
- Nie mieszaj ip_hash z lepkim magazynem sesji — jeśli możesz przenieść sesje do wspólnego magazynu, ip_hash przestaje być potrzebny, a rozkład ruchu staje się równiejszy.
- Ustaw progi awarii — max_fails i fail_timeout chronią przed kierowaniem ruchu do martwej instancji. Wartości dobierz do tego, jak aplikacja znosi pojedyncze błędy.
Czego narzędzie nie uwzględnia
- Nie uruchamia Nginxa — generator zwraca fragment konfiguracji, ale nie waliduje go poleceniem nginx -t ani nie sprawdza, czy dane dyrektywy są dostępne w Twojej wersji.
- Nie zna Twojej infrastruktury — nie wie, ile rdzeni mają maszyny ani jakie jest realne obciążenie, więc waga i keepalive pozostają wartościami, które dobierasz samodzielnie.
- Nie monitoruje stanu serwerów — wygenerowana konfiguracja opiera się na max_fails i fail_timeout; zaawansowane health checks to funkcja Nginx Plus i narzędzie jej nie generuje.
- Nie uwzględnia warstwy transportu i limitów — konfiguracja TLS, worker_connections, rozwiązywanie nazw DNS w upstreamie i reguły zapory pozostają poza jego zakresem.
Najczęstsze pytania
Po co keepalive w upstream?
Pozwala Nginx ponownie używać połączeń do backendu, co zmniejsza opóźnienia i obciążenie. Wymaga nagłówka Connection "" dla HTTP/1.1.
Kiedy stosować ip_hash?
Gdy sesje użytkownika są przechowywane lokalnie na serwerze. Lepiej jednak wynieść sesje do wspólnego magazynu (np. Redis).
Jak sprawdzić kondycję serwerów?
W wersji open source służy do tego max_fails i fail_timeout. Wersja Plus oferuje zaawansowane health checks.
Czym różni się least_conn od round-robin w Nginx?
round-robin przekazuje żądania po kolei, niezależnie od tego, ile połączeń jest aktualnie otwartych. least_conn wybiera serwer z najmniejszą liczbą aktywnych połączeń, więc lepiej radzi sobie, gdy żądania trwają różnie długo.
Jak ustawić wagę serwera w upstream?
Dopisujesz weight do wpisu server, na przykład server 10.0.0.1:3000 weight=3;. Waga działa jak mnożnik w kolejce wyboru: przy wagach 3 i 1 na każde 4 żądania trzy trafiają do pierwszego serwera, a jedno do drugiego.
Po co keepalive w upstream i ile połączeń ustawić?
keepalive 32 oznacza, że Nginx trzyma w cache do 32 bezczynnych połączeń do każdego serwera i używa ich ponownie, co zmniejsza opóźnienia i obciążenie backendu. Wymaga to proxy_http_version 1.1 oraz pustego nagłówka Connection.
Jak wyłączyć serwer z load balancera bez usuwania go z konfiguracji?
Dopisujesz słowo down do wpisu server, na przykład server 10.0.0.1:3000 down;. Serwer zostaje w pliku, ale nie bierze udziału w rozkładzie ruchu. Słowo backup oznacza serwer zapasowy, używany dopiero wtedy, gdy serwery podstawowe są niedostępne.
Co się dzieje, gdy jeden z backendów przestanie odpowiadać?
Nginx zlicza nieudane próby i po przekroczeniu max_fails w oknie fail_timeout wyłącza serwer z grupy na czas fail_timeout. Ruch przechodzi wtedy na pozostałe serwery z bloku upstream.