如何在Apache和Nginx中启用HTTP/2?

HTTP/2是在2015年发布的HTTP协议的第二个重要版本。

blank

大约有46.5%的网站支持HTTP/2。

blank

它有许多功能,如:

  • HTTP头部压缩
  • 推送技术
  • 通过单个TCP连接并行加载页面元素
  • 二进制协议
  • 降低延迟

Demo by AKAMAI显示HTTP/2大约比HTTP/1.1快两倍

blank

你知道吗,LiteSpeed是最早支持HTTP/2的Web服务器之一吗?

如果你使用像Cloudflare、Incapsula、MaxCDN这样的CDN,你可能不需要在你的Web服务器上启用HTTP/2,因为你可以从CDN网络边缘进行操作。

然而,如果你需要在Apache、Nginx、IIS等Web服务器上实现HTTP/2,请继续阅读以了解如何操作。

注意:所有主流浏览器(Chrome、Edge、Firefox、Safari、Opera)必须使用TLS 1.2或更高版本来实现HTTP2。

但是,如果你正在进行一些实验,不用担心,你可以get the TLS certificate for FREE

在Apache HTTP中实现HTTP/2

Apache HTTP可以在2.4.17或更新版本中通过mod_http2模块进行部署。所以如果你有2.2或更低版本,你首先必须升级到兼容版本。

让我们使用mod_http2mod_ssl模块编译Apache HTTP。

  • 下载最新版本(我将在Linux上使用2.4.25)
  • 解压下载的文件,如果你下载的是.gz文件,那么执行以下命令:
gunzip -c httpd-2.4.25.tar.gz | tar xvf -
  • 你会看到一个新的文件夹被创建。进入该文件夹
  • 使用configure命令从源码构建Apache

备注:如果你在全新的服务器上尝试此操作,可能会遇到安装依赖项的错误,this guide可以帮助你解决此问题。

./configure --enable-ssl --enable-so --enable-http2
  • 确保上述命令没有错误,完成后执行以下make命令
make
make install

这样就安装了带有HTTP/2模块的Apache HTTP,并且现在是时候进行必要的配置了。

  • 备份httpd.conf文件(默认位置为/etc/httpd/conf/httpd.conf)
  • 使用vi打开httpd.conf文件,并确保以下内容存在;如果不存在,则添加它。
LoadModule http2_module modules/mod_http2.so
  • 接下来,你需要添加以下的Protocols指令
Protocols h2 h2c http/1.1

如果你要为单个虚拟主机启用HTTP/2,你需要在相应的VirtualHost下添加Protocols

注意:上述Protocols指令有三个参数

  • h2 – 指示Apache支持通过SSL/TLS的HTTP/2协议
  • h2c – 指示Apache支持通过TCP的HTTP/2
  • http/1.1 – 如果客户端不接受HTTP/2,则使用HTTP/1.1来处理请求

重新启动Apache HTTP服务器以重新加载配置。

现在,Apache HTTP实例已经启用支持HTTP/2协议。

在Nginx中实现HTTP/2

Nginx1.9.5或更高版本支持HTTP/2,所以首先你必须确保你安装了兼容的版本。

在Nginx中启用HTTP/2只需要在listen指令中添加http2参数。

  • 像往常一样,备份nginx.conf文件(默认位置为/etc/nginx/nginx.conf)
  • 使用vi修改文件,并在listen指令下添加http2
server {
        listen       443 http2 ssl chandan.io;
        …....
}

如我上面提到的,HTTP/2仅支持HTTPS,所以你必须添加在具有SSL配置的server块下。

如果您的SSL配置在nginx.conf以外的文件中,您必须在那里进行更新。

完成后,重新启动Nginx以激活配置。

验证网站是否支持HTTP/2

有多种方法可以检查网站是否支持HTTP/2。

手动 – 打开IE/Chrome/Firefox,按F12 >> 转到网络选项卡,您应该看到协议为HTTP/2。

blank

在线 – 您可以使用HTTP/2 Test tool

以上就是今天的内容。我希望以上内容能帮助您在Apache和Nginx Web服务器中启用HTTP/2协议,以供fast-loading web pages使用。

类似文章