Jak zainstalować Nginx z obsługą HTTP/2 na Ubuntu (Kompletny przewodnik)
Nginx jest jednym z najszerzej wdrażanych serwerów internetowych na świecie, słynący z wyjątkowej wydajności, niskiego zużycia pamięci i zdolności obsługi tysięcy równoczesnych połączeń. W połączeniu z HTTP/2, Nginx staje się jeszcze bardziej potężną platformą — umożliwiając multipleksowanie żądań, kompresję nagłówków, server push i dramatycznie skrócone czasy ładowania stron.
Ten kompleksowy przewodnik przeprowadzi Cię przez każdy krok wymagany do zainstalowania Nginx z pełną obsługą HTTP/2 na Ubuntu 20.04 i Ubuntu 22.04 LTS, od początkowej konfiguracji poprzez konfigurację SSL, optymalizację bloków serwera i weryfikację na żywo.
> Dla kogo jest ten przewodnik? Administratorzy systemów, deweloperzy i właściciele witryn, którzy chcą zmaksymalizować wydajność sieci na serwerze Linux. Jeśli prowadzisz swoją witrynę na planie VPS Hosting lub Dedicated Server, ten samouczek ma bezpośrednie zastosowanie do Twojego środowiska.
Spis treści
- Co to jest HTTP/2 i dlaczego ma to znaczenie?
- Wymagania wstępne
- Krok 1 — Aktualizacja indeksu pakietów systemowych
- Krok 2 — Instalacja Nginx
- Krok 3 — Instalacja OpenSSL
- Krok 4 — Uzyskanie bezpłatnego certyfikatu SSL za pomocą Let’s Encrypt
- Krok 5 — Konfiguracja Nginx dla HTTP/2
- Krok 6 — Optymalizacja konfiguracji Nginx HTTP/2
- Krok 7 — Test konfiguracji Nginx
- Krok 8 — Ponowne uruchomienie Nginx i zastosowanie zmian
- Krok 9 — Weryfikacja, czy HTTP/2 jest aktywny
- Rozwiązywanie typowych problemów
- Podsumowanie
Co to jest HTTP/2 i dlaczego ma to znaczenie?
HTTP/2 jest drugą główną wersją protokołu Hypertext Transfer Protocol, standaryzowaną w RFC 7540. Został zaprojektowany w celu rozwiązania ograniczeń wydajności HTTP/1.1, który jest używany od 1997 roku.
Kluczowe zalety HTTP/2 w stosunku do HTTP/1.1:
| Funkcja | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Multipleksowanie | Jedno żądanie na połączenie | Wiele równoczesnych żądań |
| Kompresja nagłówków | Nagłówki w zwykłym tekście | Kompresja HPACK |
| Server push | Nieobsługiwane | Obsługiwane |
| Protokół binarny | Tekstowy | Binarne framing |
| Ponowne użycie połączenia | Ograniczone | W pełni trwałe |
| Opóźnienie | Wyższe | Znacznie zmniejszone |
Dla właścicieli witryn włączenie HTTP/2 przekłada się bezpośrednio na szybsze ładowanie stron, lepsze wyniki Core Web Vitals i poprawione rankingi SEO — ponieważ Google używa szybkości strony jako sygnału rankingowego.
> Ważne: HTTP/2 wymaga HTTPS (TLS/SSL). Nie możesz uruchamiać HTTP/2 przez nieszyfrowane połączenie w żadnej nowoczesnej przeglądarce. Dlatego uzyskanie certyfikatu SSL jest obowiązkowym krokiem w tym przewodniku. Jeśli potrzebujesz zaufanego certyfikatu dla swojej domeny, AlexHost oferuje Certyfikaty SSL dla wszystkich przypadków użycia.
Wymagania wstępne
Zanim zaczniesz, upewnij się, że masz na miejscu następujące elementy:
- Serwer z systemem Ubuntu 20.04 LTS lub Ubuntu 22.04 LTS (kroki są prawie identyczne dla obu)
- Użytkownik bez uprawnień root z
sudouprawnieniami lub bezpośredni dostęp root - Zarejestrowana nazwa domeny wskazująca na adres IP Twojego serwera za pomocą rekordu A
- Porty 80 i 443 otwarte w zaporze (UFW lub iptables)
- Podstawowa znajomość wiersza poleceń Linux
Jeśli nie masz jeszcze domeny, możesz zarejestrować ją bezpośrednio za pośrednictwem Rejestracji Domen AlexHost i wskazać ją na swój serwer w ciągu kilku minut.
Krok 1 — Aktualizacja indeksu pakietów systemowych
Zawsze zacznij od odświeżenia indeksu pakietów, aby upewnić się, że instalujesz najnowsze dostępne wersje całego oprogramowania:
sudo apt update && sudo apt upgrade -yTo polecenie aktualizuje lokalną listę pakietów i uaktualnia wszystkie przestarzałe pakiety już zainstalowane w Twoim systemie.
Krok 2 — Instalacja Nginx
Instalacja pakietu Nginx
Domyślne repozytoria Ubuntu zawierają stabilną wersję Nginx. Zainstaluj ją za pomocą:
sudo apt install nginx -yUruchomienie usługi Nginx
Po zainstalowaniu uruchom usługę Nginx natychmiast:
sudo systemctl start nginxWłączenie Nginx do automatycznego uruchamiania przy starcie
Upewnij się, że Nginx uruchamia się automatycznie za każdym razem, gdy serwer się restartuje:
sudo systemctl enable nginxWeryfikacja, czy Nginx jest uruchomiony
Potwierdź, że usługa jest aktywna i uruchomiona:
sudo systemctl status nginxPowinieneś zobaczyć dane wyjściowe podobne do:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since ...Zezwolenie na Nginx przez zaporę
Jeśli UFW jest aktywny na Twoim serwerze, zezwól na ruch HTTP i HTTPS:
sudo ufw allow 'Nginx Full'
sudo ufw statusNginx Full otwiera zarówno port 80 (HTTP) jak i port 443 (HTTPS), które są wymagane dla tej konfiguracji.
Krok 3 — Instalacja OpenSSL
HTTP/2 zależy od TLS, który z kolei zależy od OpenSSL. Zainstaluj go, aby upewnić się, że wszystkie zależności kryptograficzne są dostępne:
sudo apt install openssl -ySprawdź zainstalowaną wersję:
openssl versionPowinieneś zobaczyć dane wyjściowe takie jak OpenSSL 3.0.x lub podobne. Każda wersja powyżej 1.0.2 w pełni obsługuje zestawy szyfrów wymagane dla HTTP/2.
Krok 4 — Uzyskanie bezpłatnego certyfikatu SSL za pomocą Let’s Encrypt
Let’s Encrypt zapewnia bezpłatne, automatycznie odnawialne certyfikaty SSL/TLS zaufane przez wszystkie główne przeglądarki. Klient Certbot czyni cały proces prostym.
Instalacja Certbot i wtyczki Nginx
sudo apt install certbot python3-certbot-nginx -yŻądanie certyfikatu SSL
Zastąp your_domain.com swoją rzeczywistą zarejestrowaną nazwą domeny:
sudo certbot --nginx -d your_domain.com -d www.your_domain.comCertbot będzie:
- Weryfikować własność domeny za pośrednictwem wyzwania HTTP
- Wydawać certyfikat od Let’s Encrypt
- Automatycznie modyfikować konfigurację Nginx do użycia certyfikatu
- Konfigurować przekierowania HTTPS z HTTP
Postępuj zgodnie z interaktywnymi monitami. Gdy zostaniesz poproszony, czy przekierować ruch HTTP do HTTPS, wybierz opcję 2 (Redirect) — to jest zalecany wybór.
Weryfikacja automatycznego odnawiania certyfikatu
Certyfikaty Let’s Encrypt wygasają po 90 dniach. Certbot instaluje zadanie cron lub timer systemd w celu ich automatycznego odnowienia. Przetestuj proces odnowienia za pomocą suchego uruchomienia:
sudo certbot renew --dry-runJeśli nie pojawią się żadne błędy, automatyczne odnowienie jest prawidłowo skonfigurowane.
> Wskazówka: W środowiskach produkcyjnych z wieloma domenami lub certyfikatami wildcard rozważ Dedicated Server dla pełnej kontroli nad infrastrukturą SSL.
Krok 5 — Konfiguracja Nginx dla HTTP/2
Teraz, gdy SSL jest na miejscu, musisz jawnie włączyć HTTP/2 w konfiguracji bloku serwera Nginx.
Otwieranie pliku konfiguracji Nginx
Domyślna konfiguracja witryny znajduje się w:
sudo nano /etc/nginx/sites-available/defaultJeśli utworzyłeś niestandardowy blok serwera dla swojej domeny (zalecane), otwórz zamiast tego ten plik:
sudo nano /etc/nginx/sites-available/your_domain.comAktualizacja bloku serwera w celu włączenia HTTP/2
Zlokalizuj dyrektywę listen 443 ssl;. Certbot dodał to automatycznie. Zmodyfikuj ją, aby uwzględnić http2:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your_domain.com www.your_domain.com;
# SSL Certificate paths (set by Certbot)
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/your_domain.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP to HTTPS redirect block
server {
listen 80;
listen [::]:80;
server_name your_domain.com www.your_domain.com;
return 301 https://$host$request_uri;
}Krytyczna zmiana znajduje się w linii listen: dodanie http2 po ssl aktywuje protokół HTTP/2 dla tego wirtualnego hosta.
Zapisz i wyjdź
Naciśnij CTRL + X, następnie Y, następnie Enter aby zapisać plik i wyjść z edytora nano.
Krok 6 — Optymalizacja konfiguracji Nginx HTTP/2
Samo włączenie HTTP/2 to dobry początek, ale zastosowanie dodatkowych optymalizacji zapewnia maksymalną wydajność z Twojej konfiguracji.
Zalecane ustawienia SSL i wydajności
Dodaj lub zweryfikuj następujące dyrektywy wewnątrz bloku server:
# Modern TLS protocols only
ssl_protocols TLSv1.2 TLSv1.3;
# Strong cipher suites compatible with HTTP/2
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# SSL session caching for performance
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# Additional security headers
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# Gzip compression (complements HTTP/2)
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;> Uwaga na temat HTTP/2 i Gzip: HTTP/2 używa własnej kompresji nagłówków HPACK, ale włączenie Gzip dla treści odpowiedzi nadal zapewnia znaczne oszczędności przepustowości dla zasobów tekstowych.
Krok 7 — Test konfiguracji Nginx
Nigdy nie restartuj Nginx bez wcześniejszego testowania konfiguracji pod kątem błędów składni. Nieprawidłowo skonfigurowany plik może wyłączyć cały serwer internetowy.
Uruchom wbudowany test konfiguracji:
sudo nginx -tPomyślny test daje wynik:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulJeśli widzisz jakieś błędy, uważnie przejrzyj dane wyjściowe. Komunikat o błędzie będzie zawierać nazwę pliku i numer linii, gdzie problem został wykryty.
Krok 8 — Ponowne uruchomienie Nginx i zastosowanie zmian
Po pomyślnym przejściu testu konfiguracji, uruchom ponownie Nginx, aby zastosować wszystkie zmiany:
sudo systemctl restart nginxAlternatywnie, jeśli wolisz przeładowanie bez przestojów (które stosuje zmiany konfiguracji bez przerywania aktywnych połączeń):
sudo systemctl reload nginxW przypadku włączenia HTTP/2 w szczególności zalecane jest pełne ponowne uruchomienie, aby upewnić się, że nowe ustawienia protokołu są w pełni zainicjowane.
Krok 9 — Weryfikacja, czy HTTP/2 jest aktywny
Po ponownym uruchomieniu Nginx potwierdź, że HTTP/2 jest faktycznie obsługiwany klientom, używając jednej z poniższych metod.
Metoda 1: Używanie curl
Narzędzie wiersza poleceń curl może raportować wersję protokołu używaną:
curl -I --http2 https://your_domain.comPoszukaj nagłówka odpowiedzi:
HTTP/2 200Jeśli widzisz HTTP/2 200, HTTP/2 działa prawidłowo.
Metoda 2: Używanie polecenia OpenSSL
openssl s_client -connect your_domain.com:443 -alpn h2W danych wyjściowych poszukaj:
ALPN protocol: h2h2 jest identyfikatorem ALPN dla HTTP/2. Jeśli to widzisz, Twój serwer prawidłowo reklamuje obsługę HTTP/2 podczas uzgadniania TLS.
Metoda 3: Używanie narzędzi deweloperskich przeglądarki
- Otwórz swoją witrynę w Google Chrome lub Mozilla Firefox
- Naciśnij
F12aby otworzyć Narzędzia deweloperskie - Przejdź do karty Network
- Przeładuj stronę (
F5lubCtrl+R) - Kliknij prawym przyciskiem myszy na dowolnym nagłówku kolumny na liście żądań i włącz kolumnę Protocol
- Powinieneś zobaczyć
h2wymieniony jako protokół dla żądań Twojej domeny
Metoda 4: Używanie narzędzia testowania HTTP/2 online
Odwiedź https://tools.keycdn.com/http2-test i wpisz swoją domenę. Narzędzie potwierdzi, czy HTTP/2 jest aktywny i dostarczy dodatkowe szczegóły dotyczące konfiguracji TLS Twojego serwera.
