WEDOS Cloud – Serwer WWW NGINX z wysoką dostępnością

  WEDOS Cloud

W poprzednim artykule opisaliśmy procedurę tworzenia dwóch VPS działających jako routery na platformie WEDOS Cloud. Za ich pośrednictwem pozostałe serwery VPS podłączone do sieci wewnętrznej mają możliwość korzystania ze współdzielonego adresu routerów, a tym samym nieprzerwanego udostępniania plików, w przypadku awarii jednego z routerów.

Do utworzenia serwerów WWW użyjemy Nginx, który może działać zarówno jako tradycyjny serwer WWW, jak i jako load balancer. Podstawową funkcją Load balancer jest przekazywanie żądań internetowych do serwerów WWW.

Istnieje kilka trybów, wg, których load balancer wybiera serwer WWW, na który zostanie przesłane żądanie. Jednym z najczęściej używanych jest round_robin (domyślny), który wysyła żądania w stosunku 1:1 pomiędzy wszystkimi dostępnymi serwerami WWW. W trybie ip_hash żądania z jednego adresu IP są zawsze wysyłane do jednego serwera WWW. Tryb ten jest używany głównie w aplikacjach, które nie są przystosowane do działania na kilku serwerach. Gdyby każde żądanie było wysyłane na inny serwer WWW, strona mogłaby wylogować użytkownika, ponieważ jego dane byłyby zapisane na innym serwerze.

Tworzenie VPS  i NAT

Zaczniemy od stworzenia dwóch VPS, które posłużą jako serwery WWW udostępniające zawartość samej strony. Utworzone VPS należy podłączyć do sieci wewnętrznej o nazwie w formacie ocXXXX-private. Sieci tej jest domyślnie przypisany zakres adresów 192.168.1.1 – 192.168.1.254. Pierwsze 3 adresy są już używane przez routery, a adres 192.168.1.1 jest współdzielony między routerami.

Dla każdego VPS ustawimy adres statyczny. W tym przypadku wybierzemy na przykład adresy 192.168.1.10 i 192.168.1.11. Ustawienia adresu statycznego znajdziemy po rozkliknięciu utworzonego VPS, wybraniu Network i wyświetleniu opcji zaawansowanych.

Możesz wybrać dowolny system operacyjny dla serwerów WWW. Najlepszym rozwiązaniem jest wybór tego, który znasz najlepiej. W poniższym przykładzie zostanie użyty system Debian 10. Jeśli korzystasz z innego systemu, niektóre polecenia mogą się różnić.

Aby z nowo utworzonym VPS móc łączyć się przez SSH, konieczne będzie dodanie na routerach reguły NAT, która przekieruje żądania o połączenie na dany serwer WWW. Na obu routerach uruchomimy następujące polecenia.

iptables -t nat -A PREROUTING -p tcp --dport 1111 -i eth0 -j DNAT --to 192.168.1.10:22
iptables -t nat -A PREROUTING -p tcp --dport 2222 -i eth0 -j DNAT --to 192.168.1.11:22

Po uruchomieniu tego polecenia SSH pierwszego serwera będzie dostępne na {współdzielonym adresie routerów}:1111 a drugiego na {współdzielonym adresie routerów}:2222

Instalacja i konfiguracja serwera WWW

Poniższą procedurę stosujemy w przypadku obu serwerów WWW. Rozpoczynamy od aktualizacji systemu.

apt update && apt upgrade -y

Po zakończeniu aktualizacji instalujemy pakiet nginx.

apt install nginx -y

Domyślne ustawienie nginx pozwala na użycie jedynie statycznych stron znajdujących się w folderze /var/www/html/ (bez PHP). Aby zainstalować PHP wersja 7.3, uruchom następujące polecenie:

apt install php7.3-fpm -y

Po zakończeniu instalacji należy dostosować ustawienia nginx, aby wszystkie pliki z końcówką .php były przetwarzane jako skrypt. W tym celu rozpocznij o edycji pliku /etc/nginx/fastcgi_params. Na końcu pliku dodaj następujący wiersz:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Następnie usuń zawartość pliku /etc/nginx/sites-enabled/default i zastąp ją poniższym:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        index index.php index.html index.htm;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }
}

Po zakończeniu edycji konieczne będzie ponowne uruchomienie nginx za pomocą polecenia:

service nginx restart

Konfiguracja serwera WWW została zakończona. Serwery WWW są gotowe na umieszczenie stron WWW, ale nie są jeszcze dostępne przez internet. Serwery są umieszczone za routerami, które blokują ruch z internetu. Zmienimy to w kolejnej sekcji.

Instalacja load balancera

Aby zapewnić dostępność serwerów WWW z Internetu, konieczne jest zainstalowanie na routerach load balancera, który będzie przesyłał żądania do serwerów WWW. Istnieje kilka różnych load balancerów. Np. HAProxyTraefik czy Nginx, z którego skorzystamy w tej instrukcji.

Ponieważ na routerach jest zainstalowany system Alpine Linux, niektóre polecenia będą inne niż te dla Debiana.

Rozpocznij od aktualizacji listy pakietów i zainstalowania nginx za pomocą polecenia:

apk update && apk add nginx

W domyślnej instalacji Alpine Linux nie jest dostępny program do edycji plików nano. Zamiast niego możesz użyć programu vi. Nano można doinstalować poleceniem apk add nano.

Usuń zawartość pliku konfiguracyjnego /etc/nginx/conf.d/default.conf i zastąp ją poniższym:

upstream cluster {                                                             
        server 192.168.1.10;             
        server 192.168.1.11;          
}                                     
                                      
server {                                    
        listen 80 default_server;                       
        listen [::]:80 default_server;                      
                                                             
        location / {                                        
                proxy_set_header Host $host;                
                proxy_set_header X-Real-IP $remote_addr;    
                proxy_pass http://cluster;                  
        }                     
}

Sekcja upstream definiuje listę serwerów, którym będą przekazywane żądania. Jeżeli dla serwerów WWW wybrałeś inne adresy niż 192.168.1.10 i 192.168.1.11, konieczna będzie modyfikacja pliku konfiguracyjnego.

Po wprowadzeniu zmiany w konfiguracji konieczne będzie ponowne nginx za pomocą polecenia:

rc-service nginx restart

Aby nginx uruchomił się po restarcie routera, konieczne jest uruchomienie polecenia:

rc-update add nginx default

Jeśli wszystko zostało zrobione poprawnie, to po wpisaniu adresu współdzielonego routerów miałaby wyświetlić się strona domyślna nginx. Można ją edytować nadpisaniem plików w folderze /var/www/html/