Jak włączyć HTTP/2 w Apache na Ubuntu
Od powstania sieci WWW (www) protokół HTTP ewoluował przez lata, aby dostarczać bezpieczne i szybkie treści cyfrowe za pośrednictwem sieci Internet.
Najpowszechniej używaną wersją jest HTTP 1.1 i chociaż zawiera ona ulepszenia funkcji i optymalizacje wydajności mające na celu usunięcie niedociągnięć wcześniejszych wersji, brakuje jej kilku innych istotnych funkcji, którymi omówiono HTTP/2.
Jakie są ograniczenia protokołu HTTP/1.1?
Protokół HTTP/1.1 jest obarczony następującymi niedociągnięciami, które czynią go mniej idealnym, szczególnie w przypadku serwerów internetowych o dużym ruchu:
- Opóźnienia w ładowaniu stron internetowych z powodu długich nagłówków HTTP.
- HTTP/1.1 może wysłać tylko jedno żądanie dla każdego pliku na połączenie TCP.
- Biorąc pod uwagę, że protokół HTTP/1.1 przetwarza jedno żądanie na każde połączenie TCP, przeglądarki zmuszone są wysyłać zalew równoległych połączeń TCP, aby jednocześnie przetwarzać żądania. Prowadzi to do przeciążenia protokołu TCP i ostatecznie marnowania przepustowości oraz degradacji sieci.
Wyżej wymienione problemy często prowadziły do pogorszenia wydajności i wysokich kosztów ogólnych związanych z wykorzystaniem przepustowości. Aby rozwiązać te problemy, pojawił się protokół HTTP/2, który stanowi obecnie przyszłość protokołów HTTP.
Zalety korzystania z protokołu HTTP/2
Oferuje następujące korzyści:
- Kompresja nagłówka, która minimalizuje żądania klientów, a tym samym zmniejsza zużycie przepustowości. Rezultatem jest duża prędkość ładowania strony.
- Multipleksowanie kilku żądań za pośrednictwem jednego połączenia TCP. Zarówno serwer, jak i klient mogą podzielić żądanie HTTP na wiele ramek i przegrupować je na drugim końcu.
- Szybsze działanie sieci, co w konsekwencji prowadzi do lepszego rankingu SEO.
- Większe bezpieczeństwo, ponieważ większość popularnych przeglądarek ładuje protokół HTTP/2 przez HTTPS.
- HTTP/2 jest uważany za bardziej przyjazny dla urządzeń mobilnych dzięki funkcji kompresji nagłówka.
To powiedziawszy, włączymy HTTP/2 na Apache na Ubuntu 20.04 LTS i Ubuntu 18.04 LTS.
Warunki wstępne:
Zanim zaczniesz, upewnij się, że włączyłeś HTTPS na serwerze internetowym Apache, a następnie włącz HTTP/2. Dzieje się tak, ponieważ wszystkie popularne przeglądarki internetowe obsługują HTTP/2 zamiast HTTPS. Mam nazwę domeny wskazującą instancję na Ubuntu 20.04, na której działa serwer Apache zabezpieczony certyfikatem Let's Encrypt.
Zaleca się także posiadanie Apache 2.4.26 i nowszych wersji dla serwerów produkcyjnych, które zamierzają przejść na HTTP/2.
Aby sprawdzić wersję Apache, którą używasz, wykonaj polecenie:
apache2 -v
Z wyników widać, że używamy najnowszej wersji, czyli Apache 2.4.41 w momencie pisania tego artykułu.
Włącz protokół HTTP/2 na hoście wirtualnym Apache
Aby rozpocząć, najpierw upewnij się, że na serwerze internetowym działa HTTP/1.1. Możesz to zrobić w przeglądarce, otwierając sekcję narzędzi programistycznych w Google Chrome, używając kombinacji Ctrl +SHIFT + I
. Kliknij kartę „Sieć” i znajdź kolumnę „Protokół”.
Następnie włącz moduł HTTP/2 na Ubuntu, uruchamiając następujące polecenie.
sudo a2enmod http2
Następnie zlokalizuj i edytuj plik hosta wirtualnego SSL. Jeśli włączyłeś HTTPS przy użyciu Let's Encrypt, zostanie utworzony nowy plik z le-ssl.conf przyrostek.
sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf
Wstaw poniższą dyrektywę po tagu
.
Protocols h2 http/1.1
Aby zapisać zmiany, zrestartuj serwer WWW Apache.
sudo systemctl restart apache2
Aby sprawdzić, czy HTTP/2 jest włączony, pobierz nagłówki HTTP, używając następującego polecenia curl, jak pokazano.
curl -I --http2 -s https://domain.com/ | grep HTTP
Powinieneś otrzymać pokazane dane wyjściowe.
HTTP/2 200
W przeglądarce załaduj ponownie witrynę. Następnie wróć do narzędzi programistycznych i potwierdź protokół HTTP/2 oznaczony etykietą h2
w kolumnie „Protokół”.
Podczas korzystania z modułu mod_php z Apache
Jeśli używasz Apache razem z modułem mod_php, musisz przełączyć się na PHP-FPM. Dzieje się tak dlatego, że moduł mod_php korzysta z modułu prefork MPM, który nie jest obsługiwany przez HTTP/2. Musisz odinstalować prefork MPM i przejść na moduł mpm_event, który będzie obsługiwany przez HTTP/2.
Jeśli na przykład używasz modułu PHP 7.4 mod_php, wyłącz go, jak pokazano:
sudo a2dismod php7.4
Następnie wyłącz moduł prefork MPM.
sudo a2dismod mpm_prefork
Po wyłączeniu modułów włącz moduły Event MPM, Fast_CGI i setenvif, jak pokazano.
sudo a2enmod mpm_event proxy_fcgi setenvif
Zainstaluj PHP-FPM na Ubuntu
Następnie zainstaluj i uruchom PHP-FPM, jak pokazano.
sudo apt install php7.4-fpm
sudo systemctl start php7.4-fpm
Następnie włącz PHP-FPM, aby uruchamiał się podczas uruchamiania.
sudo systemctl enable php7.4-fpm
Następnie włącz PHP-FPM jako moduł obsługi PHP Apache i zrestartuj serwer WWW Apache, aby zmiany odniosły skutek.
sudo a2enconf php7.4-fpm
Włącz obsługę protokołu HTTP/2 w Apache Ubuntu
Następnie włącz moduł HTTP/2 tak jak poprzednio.
sudo a2enmod http2
Uruchom ponownie Apache, aby zsynchronizować wszystkie zmiany.
sudo systemctl restart apache2
Na koniec możesz sprawdzić, czy Twój serwer korzysta z protokołu HTTP/2, używając polecenia curl, jak pokazano.
curl -I --http2 -s https://domain.com/ | grep HTTP
Możesz także skorzystać z narzędzi programistycznych w przeglądarce Google Chrome, aby przeprowadzić weryfikację zgodnie z wcześniejszą dokumentacją. Dotarliśmy do końca tego przewodnika. Mamy nadzieję, że informacje okazały się dla Ciebie wartościowe i że możesz z łatwością włączyć HTTP/2 na Apache.