如何在 Ubuntu 上启用 HTTP/2

自从万维网www)诞生以来,HTTP协议经过多年的发展,以在互联网上传送安全快速的数字内容。

最广泛使用的版本是HTTP 1.1,虽然它具有功能增强和性能优化,以解决早期版本的缺陷,但它仍然缺乏一些其他重要功能,这些功能已经被HTTP/2解决。

HTTP/1.1的局限性是什么?

HTTP/1.1协议存在以下缺点,使其在运行高流量网络服务器时不太理想:

  1. 由于HTTP头部过长而导致网页加载延迟。
  2. HTTP/1.1每个TCP连接只能发送一个文件的请求。
  3. 由于HTTP/1.1为每个TCP连接处理一个请求,浏览器被迫发送大量并行TCP连接以同时处理请求。这导致TCP拥塞,最终导致带宽浪费和网络退化。

上述问题经常导致性能下降和带宽使用高额开销。HTTP/2应运而生,以解决这些问题,现在已成为HTTP协议的未来。

使用HTTP/2的优势

它提供以下优势:

  1. 头部压缩可以减少客户端请求,从而降低带宽消耗。其结果是快速的页面加载速度。
  2. 将多个请求复用到一个TCP连接上。服务器和客户端都可以将HTTP请求分解为多个帧,并在另一端重新组合它们。
  3. 更快的网页性能,因此带来更好的SEO排名。
  4. 由于大多数主流浏览器通过HTTPS加载HTTP/2,因此安全性得到了改善。
  5. 由于标头压缩功能,HTTP/2被认为更适合移动设备。

话虽如此,我们打算在Ubuntu 20.04 LTSUbuntu 18.04 LTS上启用HTTP/2Apache

先决条件:

在开始之前,请确保在启用HTTP/2之前在Apache web服务器上启用HTTPS。这是因为所有主流网络浏览器都支持HTTPS上的HTTP/2。我有一个指向Ubuntu 20.04上实例的域名,该实例正在使用Let’s Encrypt证书保护的运行Apache服务器

此外,建议您在打算转移到HTTP/2的生产服务器上具有Apache 2.4.26及更高版本。

要检查您正在运行的Apache版本,请执行以下命令:

$ apache2 -v
Check Apache Version in Ubuntu

在撰写本文时,可以看到我们正在使用最新版本Apache 2.4.41

在Apache虚拟主机上启用HTTP/2

首先,确认Web服务器正在运行HTTP/1.1。您可以通过在Google Chrome上使用Ctrl +SHIFT + I组合键打开开发者工具部分在浏览器上执行此操作。单击“网络”选项卡,并找到“协议”列。

Confirm HTTP Protocol Version

接下来,在Ubuntu上运行以下命令启用HTTP/2模块。

$ sudo a2enmod http2
Enable HTTP/2 on Ubuntu

然后,如果您已使用Let’s Encrypt启用了HTTPS,则找到并编辑您的SSL虚拟主机文件,将创建一个具有le-ssl.conf后缀的新文件。

$ sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf

<VirtualHost *:443>标记后插入以下指令。

Protocols h2 http/1.1
Enable HTTP/2 on Apache

保存更改后,重新启动Apache Web服务器。

$ sudo systemctl restart apache2

要检查HTTP/2是否已启用,请使用以下curl命令获取HTTP标头,如下所示。

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Support in Apache

您应该获得显示的输出。

HTTP/2 200

在浏览器上重新加载您的站点。然后返回开发者工具并确认“协议”列上的h2标签表示HTTP/2。

Confirm HTTP/2 Protocol Version

当使用带有Apache的mod_php模块

如果您同时运行 Apachemod_php 模块,您需要切换到 PHP-FPM。这是因为 mod_php 模块使用的 prefork MPM 模块不受 HTTP/2 支持。您需要卸载 prefork MPM 并切换到将受 HTTP/2 支持的 mpm_event 模块。

例如,如果您使用 PHP 7.4 mod_php 模块,请禁用它如下所示:

$ sudo a2dismod php7.4 
Disable mod_php Module

然后,禁用 prefork MPM 模块。

$ sudo a2dismod mpm_prefork
Disable Prefork MPM in Apache

在禁用模块之后,接下来,如下所示启用 Event MPMFast_CGIsetenvif 模块。

$ sudo a2enmod mpm_event proxy_fcgi setenvif
Enable Event MPM in Apache

在 Ubuntu 上安装 PHP-FPM

接下来,按照以下方式安装并启动 PHP-FPM

$ sudo apt install php7.4-fpm 
$ sudo systemctl start php7.4-fpm

然后,启用 PHP-FPM 以在启动时启动。

$ sudo systemctl enable php7.4-fpm

接下来,将 PHP-FPM 启用为 Apache 的 PHP 处理程序,并重新启动 Apache web 服务器以使更改生效。

$ sudo a2enconf php7.4-fpm

在 Apache Ubuntu 中启用 HTTP/2 支持

然后像以前一样启用 HTTP/2 模块。

$ sudo a2enmod http2

重新启动 Apache 以同步所有更改。

$ sudo systemctl restart apache2

最后,您可以使用如下所示的 curl 命令 测试您的服务器是否正在使用 HTTP/2 协议。

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Protocol in Apache

你可以选择使用谷歌 Chrome浏览器上的开发者工具进行验证,就像之前记录的那样。我们已经到达本指南的结尾,希望您觉得信息有价值,并且可以轻松地在Apache上启用HTTP/2

Source:
https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/