Как да активираме HHTP2 в Apache на Ubuntu server 16.04

Протокола HTTP/2 в Интернет
HTTP/2 е новата версия на най използвания протокол за пренос на данни в Инернет (HTTP). HTTP/2 е с увеличена производителност, намалено потребление на трафик и нова, оптимизирана система за комуникацията клиент-сървър.

Тъй като в стандартния пакет на Apache в Ubuntu server 16.04 не е добавен HTTP2 модула, трябва да използваме друго хранилище за софтуер (в случая https://launchpad.net/%7Eondrej/+archive/ubuntu/apache2) от което ще го инсталираме.

Нужен софтуер

sudo apt-get install software-properties-common python-software-properties

Добавяне на хранилището

sudo add-apt-repository ppa:ondrej/apache2

Обновяваме базата

sudo apt-get update

Инсталираме Apache

sudo apt-get install apache2

Зреждаме модула http2 на Apache

sudo a2enmod http2

В конфигурациония файл на Apache /etc/apache2/apache2.conf ще добавим реда

Protocols h2 h2c http/1.1

След което ще рестартираме уеб сървъра

sudo systemctl restart apache2.service

Нека в Apache създадем нов конфигурационен файл за сайт (разбира се трябва да имаме описан DNS A запис за него)

sudo nano /etc/apache2/sites-available/http2.conf

И копираме директивата:

<VirtualHost *:80>
        ServerName http2.itservice-bg.net
        ServerAdmin support@itservice-bg.net
        DocumentRoot /var/www/http2
        ErrorLog ${APACHE_LOG_DIR}/http2-error.log
        CustomLog ${APACHE_LOG_DIR}/http2-access.log combined
</VirtualHost>

След което ще създадем директорията и индекс файла на сайта

sudo mkdir /var/www/http2
sudo nano /var/www/http2/index.html

Ще копираме html кода за нашия нов сайт

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>HTTP/2 Protocol</title>
</head>
<body>
<h2>HTTP/2 Protocol</h2>
<p>This is a test page for the htpp/2 protocol</p>                         
</body>
</html>

Ще добавим сайта в базата на Apache

sudo a2ensite http2.conf

След което ще обновим конфигурацията на уеб сървъра

sudo systemctl reload apache2

И накрая отваряме сайта с любим браузер

Това обаче не е достатъчно както се вижда на картинката по горе защото при HTTP/2 протокола https:// криптираната връзка е задължителна и ако не е, вие ще ползвате HTTP/1.1. Поради тази причина ще инсталираме letsencrypt за да получим валиден сертификат които ще ни криптира връзката към сайта.

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache

След което ще стартираме certbot скрипта който на практика е съветник за конфигурирането на сертификатите на letsencrypt в нашия сървър

sudo certbot --apache

Cerbot ще ни прекара през няколко лесни стъпки:

След всичко това ни остана да проверим нашия браузер комуникира ли с apache сървъра през HTTP/2 протокола.

До тук всичко изглежда наред обаче ние знаем, че пълно щастие няма и въобще не ме учуди когато повторих операцията на един “продукшън сървър” и HTTP/2 не запали, сайтовете си останаха с HTTP/1.1. Оказа се, че в Apache 2.4.27 mpm (Multi-Processing Module) модула не поддържа mod_http2 което разбрах от error лога на уеб сървъра. Интелигентно решение има, просто не се стига лесно до него:

sudo apachectl stop
sudo apt-get install php7.0-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo a2dismod php7.0
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo apachectl start

Това ще изчисти проблема и “уърнинга” в error лога на уеб сървъра ще изчезне както и сайтовете ще запалят с http/2 протокола.

Leave a Reply

Your email address will not be published. Required fields are marked *