给网站写一份“体检表”

  • 建站笔记

我在一家公司做办公室维护,平时修打印机、修电脑、管管办公设备,顺带把自己这个个人主页也归到“要维护的东西”里面。网站看着简单,几个页面加一堆配置,真正累人的不是把它搭起来,而是搭完之后,每次动过点东西,都得再确认一遍它还是好的。

起因:手动检查,越查越懒

刚建站那会儿要确认的事很少,打开首页能出来就算过关。后来东西一件件加上去,要看的就变成了七八项:主要页面能不能开、导航跳转对不对、证书还有几天到期、随便打一个不存在的地址会不会返回 404、从 http 进来有没有自己跳到 https。

这些事我一开始都是手动点一遍。第一次第二次还挺认真,一项一项过;第三次就有点烦了;再往后,所谓“检查一下”,实际动作就是打开首页扫一眼,能显示出来,就认为没事。剩下的几项,心里想的是“上次也是好的,我又没动过”。

手动检查最大的毛病不是麻烦,是它会漏,而且是那种我自己都不知道漏了的漏。等到哪天有同事说“你那个页面好像打不开”,我才发现已经坏了好一阵子。

思路:把“我希望它一直是对的”写成一条条断言

后来我换了个想法。与其每次去“看”,不如把“我希望它一直是对的”这件事一条条写下来,每一条变成一个自动断言:怎么查、什么样的结果是好的、什么样的结果是坏的,全写死。跑一遍,我只看最后的结论。

这么一换,检查这件事就从“我记性好不好”变成了“清单全不全”。清单可以慢慢补,记性补不了。

我这份清单也不是一口气写完的。最开始只有三条:页面开不开、跳转对不对、不存在的地址会不会返回 404。后面每次发现一个问题,就往里补一条——证书那项是收到到期提醒才想起来的,安全响应头是看了别人的检查结果才加上的。补进去一次,往后就不用再靠记性了。

还有一点我挺在意:结论最好只有两种,绿或者红。如果一项检查给出的答案是“大概还行”“应该没问题”,那它等于没查。人对着模糊的结论是不会有反应的。

检查清单:我让它替我盯着的几件事

写成脚本里的清单,大概长这样:

[页面]   https://example.com/               期望 200
[页面]   https://example.com/posts/         期望 200
[错误页] https://example.com/no-such-page   期望 404
[跳转]   http://example.com/                期望 301 到 https
[证书]   剩余天数                            期望大于 30
[响应头] X-Content-Type-Options             期望存在
[禁入]   https://example.com/private/       期望 403 或 404

上面只是示意,真写的时候要换成自己的地址。列出来才发现,那些“我以为我一直记得查”的事,加起来有七八条,靠脑子记根本记不住。

结果分三档:通过、警告、失败

一开始我只有两档,成功和失败。用了一阵子发现不行。比如证书还有二十天到期,这事确实要安排,但站点现在好好的,如果把它算成失败,整个检查结果就是一片红。红过几次之后,我心里就会想“这个红是证书那件事,先不管”,再往后,所有的红我都不太当回事了。这比不检查还糟糕。

所以后来改成三档:

分档的标准其实就一句话:现在还能不能正常用。证书还剩二十天,能用,算警告;某个安全响应头没配上,也能用,算警告;页面直接返回 500、错误页返回 200,那就不是“还能用”了,算失败。

关键在于,警告不能让整体变红。只要出现红色,就说明真出事了,这样红色才有分量;警告单独列在一边,我有空再去处理,不至于因为一条“快到期”把整屏都染红。

警告和失败混在一起,等于把失败降级成警告;红色一旦变成常态,就等于没有红色。

要查真实状态,不是“我以为的状态”

这条是我觉得最要紧的。脚本必须真的发请求、真的看返回码、真的去读证书的有效期,而不是打开配置文件扫一眼,推断“配成这样应该是好的”。

这两者的差别,我是在一件很小的事上意识到的。有次我改了一条跳转规则,配置文件里写得漂漂亮亮,我看过就放心了。后来随手请求了一下 http 的地址,发现它压根没跳,返回的是 200——规则是写了,但顺序不对,被前面一条先接住了。假如脚本只是“读一遍配置文件,确认规则存在”,那它一定会告诉我一切正常。

站点的真实状态,只有请求一次才知道。配置文件是“打算怎么做”,返回码是“实际做了什么”,这两件事经常不一样。

踩过的坑,以及现在什么时候跑它

我早期那版脚本有个挺危险的毛病,我叫它“静默的假成功”。它会跑完一长串步骤,最后打印一行“全部完成”,看着很规范,实际上它只是把命令一条条执行过去,从不检查每一步的结果。那段时间我以为自己在做巡检,其实是在给自己发安慰奖:里面好几个步骤因为参数写错根本没生效,它照样报告完成。

后来我给每一段都加上了判断:这一步期望什么、实际拿到什么、不一样就记一笔。现在只要有毛病,最后的汇总里一定有它。

这个坑给我的教训挺大:任何“一键脚本”都必须逐步校验真实结果,否则它比没有更危险。没有它,我至少知道自己没查;有了它,我会以为自己查过了。

至于什么时候跑,我现在定两个时机。一是每次改完站点之后,动了哪里就跑一遍,图个安心;二是每个月固定跑一次,这种检查真正的价值就在“我什么都没动”的时候也能发现变化——证书会一天天走向到期,别处的一点调整也可能影响到这里。

脚本本身不复杂,就一个脚本文件,一百来行,放在机器上想起来了就跑。它替我省下的其实不是时间,是那种“到底有没有事”的不确定感。


本文写于 2026-09-09,记录的是当时的情况与做法,未必适用于所有环境,仅供参考。

← 返回文章列表