或许是Nginx下SPDY配置最实际的教程-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

或许是Nginx下SPDY配置最实际的教程

妙正灰 2015-07-26 15:03:09 10405
介绍
SPDY(读作“SPeeDY”)是 Google 开发的基于 TCP 的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY 并不是一种用于替代 HTTP 的协议,而是对 HTTP 协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及 HTTP 报头压缩。

在 SSL 层上增加一个 SPDY 会话层,以在一个 TCP 连接中实现并发流。通常的 HTTP GET 和 POST 格式仍然是一样的;然而 SPDY 为编码和传输数据设计了一个新的帧格式。流是双向的,可以在客户端和服务器端启动。SPDY 旨在通过基本(始终启用)和高级(可选启用)功能实现更低的延迟。


配置
普通的 HTTPS 网站浏览会比 HTTP 网站稍微慢一些,因为需要处理加密任务,而配置了 SPDY 的 HTTPS,反而速度会比 HTTP 更快更稳定!
证书
这里是 免费和便宜 SSL 证书介绍https://www.vobe.io/archives/87),大家可以从这里购买或者申请免费的 SSL 证书,免得 Chrome 弹出红色的页面令人不悦。


以后会补上证书申请的教程,记得提醒!
Web 服务器
安装/编译
默认编译的 Nginx 并不包含 SPDY 模块,而大部分发行版的软件源管理器提供的 Nginx 也都不支持 SPDY,所以还是自行下载和编译 Nginx。目前 Lnmp.org 1.2 版本;Oneinstack 等一键包编译的 Nginx 默认是支持 SPDY 的!Tengine 也是默认支持的。Apt-get /yum install nginx 的包也是默认支持 SPDY 的!

如果你编译的 Nginx 不支持,那么在 ./configure 中加入: --with-http_spdy_module ,如果没有 SSL 支持,还需要 --with-http_ssl_module

然后 make && make install 即可。
配置
主要是配置 Nginx 的 server 块,加入 对 SPDY 。
修改相关虚拟机的 .conf 文件,一般在 /usr/local/nginx/conf/vhost/,具体参考你的环境指导,不懂请回复。
server {
listen 443 ssl spdy;
spdy_headers_comp 1;
server_name www.vobe.io;

ssl_certificate /path/to/public.crt;
ssl_certificate_key /path/to/private.key;

location / {
add_header Alternate-Protocol 443:npn-spdy/3.1;
}
```


然后通过 /usr/local/nginx/sbin/nginx -t 或者 nginx -t 来检测是否配置正确,然后重启 Nginx ,即可。
检验
spdycheck.org

配置进阶
大家都知道去年的心血漏洞将 SSL 推到了风口浪尖,所以单单支持了 SPDY ,我们任然需要对 SSL 做一些安全的优化!

配置赫尔曼密钥
openssl dhparam -out dhparam.pem 2048 // 用 openssl 生成 2048 位的密钥,勿用在 Nginx 的配置用!
ssl_dhparam /path/to/dhparam.pem; //在 .conf 中配置



禁止不安全的 SSL 协议,使用安全协议

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

禁止已经不安全的加密算法

还修复了近期的 POODLE 漏洞哟!

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:!CAMELLIA:!DES:!MD5:!PSK:!RC4';

缓解 BEAST 攻击

ssl_prefer_server_ciphers on;
请不要无良转载
文章来自:https://www.vobe.io/archives/114


启用 HSTS

此举直接跳过 301 跳转,还降低了中间人攻击的风险!配置在 .conf 中即可
add_header Strict-Transport-Security max-age=15768000;

301 跳转

80 端口跳转到 443 端口
server {
listen 80;
add_header Strict-Transport-Security max-age=15768000;
return 301 https://www.vobe.io$request_uri;
}


缓存连接凭据
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 60m;


OCSP 缝合
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;
resolver 233.5.5.5 233.5.5.5 valid=300s;


欢迎你的补充!


通过 www.ssllabs.com 即可检验 HTTPS 配置的安全性和实用性!



本文来自: https://www.vobe.io/114
欢迎访问: https://www.vobe.io/

Web App开发 缓存 tengine 网络协议 安全 应用服务中间件 网络安全 nginx 数据安全/隐私保护
分享到
取消 提交回答
全部回答(3)
  • 妙正灰
    2015-11-09 17:33:30
    回 3楼(瞄大人) 的帖子
    下次要更新http/2了
    0 0
  • 瞄大人
    2015-11-09 17:31:18
    Re或许是Nginx下SPDY配置最实际的教程
      学习了
    0 0
  • 小柒2012
    2015-07-26 19:29:29
    io域名还是  https  果然高大上啊 LZ
    0 0
添加回答

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题