luktom.net
  • blog
  • kontakt
  • english





nginx jako load balancer z terminacją SSL i stroną niedostępności

01 wrz, 2015
Sieci komputerowe
Brak komentarzy
Odsłony : 24974

NGINXnginxa 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 :)



Tagi :   httpsload balancingmaintenancemicroservicesnginxnodessltls

Powiązane wpisy

  • AWS Certificate Manager – walidacja własności dla domeny głównej zamiast subdomen

  • AWS Certificate Manager i walidacja certyfikatów przy użyciu DNS

  • Dodaj komentarz

    Click here to cancel reply

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>





    Łukasz Tomaszkiewicz

    Łukasz Tomaszkiewicz

    Pasjonat chmury, szczególnie AWSa, który nieustannie automatyzuje powtarzające się czynności i optymalizuje procesy, przy okazji wdrażając dobre praktyki dotyczące bezpieczeństwa. Jego szerokie doświadczenie w zakresie tworzenia oprogramowania, projektowania baz danych, a także wirtualizacji serwerów i zarządzania infrastrukturą w chmurze pozwala mu spojrzeć przekrojowo na współczesny stack technologiczny.

    W wolnym czasie fotograf, sporadycznie piszący blogger :) a także regularny prelegent na krakowskich grupach związanych z IT.

    Wyznawca Vim'a :)

    Kategorie

    • Ansible
    • AWS
    • C#
    • Chatboty
    • Cloud
    • Daj się poznać 2017
    • Docker
    • Inne
    • Linux
    • Open source
    • Organizacyjne
    • Prelekcje
    • Sieci komputerowe
    • SQL Server
    • Windows
    • Windows Server
    • Wirtualizacja

    Najczęściej czytane

    • Creating single node VSAN cluster
    • SQL Server – walidacja numerów PESEL i NIP
    • Konfiguracja serwera DHCP na routerach Cisco
    • Aktywacja routingu IP w Windows 7 / Windows Server 2008
    • Konwersja maszyn wirtualnych z ESXi do Hyper-V przy użyciu SCVMM 2012
    • Jak podłączyć program R do SQL Servera?

    Tagi

    .net ai ansible asp.net mvc aws aws cli bot builder bot framework c# centos certyfikaty chatbot chatboty cisco cmd docker dsp2017 esxi hyperv kontenery konteneryzacja linux mvc nlp openvpn plssug pobieranie powershell prelekcje rancher redhat router sieci smogbot sql server ssd ssl vmware vsphere windows windows mobile windows server wirtualizacja wit.ai wrzuta

    Copyright © 2006-2018 by Łukasz Tomaszkiewicz. Wszelkie prawa zastrzeżone