为网站添加 HTTP/2 支持

Hacks Mar 14, 2016

为什么要支持 HTTP/2?相比 HTTP/1.1,HTTP/2 的好处还是相当有用的。以下节选自维基百科

Decrease latency to improve page load speed in web browsers by considering:

  • Data compression of HTTP headers
  • Server push technologies
  • Pipelining of requests
  • Fixing the head-of-line blocking problem in HTTP 1.x
  • Multiplexing multiple requests over a single TCP connection

这当中我最喜欢的就是 server push 功能,服务端可以把要用的资源直接 push 到浏览器。(然而 NGINX 并不支持这个功能。如果需要,可以使用 H2O

安装最新版 NGINX

对于 HTTP/2 的支持是在 NGINX 1.9.5 版本中加入的,作为 mainline 版本并没有加入各大发行版仓库。对于我这种懒得自己编译~~(垃圾性能也编译不动)~~的人,就手动添加一下官方 mainline 源。以我正在使用的 Ubuntu 14.04 为例,其他发行版应该大同小异。

添加 GPG 签名:

wget http://nginx.org/packages/keys/nginx_signing.key
cat nginx_signing.key | sudo apt-key add -

添加软件源至 /etc/apt/sources.list

# NGINX
deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx

更新软件源:

sudo apt-get update

更新 NGINX。我安装的时候直接 apt-get upgrade 出错,所以就卸了重新装了。

sudo apt-get remove nginx nginx-common
sudo apt-get install nginx

装好后再看看版本号,没问题就好了。

nginx -v

配置 sites-enabled 文件

目前来说,启用 HTTP/2 还得需要 HTTPS。可以参考我的这篇博文 Let's Encrypt 证书申请实测 来获取免费的 Let's Encrypt 证书。

配置非常简单,在 listen 443 后面加上 http2 就可以了。比如说我的:

listen 443 ssl http2;

最后重启下 nginx

sudo service nginx restart

大功告成!

测试 HTTP/2

可以使用 KeyCDN 提供的 这个 工具测试网站是否真的启用了 HTTP/2。以下是这个博客的测试结果:

http2-test-result

Pretty cool.

更新:这篇后续博文 启用 HTTP/2 的 ALPN 纪录了开启 HTTP/2 ALPN 的过程,可以进一步优化速度。

aLPHAtOAD

太年轻,太简单,有时候幼稚。