I understand that, perhaps, Apache is not currently the preferred choice for launching new projects on it, nevertheless, it exists, and projects are working on it. The choice may fall on it for some personal preference, for compatibility requirements, or for some other reasons ... not the essence. In this article I want to describe in points how to configure the HTTP / 2 protocol support on the Apache web server, because I use it myself and
need such an article I
need , and I hope that it will also come in handy for someone in practice.
What is HTTP / 2? As the name implies, this is the second version of the HTTP protocol. You can read more about the benefits at least on
Wikipedia . From myself I can only say that if you are hosted not on shared hosting, then you should support this protocol, like, for example, HTTPS. Yes, in order for HTTP / 2 to work for you, you will need full access to the machine console (albeit virtual) via ssh or in some other way, as well as the already configured HTTPS (TLS / SSL). Well, let's get down to business.
Step one. Apache update
The HTTP / 2 protocol is supported by the Apache server since version 2.4.24, so if you have an older version installed, it's time to update it. But first check:
apache -v
This command will give something like this:
')
Server version: Apache/2.4.37 (Ubuntu) Server built: 2018-10-28T15:27:08
The first line contains the server version. If it is greater than or equal to 2.4.24, then we can safely move on to the second step. Otherwise, you need to update Apache, the current versions of which you can find in the PPA of the famous (if you already had to install something fresh on Debian / Ubuntu) developer - Ondřej Surý. PPAs are personal packages that are not included in the official distribution repositories. Therefore, in order to use them, you first need to teach the system what to get from and where:
sudo add-apt-repository ppa:ondrej/apache2
The guy does a good job, and do not mind getting a small donate, which is quite clearly stated when you connect to his turnips ...
Then, in fact, we update the packages:
sudo apt update sudo apt upgrade
And again, check the version of Apache. If everything went well, Apache will be installed on your server, where you can configure HTTP / 2. If everything went bad - I'm afraid this is not the topic of this article. Now go to the second step.
Step two. Using FastCGI
What is FastCGI is better to read, as I said, at least in
Wikipedia , because you can not tell it shortly. You need to switch to PHP running in FastCGI mode (php-fpm). How it works - a good answer is given on the
Toaster . Here I will not go into such nuances, but proceed directly to the installation:
sudo apt install php-fpm
After installation, we will literally be told the following: to enable PHP 7.2 FPM in Apache2, do:
sudo a2enmod proxy_fcgi setenvif sudo a2enconf php7.2-fpm
We do. After that, you need to disable mod_php, because instead of it you now have php-fpm.
sudo a2dismod php7.2
Generally speaking, the PHP version before you could have been different. Look for the modules you have installed in the system can be in the directory
/ etc / apache2 / mods-available / , and which are active in
/ etc / apache2 / mods-enabledNext, restart Apache.
sudo service apache2 restart
and move on to the third step.
Step three. Switch from Prefork to Event
What is MPM and what is the difference between prefork, event, worker - you can read here in
this wonderful article ... but now it is really important to know only one thing: the “standard” prefork is
not very compatible with HTTP / 2, therefore you need to use more suitable . Turn off one, turn on the other, restart Apache.
sudo a2dismod mpm_prefork sudo a2enmod mpm_event service apache2 restart
Step Four. Turn on HTTP / 2
Either in the configuration file of the host, which can be found in the
/ etc / apache2 / sites-enabled / directory, or in the config of the server
/etc/apache2/apache2.conf itself,
we say that we need support for the new protocol:
Protocols h2 h2c http/1.1
What really matters is
h2 . Two other points - at your discretion.
h2c is HTTP / 2 support over TCP (and not TLS).
http / 1.1 - support for the old version of HTTP.
We enable the http2 module and reboot the server:
sudo a2enmod http2 service apache2 restart
Arrived
From now on everything. Your resource should start working under the HTTP / 2 protocol. If you use Chrome, go to the resource, you will see how the lightning icon in the upper right corner of the browser has turned blue. Hovering the cursor over it will give you an HTTP / 2-enabled (h2) hint. In Firefox, go to the developer panel and on the Network tab, enable the Protocol column — for the resources from your site should be HTTP / 2.0. You can also check if your resource supports this protocol on
one of the many sites on the web. But do not relax, because
HTTP / 3 is coming on the heels :)