推荐使用 Nginx 1.6 以上版本,用以支持 spdy 3.0。虽然 http/2 已经推出,但现在浏览器支持度太低,服务器也只有几个小应用,Nginx 和 Apache 都还没有支持 http/2。
所以 spdy 依然是加速 https 的最好方式,但 Chrome 新版已经不支持 spdy 2.0 及以下版本,所以新版 Nginx 对 https 是很有帮助的。
listen 443 ssl spdy;
老版本 Nginx 大家都用 ssl on,新版本(0.7.14以上)就推荐在 listen 加 ssl 关键字,这样最大的好处是在一个 Server 段里可同时支持 http 与 https 服务,像这样:
listen 80;
listen 443 ssl;
ssl_certificate /etc/nginx/zhigang.net.crt;
ssl_certificate_key /etc/nginx/zhigang.net.key;
证书现在免费的 StartSSL 挺好的,大部分浏览器都支持,新版 Linux 也都内置了 StartSSL 的 CA 证书。只是 java 目前还没有内置。具体申请与使用回头单写。
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
第一条设置一10M大小的缓存池,因为 Nginx 使用本地内存,所以这在分布式系统中作用就不大了。第二条缓存时间,单位分钟。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
因 SSL3.0 及以下版本已被爆出各种漏洞,现在已极不推荐使用,所以我们只启用 TLS 系列协议。
加密算法部分涉及东西太多,这里先注意需禁用的几个:MD5 RC4 DES 及 NULL。这里列出的算法规则应该是比较优化的。
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/startssl_trust_chain.crt;
resolver 8.8.8.8 8.8.4.4;
简单点说,启用 OCSP 可以让浏览器更快的获取证书撤销状态,提高加载速度。ssl_trusted_certificate 是 CA 的证书链,如 StartSSL class 1 证书这样生成:
wget https://www.startssl.com/certs/ca-sha2.pem
wget https://www.startssl.com/certs/class1/sha2/pem/sub.class1.server.sha2.ca.pem
cat sub.class1.server.sha2.ca.pem ca-sha2.pem > startssl_trust_chain.crt
add_header Strict-Transport-Security "max-age=31536000";
用于通知浏览器强制使用 https 通信,这样下次用户在直接输入域名访问时,浏览器会自动使用 https 请求,避免一次跳转。
完成设置后可以使用测试网站:https://www.ssllabs.com/ssltest/ 测下自己的得分,本站经过优化前的 D 提升到了 A+。