Wyszukiwanie w witrynie

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:

  1. Opóźnienia w ładowaniu stron internetowych z powodu długich nagłówków HTTP.
  2. HTTP/1.1 może wysłać tylko jedno żądanie dla każdego pliku na połączenie TCP.
  3. 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:

  1. 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.
  2. 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.
  3. Szybsze działanie sieci, co w konsekwencji prowadzi do lepszego rankingu SEO.
  4. Większe bezpieczeństwo, ponieważ większość popularnych przeglądarek ładuje protokół HTTP/2 przez HTTPS.
  5. 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.