活到老学到老  

记录遇到问题的点点滴滴。

提高网站访问速度 nginx 开启 http/2 + spdy

8年前发布  · 2582 次阅读
  nginx  http2  spdy 

介绍

看看什么是HTTP/2

为什么我们应该尽快支持 ALPN?》文中提到了OpenSSL 1.0.2 开始支持 ALPN,服务端不支持 ALPN,在 Chrome 51 中无法协商到 HTTP/2。

执行下面的命令来查看openssl版本

openssl version

如果版本1.0.2+的话恭喜你,可以直接用apt-get或者yum安装,否则需要手动编译nginx。

注意:必须使用https链接才能用到http/2,nginx1.9.5才开始支持http/2的。

使用免费证书开启https《在Nginx上https部署 Let's Encrypt 证书

选择一:apt-get或者yum安装(适合openssl版本1.0.2+)

安装

apt-get或者yum安装

开启HTTP/2

listen添加http2即可

server {
    listen 443 ssl http2 default_server;

    ssl_certificate    server.crt;
    ssl_certificate_key server.key;
    ...
}

选择二:手动编译nginx(适合版本openssl版本低于1.0.2)

网上很多文章说利用openssl库编译的文章,但是编译都不通过,原因是OpenSSL 1.0.2都还不支持CHACHA20-POLY1305加密。

不要太鲁莽虚拟机先测试没问题再到线上部署。

cd /usr/local
wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.4.1.tar.gz
tar xzf libressl-2.4.1.tar.gz
wget http://nginx.org/download/nginx-1.9.7.tar.gz
tar xzf nginx-1.9.7.tar.gz
cd nginx-1.9.7

需要让nginx同时支持http/2和spdy,所以选择了1.9.7版本(更高的版本不能移除了spdy)。

先安装包:

yum install -y zlib-devel

 

编译

./configure --prefix=/usr/local/nginx --user=www --group=www \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_ssl_module \
--with-ipv6 \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-ld-opt=-ljemalloc \
--with-openssl=../libressl-2.4.1 \
--with-ld-opt="-lrt"
make && make install

配置LibreSSL

在.conf文件中添加如下:

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA";
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:5m;
    ssl_buffer_size 4k;

重启Nginx(service nginx restart)网站就成功部署了CP算法了。

 

完成服务器的 TLS/SSL 配置之后,还有一个指定动作——测试 SSL 配置。这里通过 ssllabs.com 来对服务器进行测试,测试结果如下:

更多配置正在更新,可以关注博文获取最新动态。