这篇文章主要是关于如何部署使用 https 的 Meteor App。
https
https 主要是解决了三个问题。
- 身份确认。确保和真正的用户交流
- 保密。避免别人嗅探通信内容
- 完整性。避免别人修改内容
关于要不要使用 https,大家可以看看这段 Google I/O 2016 的演讲(需要翻墙)。演讲者回答了大家普遍担心的 https 会不会影响性能和难以维护的问题。简单的结论就是这些担心已经过时了,https 反而可能会提高性能(例如启用 http/2 只能是 https),维护工作量也很少,证书也可以找到免费的,或者很便宜的。总之,https 一定是一个趋势,甚至你没有敏感数据要保护的情况下,例如一些展示静态信息的网站,也推荐使用 https。
部署
我们利用开源工具 mup 来部署 Meteor app,而 mup 又是使用了 docker,所以第一步我们要让服务器能够使用 docker。服务器的设置详见 http://www.jianshu.com/p/e01888b8af8e 。
然后我们按照 mup 的文档生成并配置好。和普通 http 设置不一样的是,得把 ROOT_URL 改为 https 的地址,还有添加
ssl: {
autogenerate: {
email: 'youremail@gmail.com',
domains: 'yoursite.com'
}
}
当然还有安装 force-ssl 的包 https://atmospherejs.com/meteor/force-ssl 。
这样你的网站就是使用 https 了。这里证书使用的是免费的 Let's Encrypt,然后自动每 30 天更新一次。
CDN
如果你的网站引入了 CDN,那么也必须是使用 https。只有少量的浏览器支持两种协议混用的。关于 Meteor app 使用 CDN,可以参考 http://www.jianshu.com/p/98388e50ab0a 。我使用的是七牛的 CDN 服务。之前也用过阿里云的,但是他们的 CDN 在使用 gzip 的时候有问题。七牛提供 TrustAsia 的免费 TLS 证书,但是只能用于七牛 CDN 自身。
使用的时候注意记得把 mup 配置的 CDN_URL 修改为 https 的地址。另外,七牛验证证书的时候可能需要先在你的域名提供商的配置里解析 txt 记录,在七牛通过验证后再删除 txt 记录,然后再把这个 CDN 域名配置为 cname 记录。
最后再次 deploy,成功后在浏览器输入你的网址,就会自动跳转到 https 的域名了。最后如果你有其他 REST服务是非 https 的,那么你可以通过后端转一下,这样就可以达到全站 https 了。