Тъй като в стандартния пакет на 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 протокола.