无法从cdn上下载节目表问题处理

无法从cdn上下载节目表
  话说有个项目5月底合同到期,需要将该项目转交回原厂,以后不由我们代维了。整个项目由:nginx+tomcat+mysql+oss+cdn+redis 服务组成。大家应该有看过网点信息屏吧,眼看手勿动那种,这种信息屏只需要从cdn拉播放节目下来,就能不停地轮转播放。这个交接的项目就是类似这样的。
  交接工作需要原厂自己买回设备,然后在他们的设备上部署好这个信息屏的服务端,我们叫管理后台,用来给管理人员上传节目表的,然后网点会有一个硬件叫“盒子"的东西,装上安卓app,就能拉取节目表播放了。
  至于我们公司的原设备装有的后台,到时过期就不再续费了。
  早几天,我对着我们公司的服务器、数据库、oss等,在他们购买的设备上依葫芦画瓢地迁移过去。这两天测试人员有空帮忙测试这个新地址(公网ip+端口临时访问),发现下载节目单失败。
  这个失败比较大件事,不仅在公司的后台不行,客户设备的也不行。因为需要天天发节目单播新节目,所以今天开完早会,我就被我们经理拉去排查问题,三个人并排坐着(因为工位不在测试人员那边,经理用一台笔记本远程到我办公台式电脑,整个排查都在笔记本上,真心难用),幸好10点半前完美解决,才没有耽误我后面文章的:skywalking接入java客户端的研究。
  老实说,节目下载不了是我迁移过程中自挖的坑,当时迁移在客户设备配置cdn加速oss源站域名的时候,为了省事,想用回原来的cdn加速域名:cdn.test.cn,但是公司cdn加速域名已经用了,不能在客户设备上新建个一样的名字,于是我就删掉公司的域名配置(当时以为是配好才删的,原来还有些地方没配,就回源鉴权),这样就能在客户设备上配一条一摸一样的CNAME解析

 

一、问题描述
  这样配置会出现什么问题?当时我们还是用回公司设备部署的后台(域名访问方式)进行排查,经确认测试,管理后台上传的文件,能在公司设备的oss对象存储找到,而在客户设备的oss找不到。最终发现,cdn加速oss源站域名后,盒子下载文件这条线路有问题。
  为了统一起来,干脆域名访问的指向从公司设备改回到客户设备,因为最终交付也是这样的,而且现在两个后台都使用不了,统一起来便于问题排查。
 
二、问题解决
  当时经理一直从客户设备的阿里云账号,cdn管理控制台排查问题,排查过程中吐槽了我好几次删掉原配置CNAME记录,害他没得参考怎么配回来的 = =。皆因这项目是一个2年前已经跑路的开发配的,那会我还记得给了阿里云登录账号密码给他自己搞,现在好了,大家都不知道。
  幸好整个解决过程中,我也贡献了不少侦查及侥幸力量,都算是将功补过,哈哈哈~~~~
  侥幸体现在:一开始,经理在检查上传的文件,究竟传到公司设备的oss还是客户端的设备时,曾经在阿里的oss上一页页翻着查目标文件,用过阿里oss都知道,oss查询不是一般的水:无法通过文件最新上传时间去查,而且,我们上传的节目单还会以时间戳命名的形式存到oss上,当时经理还没想到用时间戳去转换今天时间的方式,我只提议说,干脆挂载到服务器上比直接oss控制台翻页查强得多。
  挂载的时候,一开始看到有个报错说无法挂载(其实是配置账号访问信息文件:/etc/passwd-ossfs没写好),误打误撞,刚好看到要挂载的bucket读写权限设置为私有,并不是公有读,我就说需要临时改下权限,于是就从“私有”改成“公有读”,刚好这样一改:cdn.test.cn/文件名  可以直接在浏览器打开(节目下载不了是受限打不开的),那个盒子竟然成功下载了节目单(突然觉得今天运气是开挂了,或者仙人保佑我不要丢掉这份工)
  但这不是想要的效果,万一被人知道了这个地址去攻击,就完蛋了。所以问题归结成:需要弄好cdn的鉴权,回源时要进行身份验证(访问控制的ak)
       登录阿里云,依次进入:CDN ——》访问控制 ——》 URL 鉴权
  如下图:

 

   当时我们经理一直在下面“生成鉴权URL”这里配置,说配了好几次给他清掉了,最后还是在“修改配置”那里加的(一旁的我,又默默听着他吐槽阿里的非人性话设置),主KEY要跟代码的 cdn.primaryKey 对应上:
  这个配置好还没行,阿里云RAM的访问控制也要改。

  访问控制 ——》 权限 ——》 AliyunCDNAccessingPrivateOSSRole ——》 信任策略管理

  (没配之前用的是默认)

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "cdn.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}

   最后把oss的bucket从公共读,改回到私有,盒子终于可以正常下载节目。

  浏览器打开:http://cdn.test.cn/文件名 返回应为403

 

   最终问题完美解决。。。需要搞清楚的是,上面截图的oss配置那块,主要为了利用sts临时访问凭证访问oss:https://help.aliyun.com/document_detail/100624.html。下面cdn配置则是为了下载节目播放的。

 
posted @ 2022-05-25 21:39  windysai  阅读(152)  评论(0编辑  收藏  举报