随着 Web 的发展,HTTP/1.x 已经很难满足现在的需求,Google 因此开发了 SPDY 作为尝试,HTTP/2 在此基础上应运而生。HTTP/2 在2015年5月被批准,目前已经在很多 Web 浏览器和服务器中得到实现。

HTTP/2 和 TLS 组合可以提升你的站点性能,并且让用户觉得你的网站很安全。

服务器软件版本支持

请确保你服务器的软件版本号支持开启 HTTP/2,否则坑很大,坑死人。

  • Nginx ≥ v1.9.5
  • openSSL ≥ v1.0.2

编译安装/升级 openSSL

目前我的机器是 Ubuntu,其他 Linux 发行版应该也大同小异

1
2
3
4
5
$ wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz && tar -xzvf openssl-1.0.2j.tar.gz && cd openssl-1.0.2j
$ sudo ./config
$ sudo make install
$ sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`
$ openssl version -v

可以看到 openSSL 的版本已经升级至 1.0.2j

编译安装/升级 Nginx

如果你的机器现在安装的 Nginx < 1.9.5 或者 built with OpenSSL 版本 < 1.0.2,那么需要重新编译一个高版本的 Nginx

具体升级过程可根据自己的实际情况,唯一要注意的是编译参数可以加上刚刚的 openSSL 目录,以防万一

1
2
$ ./configure  \
$ --with-openssl=path/to/openssl-1.0.2j

升级好后,通过 nginx -V 查看版本

1
2
3
4
5
nginx version: nginx/1.10.1 <-- 注意这里
built by gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
built with OpenSSL 1.0.2j 26 Sep 2016 <-- 注意这里
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-openssl=/root/openssl-1.0.2j --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module

通过配置 Nginx 文件开启 HTTP/2

目前 Firefox 和 Chrome 明确地表示,他们只实现基于 TLS 的 HTTP/2,所以请先确保你的网站已经支持了 HTTPS

相关博文:《使用 SSL 证书保护网站的访问》

然后开启的步骤非常的简单,只需在配置文件中加上 http2 关键字即可

1
2
3
4
5
6
7
8
9
server {  
listen 443 ssl http2;
server_name dearb.me;

#SSL配置
ssl on;
ssl_certificate /etc/nginx/conf.d/certificate.crt;
ssl_certificate_key /etc/nginx/conf.d/certificate.key;
}

通过 Chrome Network 标签验证结果

573DD65E-3A94-49C3-872C-4EEF3C240189