Jak povolit HTTP/2 na Ubuntu nebo Debian Linux Apache2 serveru

Protokol HTTP/2 na Ubuntu nebo Debian servru. HTTP/2.0 je zásadní revizí síťového protokolu HTTP používaného v síti internet. Byl odvozen z dřívějšího experimentálního protokolu SPDY, který původně vyvinula společnost Google. Protokol HTTP/2 vyvinula pracovní skupina HTTP (nazývaná také httpbis, kde „bis“ znamená „dvakrát“) skupiny IETF (Internet Engineering Task Force). HTTP/2 je první novou verzí protokolu HTTP od verze HTTP/1.1, která byla standardizována v dokumentu RFC 2068 v roce 1997.

Pracovní skupina předložila HTTP/2 řídicí skupině pro internetové inženýrství (IESG) k posouzení jako navrhovanou normu v prosinci 2014 a IESG ji schválila ke zveřejnění jako navrhovanou normu 17. února 2015 (a v únoru 2020 byla aktualizována s ohledem na TLS 1.3). Specifikace HTTP/2 byla zveřejněna jako RFC 7540 dne 14. května 2015.

Standardizační úsilí podporovaly prohlížeče Chrome, Opera, Firefox, Internet Explorer 11, Safari, Amazon Silk a Edge. Většina hlavních prohlížečů přidala podporu HTTP/2 do konce roku 2015. Tuto možnost má přibližně 97 % používaných webových prohlížečů. V říjnu 2021 podporovalo protokol HTTP/2 47 % (po dosažení vrcholu těsně nad 50 %) z 10 milionů nejnavštěvovanějších webových stránek. Jeho navrhovaným nástupcem je HTTP/3, což je zásadní revize, která vychází z konceptů zavedených HTTP/2.

Ubuntu HTTP/2 apache2 postup

Instalovaný Apache 2 4.17 nebo vyšší
Instalovaný a aktivní SSL modul

Instalovanou verzi apache2 a SSL skontrolujeme pomocí

apache2 -v
apachectl -M | grep ssl

Vypneme mod_php

a2dismod php7.3 (nebo 8.. dle verze kterou používáte jako primární)

Vypneme apache MPM Prefork a zapneme apache MPM event

a2dismod mpm_prefork
a2enmod mpm_event

Zapneme HTTP/2 Apache modul

a2enmod http2

Kontrola bežících modulů ssl a http/2

apache2ctl -M | grep 'ssl\|http2'

Skontrolujeme soubor

/etc/apache2/apache2.conf

zda-li obsahuje řádek

Protocols h2 http/1.1

Restartujeme Apache server

systemctl restart apache2

Oprava pro ISPconfig uživatele Roundcube, Squiremail, phpMyAdmin

Roundcube opravu po aktivaci HTTP/2 nepotřebuje. Horši to je u phpMyAdmin web rozhraní kde se načte pouze text.

setUserValue( null, 'FontSize', $_POST['set_fontsize'], '82%' ); header('Location: index.php' . Url::getCommonRaw()); exit(); } // if user selected a theme if (isset($_POST['set_theme'])) { $tmanager = ThemeManager::getInstance(); $tmanager->setActiveTheme($_POST['set_theme']); $tmanager->setThemeCookie(); $userPreferences = new UserPreferences(); $prefs = $userPreferences->load(); $prefs["config_data"]["ThemeDefault"] = $_POST['set_theme']; 

$userPreferences->save($prefs["config_data"]); header('Location: index.php' . Url::getCommonRaw()); exit(); } // Change collation connection if (isset($_POST['collation_connection'])) { $GLOBALS['PMA_Config']->setUserValue( null, 'DefaultConnectionCollation', $_POST['collation_connection'], 'utf8mb4_unicode_ci' ); header('Location: index.php' . Url::getCommonRaw()); exit(); } // See FAQ 1.34 if (! empty($_REQUEST['db'])) { $page = null; if (! empty($_REQUEST['table'])) { $page = Util::getScriptNameForOption( $GLOBALS['cfg']['DefaultTabTable'], 'table' ); } else { $page = Util::getScriptNameForOption( $GLOBALS['cfg']['DefaultTabDatabase'], 'database' );

} include $page; exit; } $response = Response::getInstance(); /** * Check if it is an ajax request to reload the recent tables list. */ if ($response->isAjax() && ! empty($_REQUEST['recent_table'])) { $response->addJSON( 'list', RecentFavoriteTable::getInstance('recent')->getHtmlList() ); exit; } if ($GLOBALS['PMA_Config']->isGitRevision()) { // If ajax request to get revision if (isset($_REQUEST['git_revision']) && $response->isAjax()) { GitRevision::display(); exit; } // Else show empty html echo '

'; } // Handles some variables that may have been sent by the calling script $GLOBALS['db'] = ''; $GLOBALS['table'] = ''; $show_query = '1'; // Any message to display? if (! empty($message)) { echo Util::getMessage($message); unset($message); } if (isset($_SESSION['partial_logout'])) { Message::success( __('You were logged out from one server, to logout completely from phpMyAdmin, you need to logout from all servers.') )->display(); unset($_SESSION['partial_logout']); } $common_url_query = Url::getCommon(); $mysql_cur_user_and_host = ''; // when $server > 0, a server has been chosen so we can display // all MySQL-related information if ($server > 0) { include 'libraries/server_common.inc.php'; // Use the verbose name of the server instead of the hostname // if a value is set $server_info = ''; if (! empty($cfg['Server']['verbose'])) { $server_info .= htmlspecialchars($cfg['Server']['verbose']);

if ($GLOBALS['cfg']['ShowServerInfo']) { $server_info .= ' ('; } } if ($GLOBALS['cfg']['ShowServerInfo'] || empty($cfg['Server']['verbose'])) { $server_info .= $GLOBALS['dbi']->getHostInfo(); } if (! empty($cfg['Server']['verbose']) && $GLOBALS['cfg']['ShowServerInfo']) { $server_info .= ')'; } $mysql_cur_user_and_host = $GLOBALS['dbi']->fetchValue('SELECT USER();'); // should we add the port info here? $short_server_info = (!empty($GLOBALS['cfg']['Server']['verbose']) ? $GLOBALS['cfg']['Server']['verbose'] : $GLOBALS['cfg']['Server']['host']); } echo '

' , "\n"; // Anchor for favorite tables synchronization. echo RecentFavoriteTable::getInstance('favorite')->getHtmlSyncFavoriteTables(); echo '
'; if ($server > 0 || count($cfg['Servers']) > 1 ) { if ($cfg['DBG']['demo']) { echo '
'; echo '

Používáte phpMyAdmin instalovaný pomocí ISPconfig? Balíčky phpMyAdmin a Squrellmail webmail v Debianu Linux a Ubuntu Linux používají ve výchozím nastavení mod_php, ale HTTP/2 není kompatibilní s prefork MPM, který právě mod_php vyžaduje. Tyto aplikace po změně protokolu na HTTP/2 již nemají k dispozici PHP interpret. Budete pro ně muset ručně nakonfigurovat PHP nebo zálohovat původní konfigurační soubor a umístit novou instalaci na subdoménu.

Výhodou umístění phpMyAdmin na subdoménu je možno aktualizace phpMyAdmin z verze 4.9 na aktuální verzi 5.1. Po vytvoření subdomény v ISPconfig stáhneme a rozbalíme phpmyadmin + upravíme oprávnění dle nadřazené složky

wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip
unzip -j phpMyAdmin-5.1.1-all-languages.zip -d /cesta/do_složky_na subdoméně
chown -R webXYT:userXYZ /cesta/do_složky_na subdoméně

nakopírujeme původní konfigurační soubor phpmyadmin z původně instalované starší verze do nové složky na subdoméně (kompatibilita 100%)

cp /usr/share/phpmyadmin/config.inc.php /cesta/do_složky_na subdoméně

Změníme cestu k dočasnému soboru v konfiguraci z /var/lib/phpmyadmin/tmp na již existující složku /tmp na subdoméně

$cfg['TempDir'] = '/tmp';

Odstraníme starší verzi phpMyAdmin instalace

rm -r /var/lib/phpmyadmin

Deaktivujeme původní phpmyadmin apache2 konfiguraci

a2disconf phpmyadmin

Restartujeme Apache server

systemctl reload apache2

Hotovo

Ubuntu Debian phpMyAdmin rozhraní HTTP/2
phpMyAdmin HTTP/2

Užitečné

Popis protokolu HTTP/2 na mediawiki.
HTTP/2 Nginx server 1.20

ICTIS.CZ