为网站添加 HTTP/2 支持
为什么要支持 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。以下是这个博客的测试结果:
Pretty cool.
更新:这篇后续博文 启用 HTTP/2 的 ALPN 纪录了开启 HTTP/2 ALPN 的过程,可以进一步优化速度。