前言
小弟手里运营者几个公众号和小程序,用户量也有几十万,每日访问次数大概在4w+左右。昨天突然客户告诉我,访问页面挂了。打开一看,显示:
顿时紧张起来!无法访问可是*的事故,无论任何原因,都要第一时间立刻抢修。所以接下来的60分钟突发救援过程,咱们分享出来。
事故项目背景说明
用户使用我的公众号客服消息,我会根据输入返回个查询结果页面。页面域名是:lego.domain1.com,服务器是腾讯云服务器。
当时我个人用户注册域名很麻烦,所以借用了朋友公司的服务器,做了个二级域名解析,到我的腾讯云服务器,整个拓扑结构如图:
按道理,我是可以偷着乐的,不需要对二级域名进行备案,那怎么就突然被腾讯云封杀了?问了朋友:
原来朋友更换了接入商,取消了腾讯的服务。这里面稍微解释下,如果备案在腾讯,备案服务器也在腾讯,那么我的服务器是不会有问题的。
现在因为备案和服务器在阿里,我的服务器在腾讯,所以被封杀了。那么接下来就是紧急救援开始了!
突发救援过程分享
PlanB 立刻上
首先,无论事故是什么原因,先做服务降级,恢复现场。
腾讯封杀的是微信封杀打开的页面,其他经过测试,domain1的接口调用均暂时正常,所以影响范围目前没扩散开。我决定先把用户的访问从网站转移到小程序。这里面需要修改客服消息接口,返回小程序跳转链接:
<a href="http://www.qq.com" data-miniprogram-appid="appid" data-miniprogram-path="pages/index/index">点击跳小程序</a>
效果展示:
参考资料:
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/customer-message/customerServiceMessage.send.html#%E4%BA%91%E8%B0%83%E7%94%A8
解决方案 —— 换地址
服务已经最低限度恢复了,接下来可以慢慢分析解决方案。
虽然腾讯目前没有封杀domainAAA的接口,但是未来接口调用肯定也是会被封杀的。所以lego.domainAAA.com这个域名是肯定要放弃了,但是我的服务器不能放弃,上面都是数据。所以我想起了我后来自己备案了一个域名,叫 www.domainBBB.cn。
那最简单,把domainBBB的域名做个二级域名lego.domainBBB.cn,解析到服务器即可,去腾讯云的dns服务网站,做个二级域名解析:
地址在:https://console.dnspod.cn/
可是这里遇到了个https问题。原来在domain1的时候,申请的SSL证书是不能用在domain2的。
如果我这个时候修改了服务器的证书,会导致现在线上正在跑的domain1接口调用也出问题了,那就是全面崩溃。
SSL证书问题
最直观的想法,就是能否让服务器的Nginx支持同时解析两个ssl证书?搜了相关的资料,发现虽然是可以,但是条件比较苛刻,我无法保证在生产环境绝对安全。
所以第二个想到的,是不是可以换个https的端口?从默认443,添加一个444?nginx配置如下:
先做了个简单的测试,让两个端口都使用相同的证书,发现是可以的。所以立刻申请一个新的SSL证书。
解决方案 —— SSL证书重新申请
去阿里云的后台,数字证书管理,重新申请一个新证书。这时候阿里云需要我使用DNS解析方式验证。那么就去腾讯云的DNS解析服务,按照阿里云的提示,去dns后台添加个记录即可:
申请通过后,按照提示,把SSL证书文件下载,解压到nginx目录下,修改配置,service nginx restart。然后过一会证书就生效了,HTTPS可以正常访问了。
公众号、小程序配置新的访问接口
使用了新的端口,需要在公众号和小程序的页面重新配置,否则会无法访问:
备案的域名能否绑定多个服务器?
新的域名domainBBB之前绑定了一台服务器,这次二级域名绑定了新的服务器,需要再备案吗?小编搜了下网站的资料。大概的说法是只要都在腾讯云,就不需要再备案了。