如何在 Ubuntu 上的 Apache 中启用 HTTP/2
自万维网( www )诞生以来,HTTP协议经过多年的不断发展,能够在互联网上安全、快速地传递数字内容。
最广泛使用的版本是HTTP 1.1,虽然它包含功能增强和性能优化以解决早期版本的缺点,但它缺少 HTTP /2已解决的其他一些显著功能。
HTTP/1.1 有哪些局限性?
HTTP /1.1协议存在以下缺陷,使得它在运行高流量 Web 服务器时不太理想:
- 由于 HTTP 标头较长,导致网页加载延迟。
- HTTP/1.1 每个 TCP 连接只能为每个文件发送一个请求。
- 由于 HTTP/1.1 为每个 TCP 连接处理一个请求,浏览器被迫发送大量并行 TCP 连接来同时处理请求。这会导致 TCP 拥塞,最终造成带宽浪费和网络性能下降。
上述问题通常会导致性能下降和带宽使用成本过高。HTTP /2是为了解决这些问题而出现的,它现在是 HTTP 协议的未来。
使用 HTTP/2 的优点
它具有以下优点:
- 标头压缩可最大程度减少客户端请求,从而降低带宽消耗。最终效果是加快页面加载速度。
- 在一个 TCP 连接上多路复用多个请求。服务器和客户端都可以将 HTTP 请求分解为多个帧,并在另一端重新组合它们。
- 更快的网络性能从而带来更好的 SEO 排名。
- 由于大多数主流浏览器通过 HTTPS 加载 HTTP/2,因此安全性得到了提高。
- 由于标头压缩功能,HTTP/2 被认为更加适合移动设备。
也就是说,我们将在Ubuntu 20.04 LTS和Ubuntu 18.04 LTS上的Apache上启用HTTP/2。
先决条件:
在开始之前,请确保在启用HTTP/2之前在 Apache Web 服务器上启用HTTPS。这是因为所有主流 Web 浏览器都支持通过HTTPS 的HTTP/2。我有一个域名指向Ubuntu 20.04上的一个实例,该实例运行使用Let's Encrypt 证书保护的Apache 服务器。
此外,对于打算转向HTTP/2 的生产服务器,建议您使用Apache 2.4.26及更高版本。
要检查您正在运行的Apache版本,请执行以下命令:
$ apache2 -v
从输出中,您可以看到我们正在使用最新版本,即撰写本文时的Apache 2.4.41 。
在 Apache 虚拟主机上启用 HTTP/2
首先,确认 Web 服务器正在运行HTTP/1.1 。您可以在浏览器上执行此操作,方法是使用组合打开Google Chrome上的开发人员工具部分Ctrl +SHIFT + I
。单击“网络”选项卡并找到“协议”列。
接下来,通过运行以下命令在Ubuntu上启用HTTP/2模块。
$ sudo a2enmod http2
接下来,找到并编辑您的SSL虚拟主机文件,如果您已使用Let's Encrypt启用 HTTPS ,则会创建一个带有le-ssl.conf后缀的新文件。
$ sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf
在标签后插入下面的指令<VirtualHost *:443>
。
Protocols h2 http/1.1
要保存更改,请重新启动 Apache 网络服务器。
$ sudo systemctl restart apache2
要检查HTTP/2是否已启用,请使用以下curl 命令获取 HTTP 标头。
$ curl -I --http2 -s https://domain.com/ | grep HTTP
您应该得到所显示的输出。
HTTP/2 200
在浏览器上,重新加载您的网站。然后返回开发人员工具并确认“协议h2
”列上的标签所表示的 HTTP/2 。
在 Apache 中使用 mod_php 模块时
如果您在运行mod_php模块的同时运行Apache,则需要切换到PHP-FPM。这是因为mod_php模块使用了HTTP/2不支持的prefork MPM模块。您需要卸载 prefork MPM并切换到HTTP/2支持的mpm_event模块。
例如,如果您正在使用PHP 7.4 mod_php模块,请按如下所示禁用它:
$ sudo a2dismod php7.4
此后,禁用 prefork MPM模块。
$ sudo a2dismod mpm_prefork
禁用模块后,接下来启用Event MPM、Fast_CGI和setenvif模块,如下所示。
$ sudo a2enmod mpm_event proxy_fcgi setenvif
在 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 网络服务器以使更改生效。
$ 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
您还可以选择使用Google Chrome浏览器上的开发人员工具进行验证,如前所述。本指南到此结束,我们希望您发现这些信息很有价值,并且您可以轻松地在Apache上启用HTTP/2。