给一个自用的工具配域名,本来以为是半小时的事。结果从备案到 https 全绿,断断续续折腾了快两周。技术本身不复杂,难的是那些不成文的前置条件和执行顺序——顺序错一步,前面全白做。
一、备案期间,一条解析都不能加
这是最容易被忽略的一条。很多人想的顺序是「先把站点跑起来,再去备案」,实际上反了:备案审核期间,域名不能有任何解析记录指向境内服务器。
哪怕只是随手加一条 A 记录,哪怕站点还只有一张空白页,都可能被驳回重来。而且驳回之后不是改一下就行,是重新排一轮审核。
还有个更隐蔽的前置条件:服务套餐的剩余有效期。有些云服务要求剩余时长超过半年才允许提交备案。踩着线建的草稿,跨一天就失效,得先续费再来。我在这上面白丢过一轮。
二、域名绑上,不等于能访问
备案下来,证书申请好,命令行绑定域名,一路都是成功提示。然后在浏览器里打开——404。
报的错不是常见的 404,而是一个 INVALID_PATH。这个错很说明问题:服务端知道这个域名归它管,但不知道该把请求交给谁。
原因是:绑定域名和配置路由是两件事。命令行那条命令只创建了域名本身,路由表是空的。必须再去网关里补一条「访问路径 → 关联应用」的规则,请求才真正有去处。
这里还有一个更反直觉的点:路径前缀是「应用」那一层加的,不是路由层。路由里写 /,后端收到的路径就和访问路径一致;而应用本身可能对应存储里的一个子目录。所以在应用根目录下用完整路径去访问自己的文件,反而会 404——它被映射成了 /子目录/子目录/文件。
这一条我花了很久才想通,因为它违反直觉:文件明明在,路径明明对着,就是打不开。
三、CDN 源站地址有 50 字符上限
为了让第二个子域名也能用,加了 CDN 加速。填源站地址的时候卡住了:云服务给的默认域名是 52 个字符,输入框就是塞不进去。
试过用短一点的备用域名,直接返回 418。最后只能用已经跑通的自有域名做回源。
这里有个连带坑:改了源站地址,必须同时把回源 HOST 改掉。否则请求到了源站,Host 头还是旧的那个,源站不认,一样落空。这两项是一套的,改一个不改另一个,症状是「有时能打开有时不能」——最难查的那种。
四、改完必须逐项验
这一条是给自己定的规矩。任何一次改动之后,都按固定清单跑一遍,少验一项,问题就会在某个别人的手机上出现:
- 首页能不能打开,返回多大,标题对不对
- 静态资源(脚本、样式)单独请求一次,别看首页能开就以为都对
- 媒体文件单独请求一次,看 Content-Type 对不对
- 证书链是否完整,是否有中间证书缺失
http访问是否正常跳到https,跳转码是不是 301- 换一个移动端 User-Agent 再请求一次
- 换一个没缓存过的查询参数,绕开 CDN 缓存看真实结果
最后一条特别重要。改完立刻测,看到的很可能是缓存里的旧结果,于是误以为没生效,接着改,越改越乱。加一个随机参数,或者带 Cache-Control: no-cache,才看到真相。
部署这件事,最贵的不是操作,是你不知道自己看到的是不是真的。
最后
全部跑通之后回头看,真正难的不是技术,是三件事:顺序、前置条件、以及验证的完整性。
所以我现在的习惯是:动手之前先把「依赖什么、按什么顺序、怎么算成功」写下来,写成清单。写清单花十分钟,省的是半夜两小时。
另外,证书是有期限的。免费证书一般三个月,到期不续,https 直接失效,浏览器一片红。这件事一定要设提醒,别靠记性。