随着 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 on; ssl_certificate /etc/nginx/conf.d/certificate.crt; ssl_certificate_key /etc/nginx/conf.d/certificate.key; }
|
通过 Chrome Network 标签验证结果
