如何在 Ubuntu 和 Debian 上的 Apache Web 服务器中启用 HTTP/2
在此页
- 先决条件
- 禁用 mod_php 模块
- 启用与 HTTP/2 兼容的 Apache MPM
- 在 Apache 中启用 HTTP/2 支持
- 链接
Hypertext Transfer Protocol Version 2 (HTTP/2) 是 HTTP 协议的最新版本,于 2015 年作为 IETF 标准在 RFC 7540 中发布。该协议的重点是性能;具体来说,最终用户感知的延迟、网络和服务器资源使用情况。一个主要目标是允许使用从浏览器到网站的单一连接。该协议是向后兼容的,因此 HTTP 方法、状态代码和语义与协议的先前版本相同。 Apache 从 2.4.17 版本开始支持 HTTP/2。在本教程中,我将假设您已经有一个有效的 TLS 配置,并且您已经在您选择的 Linux 发行版上安装了所需的 Apache 版本,并且您知道如何使用 Lets Encrypt,或者您知道如何发出一个自签名证书。

本教程已经在 Debian 11、Debian 10、Debian 9、Ubuntu 22.04 LTS、Ubuntu 20.04 LTS 和 Ubuntu 18.04 LTS 上进行了测试。
先决条件
要在 Apache 中启用 HTTP/2,您需要满足以下要求:
- 首先,您需要在服务器上启用 HTTPS。所有主流浏览器都只允许通过 HTTPS 使用 HTTP/2。此外,需要具有现代密码套件的 TLS 协议版本 >= 1.2。
- 接下来,确保您运行的是 Apache 2.4.17 或更高版本,因为此版本及更高版本支持 HTTP/2。
- 此外,请确保您的客户端/浏览器确实支持 HTTP/2。
禁用 mod_php 模块
在下一步将 Apache MPM 模块切换到 mpm_event 之前,我们必须禁用旧的 mod_php 模式并将其替换为更现代的 PHP-FPM 模式。每个操作系统版本的命令不同,请使用与您安装的系统相匹配的命令。
Ubuntu 22.04 长期支持版
sudo apt-get install php8.1-fpm
sudo a2dismod php8.1
sudo a2enconf php8.1-fpm
sudo a2enmod proxy_fcgi
德比安 11
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi
Ubuntu 20.04 长期支持版
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi
德比安 10
sudo apt-get install php7.3-fpm
sudo a2dismod php7.3
sudo a2enconf php7.3-fpm
sudo a2enmod proxy_fcgi
Ubuntu 18.04 长期支持版
sudo apt-get install php7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi
德比安 9
sudo apt-get install php7.0-fpm
sudo a2dismod php7.0
sudo a2enconf php7.0-fpm
sudo a2enmod proxy_fcgi
启用与 HTTP/2 兼容的 Apache MPM
默认情况下,Apache 将使用 prefork MPM。这个 MPM 与 HTTP/2 不兼容,所以我们必须用更现代的 mpm_event 模块替换它。
首先,我们禁用 mpm_prefork 模块:
sudo a2dismod mpm_prefork
然后我们启用 mpm_event 模块:
sudo a2enmod mpm_event
在 Apache 中启用 HTTP/2 支持
要让 HTTP/2 在 Apache 上运行,您需要启用并加载 SSL 和 HTTP/2 模块。为此,您可以在终端中运行以下命令:
sudo a2enmod ssl
然后
sudo a2enmod http2
要激活这些新模块,您需要运行:
sudo systemctl restart apache2
启用并加载必要的 Apache 模块后,导航到 Apache 配置目录并编辑 Apache 配置。
要在 Apache Web 服务器上启用 HTTP/2,请将以下内容之一添加到全局 Apache 配置或特定虚拟主机中。
Protocols h2 http/1.1
这是可用于在某些虚拟主机中启用 HTTP/2 的最小虚拟服务器配置:
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/public_html/example.com
SSLEngine on
SSLCertificateKeyFile /path/to/private.pem
SSLCertificateFile /path/to/cert.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Protocols h2 http/1.1
</VirtualHost>
要检查您的服务器是否支持 HTTP/2,您可以使用浏览器开发工具。以下是来自 Google Chrome 和 Apple Safari 浏览器的屏幕截图,显示了在 https://example.com 域上运行的 HTTP/2。
铬合金

苹果浏览器

链接
- RFC 7540
- HTTP/2