阿里云cdn部署及https配置

Posted by Neal Wang on May 3, 2017

过了一个月才开始写这篇算是记录的东西,记起来的时候阿里云cdn部署界面已经改版了,所以此篇无截图,只是大致描述一下思路以及部署的具体流程。

Go»>

项目背景

  • 项目有个后台管理网站,使用域名的 www 顶级域名访问
  • 项目前端有一个微信小程序,有使用vue构建的微信webapp。小程序要求所有接口都需要使用https协议
  • 项目部署在阿里云服务器ECS上,所以直接使用阿里云云盾的证书服务申请了免费的Symantec的https证书,因为免费所以只能绑定一个域名,下面要部署的cdn二级域名也是使用的这一类证书,但与顶级域名不是同一个证书。
  • 项目的后台和前端都部署在了同一个服务器上
  • https证书的安装部署这里就不写了,有需要的可以去网上查一查或者直接去阿里云的控制台提工单寻求帮助。

部署准备

项目文件结构

把想要使用cdn加速的图片,css,html这类静态资源与js等动态资源做分离,这个项目对前端微信webapp页面以及图片资源做了cdn加速。这里推荐使用两个服务器,或者使用阿里云推荐的云服务器ECS+对象存储OSS的方案。

域名指向

把想要加速的静态资源使用另外一个域名指向,比如你的主域名是xxx.cn,可以在域名控制台配置一个cdn.xxx.cn的二级域名指向你的静态资源

证书

申请一个上面提到的免费证书,如果有能力可以花点小钱申请一个通配型的证书,可以配置一个顶级域名和多个二级域名。因为后台前端都配置在一个服务器上,所以想要在一个服务器配置两个https证书还是有些麻烦的

一种方案是使用代理服务器,安装一个ngnix或者apache,这个项目没有采用这种结构,所以放弃了,然后在各种鼓捣了几天无果,在提过工单后,工程师告诉我只要在配置cdn域名的时候添加证书就好了,不同的域名的不同证书是可以通过sni区分的,这个sni会在文章最后提到。

这里要注意,使用https访问阿里云的cdn服务是要收钱的~

在申请二级域名的证书的时候,连续申请几个都被拒绝,简直都快怀疑人生,后来查了查好像是因为申请人的信息和顶级域名证书的申请人信息不一样,换了之后果然好了,但这也只是个人猜测,因为证书签发方不是阿里云,所以阿里云也看不到拒绝的具体原因。

这里验证证书的时候建议采用阿里云给出的自动验证方法,确实很方便,几分钟就好了,完全不用做其他操作。因为域名、服务器、证书都是阿里云代理或者自有的,所以深切感受到了互联网巨头的威力,真真切切的一个开发生态圈。

配置

配置相对来说是比较简单的,这里说一下几个需要注意的问题:

  • 设置源站,记得区分80(http)和443(https)端口
  • 配置缓存过期时间,一些不常改变的资源缓存过期时间可以更长一些
  • 在阿里云cdn域名管理界面打开https设置,如果是在阿里云申请的证书,就可以选择你要加速的域名对应的证书即可,如果是在其他服务商申请的,就要你自己上传证书了
  • 可以视情况开启性能优化等等,这些说明阿里云官方都有提供一些解答https://help.aliyun.com/product/27099.html?spm=5176.750001.2.11.snD3IE

关于sni:SNI(Server Name Indication)是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。它的工作原理如下:

  • 在连接到服务器建立SSL链接之前先发送要访问站点的域名(Hostname)。
  • 服务器根据这个域名返回一个合适的证书。

目前,大多数操作系统和浏览器都已经很好地支持SNI扩展,OpenSSL 0.9.8也已经内置这一功能。

上述过程中,当客户端使用HTTPDNS解析域名时,请求URL中的host会被替换成HTTPDNS解析出来的IP,导致服务器获取到的域名为解析后的IP,无法找到匹配的证书,只能返回默认的证书或者不返回,所以会出现SSL/TLS握手不成功的错误。

比如当你需要通过HTTPS访问CDN资源时,CDN的站点往往服务了很多的域名,所以需要通过SNI指定具体的域名证书进行通信。

感兴趣的童鞋可以去深入研究~