华为云解析设置好域名却识别不到
因为项目快要上线了买了些新域名,因为这次想尝试做些访问优化和SEO之类的,尝试了国内的DNS托管服务,本地化做的更好些,方便之后做更细节的优化之类。最终选择了尝试华为云解析,因为域名也是新的商家购置的,为了减少不可预知问题的产生把面板上能不设置的就都给恢复初始了,然后把NSServer转接给华为云的server。去华为云面板上加了记录后,到宝塔那边添加站点,因为是app后缀的,听说要强制https访问才行,第一件事也就是加个证书了(截止解析后过了一天也还是可以直接http访问,难道取消了吗),熟练的点击自动生成ssl后,遇到了下图的问题。

这就很奇怪了,赶紧本地nslookup一下没毛病啊,云端也检查了下A记录是否成功,而且ttl设置成100了还是很快的呀。又点了几次,奇怪的是还能报不同的错,有说验证5次了不能再验证的,但是错误代码那显示的还是解析错误。我心想你这5次失败应该直接拒绝我啊,咋还提示报错了,而且宝塔一验证就是连着验5次,那这不属于宝塔的问题嘛,万一出个错,直接被封禁1小时。


不行,我不信,一般来说程序员的让你等待和进度条都是假的,就是出问题了而已,真正做了限制那应该是很简短的提示语告诉你没法继续了(401),于是接着试还是不行。换成dns验证,这总行了吧(有很多文件验证产生bug的情况,用dns很快就弄好了,还有一些不方便访问网页的,用dns加个解析也能骚操作一番完成,之后找篇文章展开)。

看到这个界面把解析域名前半段复制出来,把记录值复制出来,类型选择TXT,在解析面板中设置下。

the domain’s nameservers may be malfunctioning
之后去验证,不行,报了一个好像CAA的错误,也有说没解析上了,尝试nslookup -q=txt _acme-challenge.yourdomain.app
也返回的是期待的结果,于是把出现频次最多关键词也就是标题对着搜索了下,包括那个CAA关键字。出来这样一个结果,心里想着肯定稳了,顺便学习下CAA限制。

于是初步判断应该是letsencrypt限制或者app域名有限制,非要验证这个,只需在华为云解析中加上合理的CAA解析记录应该就行了。于是一通设置后,点击验证还是不行,还是一样的报错,而且无论是文件验证还是dns验证都一样,解析记录也自己和网络上测试了下都能查到解析到那个地址。甚至还看了域名注册商的面板有没啥特殊设置,但发现除了基本信息和隐私啥的也没有什么额外设置的。之前用cf的时候托管可没这些问题,难道是华为云解析这边有限制还是被letsencrypt限制?遂有了标题的感叹。
接着排查
大早起来接着查问题,想了下出错原因,忽然想到会不会是宝塔自带的ssl申请脚本出问题,毕竟之前有些配置出错了最终还是上服务器直接操作的。同时减少干扰,于是进面板把可能影响的解析类型(CAA)都关了,只保留最原始的A记录。进服务器后,找了下可能的脚本路径,没找到,可能是云端运行的方式吧,那就直接用脚本来跑吧,看的更详细。

curl https://get.acme.sh | sh source .bash_profile acme.sh -h #有正常回显说明装好了
之后开始跑命令,发现了报错,应该是缺少A记录


404的Not found说明可能路径有问题,把里面well-known的地址拉出来访问了下,无法访问,尝试自己创建了文件访问,还是访问不了直接返回404,路径看了下也没问题啊,映射关系都是对的。


这时候在想会不会nginx把一些特殊文件名的路径给拒绝了,直接找到nginx配置修改了下,发现没用啊,这时候才想到nginx规则是根据域名来了,每个域名分了不同目录,不是随便直接访问的。

改了下路径重新运行acme.sh,虽然还是报错了,但是报错信息变了,也就说上一次A记录找不到的问题应该解决掉了。原因就是他请求不了那个地址返回404了,所以提示你是不是A记录没设置,而实际是路径错了。

这时候解决这个问题,其实就是之前暂停了解析的情况,于是重新打开CAA类型的解析记录,等了1分钟,重新跑了这个脚本,结果……给我返回了A记录找不到的提示,难道还真是之前想的这两个冲突了嘛,可是这是不同类型的呀,解析系统不会这么傻把。这时候尝试又访问了下提示A记录找不到时的那个well-known地址,发现是可以访问的,而不是之前报错时的无法访问。

原来是letsencrypt
这时候就想着其实两种解析应该都没有问题了,应该是某个东西还是没生效的原因,于是接着开始搜索,看有没有bug 的可能。这次扩大了范围,发现了也有和关键字比较吻合的内容,那个回答倒没有特别直接的解决思路,但是出现了那个貌似可以测试一些东西的debug网站。

于是开始点进去测试我的域名,这时候就想到华为云解析可以设置区域解析,里面有国内和全球解析的选项,会不会是全球的方式没做解析呢(不是这个原因,默认就是所有情况的最终回退选项)然后就顺带用了国外的dns查询的服务,一起验证下。


变得很奇怪了,都是国外的站点,一个说我都没解析,一个连NS服务器和A记录都能解析出来。因为报错信息一样,那个letsdebug(debug以后可以去这里)应该就是调用的letsencrypt的api吧,基本就说明letsencrypt那边可能不认一些东西,看来就是八字不合嘛。结果查看详情,震惊到我了,自己看吧。


折腾了这么久,收获就是得看这个网址通知了,查看实时服务器状态的。搜索引擎基本也不大搜到这种情况了,最终还是一步步排查才看到了这个原因,和大家分享下过程吧。
后续
其实小白的话,直接换种方式申请就行了。

后续2
很无奈的是,发现上面的结论也是不准确的,实际和宕机没关系,要么华为云的ns服务器无法被部分海外的dns服务器解析,要么letsencrypt就他解析不了,最后也没搞清楚哪个问题和直接解决方案。所以最终相关的新域名都用了其他家的证书了,补图吧。


发表评论