nginx启用TLSv1.3和Brotli

TLS 1.3是下一代传输层安全协议,目前TLS 1.3仍处于开发阶段,Chrome Beta提供TLS 1.3的实验性支持。
Brotli是Google开发的下一代网页压缩格式,提供了高压缩比、高能效比的网页压缩。
本文将介绍nginx中如何启用TLS 1.3和Brotli。

编译nginx

基础部分请参考帶模塊編譯nginx
在之前的编译选项之上,还需要修改/添加以下模块:

OpenSSL

为了支持TLS 1.3,需要从github上拉取OpenSSL-dev的代码:

git clone --single-branch https://github.com/openssl/openssl.git

ngx_brotli

直接从Google的Github仓库拉取代码即可:

git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
cd ../

在编译nginx时修改、增加以下编译选项:

 --with-openssl=../openssl \
 --with-openssl-opt='enable-tls1_3' \
 --add-module=../ngx_brotli \

Web配置

在nginx站点配置文件server块中,有以下参数需要增加/修改以启用TLS 1.3:

ssl_protocols              TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers                TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:!MD5;
ssl_prefer_server_ciphers  on;

在nginx.conf的http块中,新增以下参数以启用Brotli:

brotli             on;
brotli_comp_level  6;
brotli_types       text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;

验证效果

把Chrome 65版本chrome://flags中的TLS 1.3设置为Enabled(Draft 23),然后访问网站,查看TLS协议是否为1.3。
Chrome Android

References