HTTP/2 协议正式发布已有数月有余,主流浏览器的最新版本均已经支持HTTP/2;而且不少Web Server也已经开始支持,nginx官方也表示要在年底支持HTTP/2。HTTP/2基于SPDY,可以有效改善站点的通讯速度,特别是HTTPS站点。本站也早已开启HTST,强制全局HTTPS,适合应用HTTP/2。虽然目前nginx的mainline从1.9.5版本开始支持HTTP/2,不过编译时候需要加上相应参数,不然不会编译HTTP/2的模块。
至于CHACHA20_POLY1305,之前被谷歌广泛应用的对称加密协议,相对于常用的AES,其在ARM平台的性能更佳。然而nginx默认使用的openssl并不支持这种加密方式,因此这里使用libressl作为替代。新版的libressl已经与新版nginx兼容良好,可以直接编译,整个过程非常顺畅,不会出现之前各种编译过程出错的问题。因为如此,本人也能够写出如下一个一键脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#!/bin/bash set -e -o pipefail # Download Latest ngxin & LibreSSL, then extract. latest_nginx=$(curl -L http://nginx.org/en/download.html | egrep -o "nginx\-[0-9.]+\.tar[.a-z]*" | head -n 1) latest_libressl=$(curl -L http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/ | egrep -o "libressl\-[0-9.]+\.tar\.gz" | tail -n 1) (curl -fLRO "http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/${latest_libressl}" && tar -xaf "${latest_libressl}") & (curl -fLRO "http://nginx.org/download/${latest_nginx}" && tar -xaf "${latest_nginx}") & wait cd "${latest_nginx//.tar*}" # Configure & make & install ./configure \ --http-client-body-temp-path=/var/run/nginx/body \ --http-fastcgi-temp-path=/var/run/nginx/fastcgi \ --http-proxy-temp-path=/var/run/nginx/proxy \ --http-scgi-temp-path=/var/run/nginx/scgi \ --http-uwsgi-temp-path=/var/run/nginx/uwsgi \ --user=www-data \ --group=www-data \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --with-pcre-jit \ --with-ipv6 \ --with-http_v2_module \ --with-debug \ --with-http_stub_status_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_dav_module \ --with-http_gzip_static_module \ --with-http_sub_module \ --with-http_xslt_module \ --with-http_ssl_module \ --with-openssl=../${latest_libressl//.tar*} \ --with-ld-opt=-lrt make make install |
编译选项根据自己需求进行更改即可,和HTTP/2和libressl相关的是如下几行,注意HTTP/2和SPDY模块是冲突的:
1 2 3 4 |
--with-http_v2_module \ --with-http_ssl_module \ --with-openssl=../${latest_libressl//.tar*} \ --with-ld-opt=-lrt |
要启用HTTP/2,只需将http2关键字添加到server的listen中即可:
1 2 3 4 |
server { listen 443 ssl http2; server_name example.com; ... |
至于启用CHACHA20_POLY1305加密,则要配置ssl_ciphers,举例如下(这里添加了ECDHE-ECDSA-CHACHA20-POLY1305和ECDHE-RSA-CHACHA20-POLY1305两种加密方式):
1 2 3 4 5 6 7 8 |
ssl on; ssl_certificate /etc/nginx/certs/ssl.pem; ssl_certificate_key /etc/nginx/certs/ssl.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:HIGH:MEDIUM:!MD5:!aNULL:!EDH:!RC4:!DSS; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; |
如果准备全局HTTPS了,建议打开HSTS:
1 |
add_header Strict-Transport-Security "max-age=31536000"; |
一键脚本如果有问题,请回复,本人会修改。OVER~
13 条评论