配置完善支持 HTTPS 和 HTTP/2 的 Nginx

参考 Jerry Qu 的文章,重新对 Nginx 进行了配置,记录如下:

下载 Nginx-CT 模块,编译时让 Nginx 支持 Certificate Transparency 功能:

wget -O nginx-ct.zip -c https://github.com/grahamedgecombe/nginx-ct/archive/v1.3.2.zip
unzip nginx-ct.zip

准备 ngx_brotli 环境,下载 ngx_brotli 源码,编译时让 Nginx 支持 Google 开发的 Brotli 压缩格式:

#先安装 libbrotli
apt-get install autoconf libtool automake
git clone https://github.com/bagder/libbrotli cd libbrotli ./autogen.sh ./configure make make install cd ../ #再获取 ngx_brotli 源码 git clone https://github.com/google/ngx_brotli.git cd ngx_brotli git submodule update --init cd ../

下载 Cloudflare 的 ChaCha20/Poly1305 for OpenSSL 补丁,以及 Dynamic TLS Records for Nginx 补丁:

git clone https://github.com/cloudflare/sslconfig.git

下载 OpenSSL 1.0.2k,并打上 ChaCha20/Poly1305 补丁:

wget -O openssl.tar.gz -c https://github.com/openssl/openssl/archive/OpenSSL_1_0_2k.tar.gz
tar zxf openssl.tar.gz
mv openssl-OpenSSL_1_0_2k/ openssl
cd openssl
patch -p1 < ../sslconfig/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102j.patch 
cd ../

下载 Nginx 源码,打上 Dynamic TLS Records 补丁:

wget -c https://nginx.org/download/nginx-1.11.12.tar.gz
tar zxf nginx-1.11.12.tar.gz
cd nginx-1.11.12/
patch -p1 < ../sslconfig/patches/nginx__1.11.5_dynamic_tls_records.patch
cd ../

编译并安装 Nginx,我使用的是 LNMP 一键安装包,因此用了以下命令:

cd nginx-1.11.12/
./configure --user=www --group=www --prefix=/usr/local/nginx --add-module=../ngx_brotli --add-module=../nginx-ct-1.3.2 --with-openssl=../openssl --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-ld-opt='-ljemalloc'
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.20170328
\cp objs/nginx /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -t
make upgrade
/usr/local/nginx/sbin/nginx -v

从 Nginx 1.11.5 开始,ipv6 模块已经内置,故 --with-ipv6 配置项已经不再需要。

安装 Nginx 后,其他配置参考 Jerry Qu 的文章 即可。