Как да активираме HHTP2 в Apache на Ubuntu server 16.04
Тъй като в стандартния пакет на 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 протокола.




