nginxa można łatwo wykorzystać w roli load balancera, na którym jesteśmy w stanie zrealizować także dodatkowe usługi – np. dokonać terminacji połączeń SSL, dzięki czemu serwery aplikacyjne nie muszą się tym zajmować. Jest to szczególnie przydatne np. w node.js, gdzie oszczędzamy kod do obsługi HTTPS. Istotną zaletą takiego rozwiązania jest także możliwość centralnego zarządzania certyfikatami SSL, co w większych środowiskach jest dużym ułatwieniem.
Konfigurację rozpoczynamy od określenia puli serwerów (tutaj o nazwie: servers_pool), które mają obsługiwać daną domenę:
upstream servers_pool {
server 192.168.0.11:8080;
server 192.168.0.12:8080;
server 192.168.0.13:8080;
}
Następnie deklarujemy serwer ustawiając odpowiednie parametry odwrotnego proxy. Dla load balancingu kluczowa jest linijka proxy_pass, w której określamy wcześniej zdefiniowaną pulę serwerów:
server {
listen 443;
server_name test.luktom.net;
location / {
proxy_pass http://servers_pool;
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_connect_timeout 1;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
proxy_intercept_errors on;
}
}
Dyrektywa proxy_next_upstream określa w jakich sytuacjach nginx powinien spróbować połączyć się z kolejnym serwerem z puli.
Terminacja SSL
Jeśli naszą witrynę chcemy zabezpieczyć przy użyciu HTTPS do powyższej sekcji server musimy dopisać konfigurację certyfikatów SSL oraz dostępnych wersji SSL/TLS:
ssl on; ssl_certificate /etc/nginx/certs/test.luktom.net_bundle.crt; ssl_certificate_key /etc/nginx/certs/test.luktom.net.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Strona przerwy technicznej
Dodatkowo, w przypadku niedostępności serwerów w puli lub wystąpienia na nich błędów (muszą wystąpić po kolei na wszystkich dostępnych – dyrektywa proxy_next_upstream definiuje kiedy przechodzimy do następnego serwera) chcemy wyświetlić użytkownikowi stronę, informującą o przerwie technicznej. W tym celu, w ramach zadeklarowanego wyżej serwera, tworzymy zasób /maintenance a w nim plik maintenance.html zawierający informację o przerwie technicznej. Następnie, przy użyciu dyrektywy error_page wskazujemy nginxowi, kiedy ma wyświetlić stronę przerwy technicznej:
location /maintenance/ {
root /etc/nginx/content;
index maintenance.html;
}
error_page 501 502 503 504 /maintenance.html;
location /maintenance.html {
root /etc/nginx/content/maintenance;
}
Przeładowujemy konfigurację nginxa:
nginx -s reload
I gotowe – nasz load balancer jest w pełni funkcjonalny :)

Dodaj komentarz