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.
Obsah
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

Užitečné
Popis protokolu HTTP/2 na mediawiki.
HTTP/2 Nginx server 1.20