Nginx to jeden z najpopularniejszych serwerów HTTP na świecie, obsługujący ponad 30% wszystkich aktywnych stron internetowych. Zaprojektowany od podstaw z myślą o wydajności, niskim zużyciu pamięci i obsłudze dużej liczby jednoczesnych połączeń, Nginx stał się standardem w branży — od małych blogów po gigantów takich jak Netflix, Cloudflare czy WordPress.com. W tym artykule wyjaśnimy, czym jest Nginx, jak działa, do czego służy i dlaczego zdominował rynek serwerów www.
Czym jest Nginx? Definicja i historia
Nginx (wymawiane „engine-x") to otwarto-źródłowy serwer HTTP, reverse proxy, load balancer i serwer proxy poczty. Został stworzony przez rosyjskiego programistę Igora Sysoeva w 2004 roku jako odpowiedź na problem C10K — wyzwanie polegające na obsłudze 10 000 jednoczesnych połączeń na pojedynczym serwerze.
W tamtym czasie dominujący serwer Apache HTTP Server stosował model procesowy/wątkowy, który przy dużej liczbie jednoczesnych połączeń zużywał ogromne ilości pamięci. Nginx rozwiązał ten problem dzięki asynchronicznej, zdarzeniowej architekturze, która pozwala obsługiwać tysiące połączeń na pojedynczym procesie roboczym.
W 2011 roku Sysoev założył firmę Nginx Inc., a w 2019 roku firma została przejęta przez F5 Networks za 670 milionów dolarów. Mimo komercjalizacji, Nginx pozostaje projektem open source na licencji BSD — darmowym do użytku zarówno osobistego, jak i komercyjnego.
Architektura Nginx — dlaczego jest tak szybki?
Sekret wydajności Nginx tkwi w jego unikalnej architekturze. W przeciwieństwie do tradycyjnych serwerów, które tworzą nowy proces lub wątek dla każdego połączenia, Nginx wykorzystuje model zdarzeniowy (event-driven).
Model master-worker
Nginx składa się z jednego procesu master i kilku procesów worker. Proces master odczytuje konfigurację, zarządza procesami worker i obsługuje sygnały systemowe. Procesy worker wykonują faktyczną pracę — obsługują połączenia, przetwarzają żądania HTTP i zwracają odpowiedzi.
Pętla zdarzeń (event loop)
Każdy proces worker działa w pętli zdarzeń, wykorzystując mechanizmy systemu operacyjnego takie jak epoll (Linux), kqueue (FreeBSD/macOS) czy IOCP (Windows). Dzięki temu jeden proces worker może obsługiwać tysiące jednoczesnych połączeń bez blokowania się na operacjach I/O.
Nieblokujące operacje I/O
Nginx wykorzystuje nieblokujące (non-blocking) operacje wejścia/wyjścia. Kiedy worker czeka na dane z dysku, sieci lub upstream serwera, nie stoi bezczynnie — obsługuje inne połączenia. To fundamentalna różnica w porównaniu z modelem Apache prefork, gdzie każde połączenie blokuje jeden proces.
| Aspekt | Nginx | Apache (prefork) |
|---|
| Model obsługi | Asynchroniczny, zdarzeniowy | Procesowy / wątkowy |
| Pamięć na połączenie | ~2,5 KB | ~2,5 MB (cały proces) |
| 10 000 jednoczesnych połączeń | ~25 MB RAM | ~25 GB RAM |
| Statyczne pliki | Bezpośrednia obsługa, bardzo szybka | Wolniejsza, przez moduł |
| Konfiguracja | Scentralizowany plik .conf | .htaccess (per-directory) |
| Dynamiczna zawartość | Przez FastCGI/proxy | Natywne moduły (mod_php) |
Do czego służy Nginx? Zastosowania
Nginx jest niezwykle wszechstronny i pełni wiele ról w infrastrukturze serwerowej:
Serwer HTTP (web server)
Podstawowa funkcja Nginx to serwowanie stron internetowych — zarówno statycznych plików HTML, CSS, JavaScript i obrazów, jak i dynamicznych aplikacji PHP, Python, Node.js czy Ruby za pośrednictwem FastCGI, uWSGI lub proxy.
Reverse proxy
Nginx reverse proxy to jedna z najpopularniejszych konfiguracji. Nginx stoi przed serwerami aplikacyjnymi (backend), przyjmuje żądania od klientów i przekazuje je do odpowiednich serwerów backendowych. Korzyści:
- Terminacja SSL/TLS — szyfrowanie obsługiwane przez Nginx, backend komunikuje się nieszyfrowanym HTTP
- Buforowanie (caching) — często żądane odpowiedzi serwowane z cache'a bez obciążania backendu
- Kompresja — odpowiedzi kompresowane gzip/brotli przed wysłaniem do klienta
- Bezpieczeństwo — ukrywa architekturę backendu przed klientami
Load balancer (równoważenie obciążenia)
Nginx może rozdzielać ruch między wieloma serwerami backendowymi, zapewniając wysoką dostępność i skalowalność. Obsługuje algorytmy: round-robin, least connections, IP hash i weighted. To funkcja kluczowa w środowiskach serwerowych opartych na Windows Server czy Linuxie.
Serwer proxy poczty
Mniej znana funkcja Nginx to proxy dla protokołów IMAP, POP3 i SMTP — przydatne w dużych infrastrukturach pocztowych.
API Gateway
W architekturach mikroserwisowych Nginx pełni rolę bramy API — routuje żądania do odpowiednich mikroserwisów, obsługuje rate limiting, uwierzytelnianie i transformację żądań.
Instalacja i konfiguracja Nginx — podstawy
Instalacja Nginx jest prosta na większości systemów operacyjnych. Na serwerach z systemem Windows Server Nginx jest dostępny jako natywny plik binarny, choć najczęściej jest używany na Linuxie.
Instalacja na Ubuntu/Debian
Na serwerach Linux z dystrybucją Ubuntu lub Debian wystarczy jedno polecenie: sudo apt install nginx. Po instalacji Nginx automatycznie startuje i zaczyna serwować domyślną stronę powitalną na porcie 80.
Struktura katalogów
Główne katalogi Nginx na Linuxie:
/etc/nginx/nginx.conf — główny plik konfiguracyjny/etc/nginx/sites-available/ — definicje serwerów wirtualnych/etc/nginx/sites-enabled/ — aktywne serwery (symlinki)/var/log/nginx/ — logi dostępu i błędów/var/www/html/ — domyślny katalog z plikami strony
Podstawowa konfiguracja — virtual host
Nginx konfiguruje się za pomocą bloków server (odpowiedników VirtualHostów w Apache). Każdy blok server definiuje domenę, port nasłuchiwania, lokalizację plików i reguły proxy. Konfiguracja jest przechowywana w plikach .conf, a nie w rozproszonych plikach .htaccess jak w Apache — co jest szybsze, ale wymaga reloadu po zmianach.
SSL/TLS z Let's Encrypt
Certyfikaty SSL można łatwo skonfigurować za pomocą narzędzia Certbot. Po uzyskaniu certyfikatu Let's Encrypt, Nginx obsługuje HTTPS z automatycznym przekierowaniem z HTTP. Współczesne konfiguracje powinny wymuszać TLS 1.2+ i preferować szyfrowanie z AEAD (AES-GCM, ChaCha20-Poly1305).
Nginx vs Apache — szczegółowe porównanie
Nginx i Apache to dwa najpopularniejsze serwery www, ale różnią się filozofią i zastosowaniem:
Wydajność i skalowalność
Nginx dominuje w scenariuszach z dużą liczbą jednoczesnych połączeń — serwowanie statycznych plików, reverse proxy, load balancing. Apache lepiej radzi sobie z dynamicznymi aplikacjami PHP dzięki natywnej integracji z mod_php, choć Nginx z PHP-FPM osiąga porównywalne lub lepsze wyniki.
Konfiguracja
Apache oferuje elastyczność konfiguracji per-directory przez pliki .htaccess — wygodne w hostingach współdzielonych, ale wolniejsze (Nginx musi sprawdzać .htaccess w każdym katalogu dla każdego żądania). Nginx wymaga centralnej konfiguracji i reloadu, co jest szybsze, ale mniej elastyczne w środowiskach współdzielonych.
Ekosystem modułów
Apache ma bogatszy ekosystem modułów dynamicznych, które można ładować i odładowywać bez rekompilacji. Moduły Nginx (przed wersją 1.9.11) wymagały kompilacji razem z serwerem. Od 2016 roku Nginx obsługuje moduły dynamiczne, ale ich dostępność jest mniejsza.
Najlepsze rozwiązanie — Nginx + Apache razem
Bardzo popularną konfiguracją jest ustawienie Nginx jako reverse proxy przed Apache. Nginx obsługuje statyczne pliki, terminację SSL, cache i load balancing, a Apache przetwarza dynamiczne żądania PHP. To połączenie łączy wydajność Nginx z elastycznością Apache.
Nginx w kontenerach i Kubernetes
Nginx jest jednym z najczęściej używanych obrazów na Docker Hub. Oficjalny obraz nginx:alpine waży zaledwie kilka megabajtów i stanowi idealne rozwiązanie dla konteneryzowanych aplikacji.
Nginx w Docker
Typowa konfiguracja Docker z Nginx obejmuje serwowanie aplikacji frontendowej (React, Vue, Angular) lub działanie jako reverse proxy dla mikroserwisów. Plik Dockerfile jest prosty — kopiujesz konfigurację i pliki statyczne do obrazu.
Nginx Ingress Controller w Kubernetes
Nginx Ingress Controller to jeden z najpopularniejszych kontrolerów ruchu w Kubernetes. Zarządza routingiem zewnętrznego ruchu HTTP/HTTPS do serwisów wewnątrz klastra. Alternatywą jest Nginx Proxy Manager — graficzny interfejs do zarządzania konfiguracją Nginx, popularny w środowiskach homelab.
W środowiskach produkcyjnych na Microsoft Azure Nginx Ingress Controller jest standardowym wyborem dla klastrów AKS (Azure Kubernetes Service).
Optymalizacja wydajności Nginx
Aby w pełni wykorzystać potencjał Nginx, warto zoptymalizować kilka kluczowych obszarów:
Worker processes i connections
Liczba procesów worker powinna odpowiadać liczbie rdzeni procesora CPU. Parametr worker_connections określa maksymalną liczbę jednoczesnych połączeń na worker. Przy 4 workerach i 1024 połączeniach każdy serwer może obsłużyć 4096 jednoczesnych połączeń.
Buforowanie (caching)
Nginx cache potrafi drastycznie zmniejszyć obciążenie serwerów backendowych. Cache proxy przechowuje odpowiedzi upstream w pamięci lub na dysku, serwując je bezpośrednio bez kontaktu z backendem. Szybki dysk SSD jest tutaj nieoceniony.
Kompresja Gzip/Brotli
Włączenie kompresji zmniejsza rozmiar przesyłanych danych nawet o 70–80%. Brotli (moduł ngx_brotli) oferuje lepszą kompresję niż Gzip przy porównywalnym obciążeniu procesora.
HTTP/2 i HTTP/3
Nginx obsługuje HTTP/2 (multipleksowanie, kompresja nagłówków) i eksperymentalnie HTTP/3 (QUIC). Włączenie HTTP/2 wymaga jedynie dodania parametru w bloku listen.
| Optymalizacja | Wpływ na wydajność | Trudność wdrożenia |
|---|
| Worker processes = CPU cores | Podstawowa, kluczowa | Łatwa (1 linia) |
| Gzip/Brotli compression | 60–80% mniejszy transfer | Łatwa |
| Proxy cache | 10–100x mniej żądań do backendu | Średnia |
| HTTP/2 | Szybsze ładowanie stron | Łatwa (1 parametr) |
| SSL session cache | Szybszy handshake TLS | Łatwa |
| Open file cache | Mniej operacji I/O na dysku | Łatwa |
Bezpieczeństwo Nginx — hardening i best practices
Nginx oferuje wiele mechanizmów bezpieczeństwa, które powinny być skonfigurowane w każdym środowisku produkcyjnym:
Ukrycie wersji serwera
Domyślnie Nginx wysyła nagłówek Server: nginx/x.x.x, ujawniając wersję oprogramowania. Dyrektywa server_tokens off; ukrywa numer wersji, utrudniając atakującym identyfikację znanych podatności. To jeden z pierwszych kroków hardeningu.
Rate limiting
Moduł ngx_http_limit_req_module pozwala ograniczyć liczbę żądań z jednego adresu IP w określonym czasie. To skuteczna ochrona przed atakami brute-force na panele logowania i przed nadmiernym obciążeniem API. Typowa konfiguracja: 10–30 żądań na sekundę na IP.
Nagłówki bezpieczeństwa
Nginx powinien dodawać kluczowe nagłówki bezpieczeństwa do każdej odpowiedzi HTTP:
- Strict-Transport-Security (HSTS) — wymusza HTTPS przez określony czas
- X-Frame-Options — chroni przed clickjacking
- X-Content-Type-Options — zapobiega MIME type sniffing
- Content-Security-Policy — kontroluje źródła zasobów strony
- Referrer-Policy — kontroluje informacje o referrerze
Ochrona przed DDoS
Nginx może ograniczać liczbę jednoczesnych połączeń z jednego IP (moduł limit_conn), buforować żądania do backendu i odrzucać podejrzane żądania. W połączeniu z Cloudflare lub innym CDN/WAF, Nginx stanowi skuteczną linię obrony przed atakami DDoS.
ModSecurity z Nginx
ModSecurity — popularny Web Application Firewall znany z Apache — jest dostępny również jako moduł dynamiczny dla Nginx. W połączeniu z zestawem reguł OWASP CRS chroni przed SQL injection, XSS, path traversal i innymi atakami na warstwie aplikacji.
FAQ — najczęściej zadawane pytania o Nginx
Czym jest Nginx i do czego służy?
Nginx to otwarto-źródłowy serwer HTTP, reverse proxy i load balancer. Służy do serwowania stron internetowych, przekazywania żądań do serwerów aplikacyjnych, równoważenia obciążenia i buforowania treści. Jest używany przez ponad 30% stron w internecie.
Czy Nginx jest darmowy?
Tak, Nginx Open Source jest darmowy na licencji BSD. Istnieje też komercyjna wersja NGINX Plus z dodatkowymi funkcjami (zaawansowany monitoring, active health checks, API management), ale podstawowa wersja jest w pełni funkcjonalna i bezpłatna.
Nginx vs Apache — co wybrać?
Nginx lepiej sprawdza się jako reverse proxy, load balancer i serwer statycznych plików. Apache oferuje większą elastyczność konfiguracji (pliki .htaccess) i bogatszy ekosystem modułów. W praktyce często używa się obu — Nginx przed Apache jako reverse proxy.
Jak sprawdzić wersję Nginx?
W terminalu wpisz nginx -v (wyświetli wersję) lub nginx -V (wyświetli wersję i parametry kompilacji). Na serwerach Windows Server plik nginx.exe obsługuje te same parametry.
Czym jest Nginx Proxy Manager?
Nginx Proxy Manager to graficzna nakładka na Nginx, umożliwiająca zarządzanie konfiguracją reverse proxy, certyfikatami SSL i hostami przez przeglądarkę. Popularna w środowiskach homelab i mniejszych wdrożeniach, gdzie programista nie chce edytować plików konfiguracyjnych ręcznie.
Podsumowanie
Nginx to niezastąpione narzędzie w arsenale każdego administratora i programisty. Jego asynchroniczna architektura, niskie zużycie zasobów i wszechstronność czynią go idealnym wyborem jako serwer www, reverse proxy i load balancer. W połączeniu z kontenerami Docker i orkiestratorami jak Kubernetes, Nginx stanowi fundament nowoczesnej infrastruktury webowej.
Niezależnie od tego, czy budujesz prostą stronę firmową, czy zarządzasz klastrem obsługującym miliony żądań — Nginx poradzi sobie z każdym wyzwaniem. Serwery, na których działa Nginx, wymagają odpowiedniego systemu operacyjnego — sprawdź Windows Server 2022 Standard w KluczeSoft, aby uzyskać licencję serwerową z natychmiastową dostawą klucza. Dowiedz się też więcej o budowie serwerów i wpływie procesora CPU na wydajność serwera www.
Najczesciej zadawane pytania
Co to jest Nginx?
Nginx to wydajny serwer HTTP, reverse proxy i load balancer — obsługuje ponad 30% najpopularniejszych stron internetowych.
Czym się różni Nginx od Apache?
Nginx jest szybszy przy obsłudze wielu połączeń jednocześnie. Apache jest bardziej elastyczny dzięki modułowi .htaccess.
Czy Nginx jest darmowy?
Tak, Nginx Open Source jest darmowy. Nginx Plus (wersja komercyjna) oferuje dodatkowe funkcje za opłatą.
Dodaj komentarz