HTTP2 特点:

  1. 每个服务器只用一个连接。HTTP/2对每个服务器只使用一个连接,而不是每个文件一个连接。这样,就省掉了多次建立连接的时间,这个时间对TLS尤其明显,因为TLS连接费时间。
  2. 加速TLS交付。HTTP/2只需一次耗时的TLS握手,并且通过一个连接上的多路利用实现最佳性能。HTTP/2还会压缩首部数据,省掉HTTP/1.x时代所需的一些优化工作,比如拼接文件,从而提高缓存利用率。
  3. 简化Web应用。使用HTTP/2可以让Web开发者省很多事,因为不用再做那些针对HTTP/1.x的优化工作了。
  4. 适合内容混杂的页面。HTTP/2特别适合混合了HTML、CSS、JavaScript、图片和有限多媒体的传统页面。浏览器可以优先安排那些重要的文件请求,让页面的关键部分先出现,快出现。
  5. 更安全。通过减少TLS的性能损失,可以让更多应用使用TLS,从而让用户信息更安全。

启用步骤和过程中遇到的问题:

  1. 没安装的需要先把编译环境装好,也可以使用apt-get安装。pcre的版本最好是8.几的版本,不要高于8,不然到时候会报错。 yum install -y gcc gcc-c++ pcre-devel openssl openssl-devel
  2. 下载nginx源码,启用http2需要nginx的版本为1.9.0以上。这里使用了1.10.2的Stable版本。
    cd /usr/local/src
    wget http://nginx.org/download/nginx-1.10.2.tar.gz
    tar -zxf nginx-1.10.2.tar.gz
    
  3. 下载SSL源码,这里使用LibreSSL(LibreSSL是OpenSSL加密软件库的一个分支,为一个安全套接层(SSL)和传输层安全(TLS)协议的开源实现。在OpenSSL爆出心脏出血安全漏洞之后,一些OpenBSD开发者于2014年4月创立了LibreSSL,目标是重构OpenSSL的代码,以提供一个更安全的替代品。LibreSSL复刻自OpenSSL库的1.0.1g分支,它将遵循其他OpenBSD项目所使用的安全指导原则。)

    cd /usr/local/src
    wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.4.2.tar.gz
    tar -xzvf libressl-2.4.2.tar.gz
    
  4. 编译nginx,--with-openssl的路径最好是绝对路径,不然make的时候会报错提示你没有找到.openssl这个目录。

    ./configure --with-openssl=/usr/local/src/libressl-2.4.2 --with-http_v2_module --with-http_ssl_module
    make
    make install
    
  5. 将nginx服务先停止,再把刚刚编译过的文件copy到原来的nginx安装目录,./configure没有指定--prefix的话默认安装在/usr/local/nginx
    nginx -s stop
    cd /usr/local/nginx/sbin
    cp -a nginx /usr/sbin/nginx
    nginx -v
    
    到这里nginx -v输出: nginx version: nginx/1.10.2则表示成功升级了。
  6. 然后再来配置nginx confg, 在listen加上http2即可:
    server {
    listen 443 ssl http2;
    ...
    }
    
    重启一下:nginx -s reload,遇到pid丢失问题执行sudo nginx可以解决。

最后检查是否启用了http2可以使用Chrome查看,在标签栏输入chrome://net-internals/#http2,右侧表格有出现你的网站域名则表示成功了。