15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
31.10.2024
1 +1

Co to jest serwer WWW Nginx? Kompletny przewodnik po instalacji, konfiguracji i najlepszych praktykach

Nginx (pronounced "engine-x") stał się jednym z najczęściej wdrażanych serwerów internetowych w sieci — i to z dobrego powodu. Od zasilania platform e-commerce o dużym ruchu po pełnienie roli odwrotnego proxy dla złożonych architektur mikrousług, Nginx zapewnia wyjątkową wydajność, skalowalność i bezpieczeństwo w lekkim, wydajnym pakiecie.

W tym kompleksowym przewodniku rozłożymy dokładnie, czym jest Nginx, jak działa jego architektura, jak porównuje się z Apache i jak uruchomić go na własnym serwerze — wraz z najlepszymi praktykami bezpieczeństwa i wydajności.

Czym jest Nginx?

Nginx to bezpłatne, otwarte oprogramowanie serwera internetowego, które dostarcza strony internetowe i zawartość aplikacji użytkownikom przez Internet. Pierwotnie wydany w 2004 roku przez Igora Sysoeva w celu rozwiązania "problemu C10K" (obsługa 10 000 jednoczesnych połączeń), Nginx od tego czasu rozwinął się w pełnofunkcjonalną platformę używaną przez miliony stron internetowych na całym świecie.

To, co wyróżnia Nginx od tradycyjnych serwerów internetowych, to jego architektura oparta na zdarzeniach, asynchroniczna, nieblokująca. Zamiast uruchamiać nowy wątek lub proces dla każdego przychodzącego żądania (jak robią starsze serwery), Nginx używa małej liczby procesów roboczych do obsługi tysięcy jednoczesnych połączeń przy minimalnym obciążeniu pamięci i CPU.

To czyni Nginx idealnym wyborem, niezależnie od tego, czy uruchamiasz prostą statyczną stronę internetową na Shared Web Hosting czy zarządzasz stosem aplikacji o wysokiej dostępności na Dedicated Server.

Kluczowe cechy Nginx

⚡ Wysoka wydajność

Nginx jest niezwykle wydajny w serwowaniu zawartości statycznej — pliki HTML, arkusze stylów CSS, pakiety JavaScript, obrazy i wideo — przy bardzo niskim zużyciu zasobów. Nawet pod dużym obciążeniem utrzymuje szybkie czasy odpowiedzi.

⚖️ Równoważenie obciążenia

Nginx może rozprowadzać przychodzący ruch między wiele serwerów zaplecza, używając kilku algorytmów (round-robin, najmniej połączeń, hash IP), optymalizując wykorzystanie zasobów i eliminując pojedyncze punkty awarii.

🔁 Odwrotny proxy

Jako odwrotny proxy, Nginx znajduje się przed serwerami aplikacji zaplecza, przekazując żądania klientów, jednocześnie chroniąc te serwery przed bezpośrednią ekspozycją na Internet. Dodaje to krytyczną warstwę bezpieczeństwa i kontroli.

🔒 Zakończenie SSL/TLS

Nginx natywnie obsługuje szyfrowanie SSL/TLS, przenosząc obciążenie obliczeniowe szyfrowania z serwerów aplikacji. Połączenie Nginx z zaufanym SSL Certificate zapewnia, że wszystkie dane przesyłane są szyfrowane i Twoja witryna uzyskuje sygnały zaufania, których oczekują użytkownicy i wyszukiwarki.

🌐 Szeroka kompatybilność aplikacji

Nginx bezproblemowo integruje się z nowoczesnymi językami programowania i frameworkami, w tym PHP (poprzez PHP-FPM), Python (Django, Flask), Ruby on Rails, Node.js i Go.

🗜️ Kompresja Gzip i buforowanie

Wbudowana obsługa kompresji Gzip i buforowania odpowiedzi dramatycznie zmniejsza użycie przepustowości i przyspiesza dostarczanie zawartości użytkownikom końcowym.

Jak działa Nginx? Zrozumienie architektury

Aby docenić, dlaczego Nginx działa tak dobrze, warto zrozumieć jego wewnętrzny model.

Oparte na zdarzeniach, nieblokujące I/O

Tradycyjne serwery internetowe, takie jak starsze wersje Apache, używają modelu proces-na-połączenie lub wątek-na-połączenie. Każde nowe żądanie uruchamia nowy proces lub wątek, który zużywa pamięć i CPU. Przy wysokiej współbieżności to podejście nie skaluje się dobrze.

Nginx przyjmuje fundamentalnie inne podejście:

  1. Pojedynczy proces główny odczytuje konfigurację i zarządza procesami roboczymi.
  2. Wiele procesów roboczych (zwykle jeden na rdzeń CPU) każdy obsługuje tysiące połączeń, używając nieblokującego I/O i pętli zdarzeń.
  3. Gdy proces roboczy czeka na powolną operację (taką jak odczyt dysku lub odpowiedź upstream), nie siedzi bezczynnie — przetwarza inne zdarzenia w kolejce.

Ta architektura pozwala pojedynczej instancji Nginx obsługiwać dziesiątki tysięcy jednoczesnych połączeń przy zużyciu ułamka pamięci, którą wymagałby serwer oparty na wątkach.

Przepływ przetwarzania żądań

Client Request
      ↓
Nginx (Master Process)
      ↓
Worker Process (Event Loop)
      ↓
Static File? → Serve directly from disk
      ↓
Dynamic Content? → Forward to upstream (PHP-FPM, Node.js, etc.)
      ↓
Response returned to client

Typowe przypadki użycia Nginx

Przypadek użyciaOpis
Serwer internetowySerwuj statyczne i dynamiczne strony internetowe z dużą szybkością i niezawodnością
Odwrotny proxyKieruj żądania do serwerów aplikacji zaplecza, poprawiając bezpieczeństwo i wydajność
Równoważnik obciążeniaRozprowadzaj ruch między pule serwerów dla wysokiej dostępności
Brama APIZarządzaj, kieruj i ograniczaj ruch API do mikrousług
Przesyłanie mediówEfektywnie przesyłaj zawartość wideo i audio
Zakończenie SSLObsługuj szyfrowanie HTTPS przed przekazaniem żądań do serwerów zaplecza

Nginx vs. Apache: Który wybrać?

Zarówno Nginx jak i Apache to serwery internetowe klasy produkcyjnej, ale nadają się do różnych scenariuszy. Oto bezpośrednie porównanie:

FunkcjaNginxApache
ArchitekturaOparta na zdarzeniach, asynchronicznaOparta na procesach/wątkach
Zawartość statycznaNiezwykle szybkaUmiarkowana
Zawartość dynamicznaPoprzez procesory zewnętrzne (PHP-FPM)Natywnie poprzez moduły (mod_php)
WspółbieżnośćDoskonała (tysiące połączeń)Dobra, ale bardziej zasobochłonna
KonfiguracjaScentralizowana, czysty składniaRozproszona (obsługa .htaccess)
Ekosystem modułówRosnący, wbudowanyRozległy, dynamicznie ładowalny
Użycie pamięciNiskieWyższe pod obciążeniem
Najlepsze dlaWitryny o dużym ruchu, proxy, APIHosting współdzielony, starsze aplikacje

Podsumowanie: W przypadku witryn o dużym ruchu, konfiguracji odwrotnego proxy i nowoczesnych stosów aplikacji, Nginx jest zwykle lepszym wyborem. Apache pozostaje popularne w środowiskach, które w dużym stopniu opierają się na plikach .htaccess lub określonych modułach Apache.

Jeśli chcesz mocy Nginx z przyjaznym dla użytkownika interfejsem zarządzania, rozważ VPS z cPanel lub zapoznaj się z pełnym zakresem VPS Control Panels dostępnych w rozwiązaniach hostingowych AlexHost.

Jak zainstalować i skonfigurować Nginx na Linux

Przejdziemy przez kompletną, praktyczną konfigurację Nginx na serwerze Linux.

Wymagania wstępne

  • Serwer Linux z systemem Ubuntu, Debian, CentOS lub RHEL
  • Dostęp root lub sudo
  • Zarejestrowana nazwa domeny (możesz zarejestrować domenę poprzez AlexHost)

Krok 1: Zainstaluj Nginx

Na Ubuntu / Debian:

sudo apt update
sudo apt install nginx -y

Na CentOS / RHEL:

sudo yum install epel-release -y
sudo yum install nginx -y

Krok 2: Uruchom i włącz Nginx

Uruchom usługę i skonfiguruj ją do automatycznego uruchomienia przy starcie systemu:

sudo systemctl start nginx
sudo systemctl enable nginx

Sprawdź, czy działa:

sudo systemctl status nginx

Powinieneś zobaczyć active (running) w wynikach. Możesz również otworzyć adres IP serwera w przeglądarce — zobaczysz domyślną stronę powitalną Nginx.

Krok 3: Skonfiguruj zaporę sieciową

Zezwól na ruch HTTP i HTTPS przez zaporę sieciową:

UFW (Ubuntu/Debian):

sudo ufw allow 'Nginx Full'
sudo ufw reload

Firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Krok 4: Zrozum strukturę konfiguracji Nginx

Konfiguracja Nginx jest zorganizowana w następujący sposób:

/etc/nginx/
├── nginx.conf              ← Main configuration file
├── sites-available/        ← Virtual host config files (inactive)
│   └── example.com
├── sites-enabled/          ← Symlinks to active virtual hosts
│   └── example.com → ../sites-available/example.com
├── conf.d/                 ← Additional configuration snippets
└── snippets/               ← Reusable config fragments

Główny plik nginx.conf definiuje ustawienia globalne (procesy robocze, rejestrowanie, typy MIME), podczas gdy poszczególne bloki serwera (odpowiednik wirtualnych hostów Apache w Nginx) definiują sposób obsługi każdej domeny lub aplikacji.

Krok 5: Utwórz blok serwera dla swojej domeny

Utwórz nowy plik konfiguracji dla Twojej witryny:

sudo nano /etc/nginx/sites-available/example.com

Wklej następującą konfigurację (zastąp example.com swoją rzeczywistą domeną):

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

    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

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

Włącz witrynę, tworząc dowiązanie symboliczne:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Przetestuj konfigurację pod kątem błędów składni:

sudo nginx -t

Przeładuj Nginx, aby zastosować zmiany:

sudo systemctl reload nginx

Krok 6: Utwórz katalog główny sieci Web

sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo "<h1>Welcome to example.com</h1>" > /var/www/example.com/html/index.html

Krok 7: Włącz HTTPS z SSL/TLS

Serwowanie witryny przez HTTPS jest niezbędne dla bezpieczeństwa, SEO i zaufania użytkowników. Najłatwiej dodać bezpłatny SSL poprzez Certbot (Let’s Encrypt):

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

Certbot automatycznie zmodyfikuje blok serwera Nginx, aby obsługiwać HTTPS i skonfiguruje automatyczne odnawianie certyfikatu.

W środowiskach produkcyjnych i witrynach e-commerce rozważ premium SSL Certificate dla rozszerzonej walidacji i gwarancji.

Konfiguracja Nginx dla typowych scenariuszy

Konfiguracja odwrotnego proxy

Przekazuj żądania do aplikacji Node.js działającej na porcie 3000:

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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_cache_bypass $http_upgrade;
    }
}

Konfiguracja równoważenia obciążenia

Rozprowadzaj ruch między trzy serwery zaplecza:

upstream backend_pool {
    least_conn;  # Use least-connections algorithm
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_pool;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Integracja PHP-FPM

Serwuj aplikację PHP (np. WordPress):

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

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

    location ~ /.ht {
        deny all;
    }
}

Najlepsze praktyki bezpieczeństwa dla Nginx

Zabezpieczenie instalacji Nginx jest tak samo ważne, jak prawidłowa konfiguracja. Postępuj zgodnie z tymi krokami hartowania:

1. Ukryj informacje o wersji Nginx

Ujawnienie wersji serwera pomaga atakującym w kierowaniu znanych luk w zabezpieczeniach. Wyłącz to:

# In the http block of nginx.conf
server_tokens off;

2. Włącz SSL/TLS z silnymi zestawami szyfrów

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;

3. Dodaj nagłówki bezpieczeństwa

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

4. Ogranicz rozmiar żądania i szybkość

Chroń się przed atakami DDoS i nadużyciami:

# Limit body size (e.g., for file uploads)
client_max_body_size 10M;

# Rate limiting zone
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

# Apply rate limiting to a location
location /api/ {
    limit_req zone=api_limit burst=20 nodelay;
}

5. Ogranicz dostęp za pomocą białej listy IP

location /admin/ {
    allow 203.0.113.0/24;   # Your office IP range
    deny all;
}

6. Wyłącz niepotrzebne metody HTTP

if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 444;
}

Najlepsze praktyki optymalizacji wydajności

Włącz kompresję Gzip

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

Skonfiguruj buforowanie przeglądarki

location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Włącz HTTP/2

HTTP/2 znacznie poprawia wydajność ładowania strony poprzez multipleksowanie i kompresję nagłówków:

listen 443 ssl http2;

Dostrojenie procesów roboczych

# In nginx.conf
worker_processes auto;          # Match number of CPU cores
worker_connections 1024;        # Max connections per worker
use epoll;                      # Efficient event model on Linux
multi_accept on;                # Accept multiple connections at once

Monitorowanie Nginx

Obserwuj stan zdrowia serwera Nginx za pomocą tych narzędzi i technik:

Włącz moduł statusu Nginx

location /nginx_status {
    stub_status on;
    allow 127.0.0.1;
    deny all;
}

Uzyskaj dostęp lokalnie:

curl http://127.0.0.1/nginx_status

Przydatne polecenia analizy dzienników

# View real-time access logs
sudo tail -f /var/log/nginx/access.log

# Find the top 10 most requested URLs
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# Find the top 10 IP addresses by request count
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

Wybór odpowiedniego hostingu dla Nginx

Nginx działa najlepiej, gdy ma dedykowane zasoby i pełny dostęp root do konfiguracji. Oto krótki przewodnik do dopasowania środowiska hostingu do Twoich potrzeb:

ScenariuszRekomendowany hosting
Blog osobisty lub mała witryna
15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij