NGINX to kolejny serwer HTTP, z którym warto się zapoznać jeżeli tworzymy własne środowiska hostingowe lub szukamy odpowiedniego hostingu dla konkretnego projektu. NGINX ma kilka cech, które powodują, że jest on preferowany w projektach o dużej skali. W tym artykule odpowiemy sobie na następujące pytania: na czym polega reverse proxy, jakie są różnice pomiędzy NGINX a Apache oraz czy warto go używać?

NGINX (w piśmie często stylizowane jako nginx, wymowa: Engine X) to serwer HTTP, który może pracować również jako reverse proxy (czyli odwrotny serwer pośredniczący) dla innego serwera HTTP, load balancer, proxy dla usługi poczty e-mail oraz pamięć podręczna HTTP. Serwer nginx jest obecnie drugim najpopularniejszym rozwiązaniem serwera HTTP zaraz po Apache. Jest projektem open-source, z którego każdy może korzystać za darmo na licencji BSD. Istnieje wersja NGINX Plus z oficjalnym wsparciem założonej w 2011 roku firmy Nginx Inc.

Logo nginx stanowi stylizowany napis NGINX w kolorze zielonym:

Logo nginx

Autorem tego serwera jest rosyjski inżynier Igor Sysoev. Stworzył nginxa w 2002 aby rozwiązać problem C10k z dziedziny optymalizacji gniazd sieciowych. Ten symboliczny numeronim oznacza 10 tysięcy konkurujących (czyli jednoczesnych) połączeń do serwera. W problemie tym nie rozwiązuje się problemu wydajności (bo w grę nie chodzi o 10 000 połączeń na sekundę i szybkość realizowania połączenia) ale możliwości obsłużenia takiej ilości połączeń w ogóle i zarządzania gniazdami. Serwer ten powstał dla potrzeb wielu stron, wśród nich był Rambler czyli rosyjska wyszukiwarka i portal internetowy. Ze względu na efektywność i niskie wymagania systemowe projekt szybko zdobył popularność i został wykorzystany w back-endzie wielu popularnych witryn internetowych. O skuteczności i wartości nginxa może świadczyć fakt, że obecnie korzystają z niego takie portale jak Netflix, Pinterest i usługa WordPress.com.

Różnice pomiędzy Apache i nginx

Cechy nginxa i to dlaczego jest wykorzystywany w projektach dużej skali najłatwiej zrozumieć kiedy prześledzimy różnice pomiędzy najpopularniejszych serwerem HTTP jakim jest Apache. Choć wydawałoby się, że serwery powinny działać identycznie lub chociaż podobnie, nginx działa nieco inaczej niż Apache

Architektura

Pierwszą z tych różnić jest architektura. Apache podchodzi do żądań na zasadzie procesów (ang. process-driven approach). Apache do każdego nowego zapytania tworzy wątek (ang. thread) co może stanowić problem w przypadku kierowania do niego wielu żądań jednocześnie.

Nginx do obsługi poszczególnych zapytań używa zdarzeń (ang. event-driven approach). Jest w stanie obsłużyć wiele zapytań w jednym wątku. Nieblokujący algorytm obsługi połączeń pozwala na obsługę wielu żądań jednocześnie zachowując stabilność przy silnie ograniczonych zasobach.

Wydajność

Wydajność z perspektywy serwera to efektywność serwowania treści statycznych i dynamicznych. Nginx w przeciwieństwie do standardowego serwera Apache nie używa ani środowiska PHP ani systemu plików do obsługi żądań o pliki statyczne. Nginx jest przez to efektywniejszy w scenariuszu kiedy strona serwuje wiele plików i występuje na niej duży ruch.

W przypadku treści dynamicznych nginx nie ma żadnej przewagi a jedyną różnicą jest to, że w Apache przetwarza dynamiczną odpowiedź samodzielnie wewnątrz modułu PHP. Nginx czeka aż zewnętrzny proces PHP-FPM przetworzy dynamiczną odpowiedź dla niego i kiedy jest gotowa, nginx serwuje ją klientowi.

Wsparcie systemów operacyjnych

Apache jest starszym i nieco popularniejszym serwerem HTTP, to powoduje, że wspiera wszystkie unixowe systemy operacyjne włączając Linux i BSD oraz ma pełne wsparcie dla serwerów Windows. Nginx zaś wspiera prawie wszystkie systemy Unixowe a wsparcie dla Windowsa jest tylko częściowe.

Interpretacja żądań

Nginx przetwarza zapytania w nieco inny sposób – nie polega tak silnie na systemie plików. Aby była możliwa praca w trybie reverse proxy i pamięci podręcznej HTTP żądania o konkretne adresy URI nie odnoszą się do systemu plików, które mogą być nadpisane przez reguły rewerite a są na starcie interpretowane przez specjalne reguły, które znajdują się w pliku konfiguracyjnym.

Możliwości konfiguracyjne, elastyczność i rozszerzenia

Możliwości konfiguracyjne serwera mogą być kluczowe a w tym punkcie zdecydowaną przewagę ma Apache. Pozwala konfigurować działanie za pomocą pliku .htaccess wewnątrz każdego folderu bez dotykania głównego pliku konfiguracyjnego, który jest zazwyczaj dostępny tylko dla administratora systemu operacyjnego. Nginx nie posiada takiej możliwości jeżeli działa jako osobny serwer. Większa wydajność wymusza prostsze rozwiązania a te nie gwarantują większych możliwości konfiguracyjnych.

Możliwości serwera nginx mogą być rozszerzane za pomocą dodatkowych wtyczek. Nie są to jednak dynamicznie ładowane moduły, których część jest dostępna po czystej instalacji serwera.

Zalety nginx

  • większa wydajność,
  • niska konsumpcja zasobów przy dużym ruchu,
  • możliwa praca w trybie serwera, load balancera, reverse proxy lub pamięci podręcznej HTTP,
  • możliwość rozszerzania za pomocą wtyczek,
  • darmowy i wolno-dostępny,
  • duża popularność gwarantująca dobre wsparcie na forach typu StackOverflow i dużą dostępność tutoriali.

Wady nginx

  • mniejsza elastyczność i uboższe możliwości konfiguracyjne, brak obsługi .htaccess,
  • brak możliwości wykorzystania dynamicznie ładowanych modułów,
  • węższe wsparcie dla systemów Unix i tylko częściowe wsparcie dla Windows,
  • relatywnie trudniejsza administracja.

Popularne projekty wykorzystujące nginx

  • Netflix,
  • Dropbox,
  • Pinterest,
  • Airbnb,
  • WordPress.com,
  • Instagram,
  • GitHub,
  • SoundCloud,
  • Zappos,
  • Yandex

Kompatybilność z popularnymi CMSami

Można wykorzystywać serwer nginx chcąc korzystać z popularnych systemów zarządzania treścią. Zarówno WordPress, PrestaShop jak i Joomla, testują każdą aktualizację z tym środowiskiem. Jest to zaznaczone w dokumentacji:

Nginx i Apache zalecane w dokumentacji WordPress

Mimo, że większość systemów CMS będzie współdziałać także z innymi serwerami, korzystając z NGINX osiągamy bardzo dobre wyniki pod kątem wydajności w warunkach dużego ruchu i nie odcinamy się od różnego rodzaju działań optymalizacyjnych i będziemy mogli wykorzystać gotowe wtyczki realizujące przydatne funkcje.

Instalacja nginx

Aby zainstalować nginx wystarczy uruchomić następujące polecenia:

sudo apt update
sudo apt install nginx

Po tych działaniach nginx jest gotowy do działania. Po wpisaniu adresu serwera naszym oczom ukaże się strona startowa nginx.

Domyślna strona nginx

Po instalacji php-fpm, która odbywa się za pomocą komendy sudo apt install php-fpm php-mysql należy przejść do pliku konfiguracyjnego /etc/nginx/sites-available/default i w bloku server dodać index.php i odkomentować:

location ~ .php$ {
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}

Podsumowanie

Nginx to rozwiązanie dla stron z dużym ruchem. Sprawdzi się tam gdzie możemy poświęcić elastyczność i duże możliwości konfiguracyjne w imię większej wydajności i oszczędności zasobów. Można wykorzystać możliwości nginx instalując go jako komponent do obecnej architektury opartej o Apache, który będzie pracował w trybie pamięci HTTP lub reverse proxy.

Źródła

Oceń artykuł na temat: NGINX – co to jest i jakie ma zalety? Czy warto używać?
Średnia : 4.8 , Maksymalnie : 5 , Głosów : 5