上线那天:域名、证书,和一条我打错的 IP
站点上线那天,容器全绿、内部 curl 全通,但公网访问 80 端口超时。
我的判断链是:端口超时 → 抓包看有没有 SYN 到达 → 一个都没有 → 结论:实例绑的安全组不是我看到的那个。为此我在控制台翻了很久,还去查了这台实例到底关联了哪条规则。
整套推论都建立在一个错误前提上:我在打错的 IP 上。真实地址是 203.0.113.69,我一直敲的是 203.0.113.96,69 和 96 顺序记反了——那个错的地址来自我自己抄错的一行 scp 输出。那台机器是别的东西,22 端口有响应,所以我连 ssh banner 都拿到了,反而更确信"网络是通的、只有 80 被拦"。
安全组从头到尾都正常。
这件事我记两条。
分层排查的方法没错,端口超时先看包到没到、再对照一个确定没监听的端口看是不是秒拒。但方法对不代表结论对,前提得先钉住:动手之前先在那台机器上 curl -s ifconfig.me,跟控制台里的地址对一遍。我那天省掉的是这五秒钟,花掉的是两个小时。
第二条是关于"看起来支持我假设的证据"。我拿到了错误机器的 ssh banner,那一刻应该起疑:如果这是我要找的服务器,为什么 22 端口响应而 80 超时,而 22 是我从没改过的。异常组合本身就是提示,我当时只顾着往下推。
后面就顺了:域名解析到正确地址,宿主机 nginx 反代到 127.0.0.1:8081,certbot 签证书,http 跳 https。上线后我做的第一件事是把站点地址填进后台——因为 sitemap、RSS、og:image 的绝对地址都读它,不填分享卡片就没图。