KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
上线速查 Runbook — keel 龙骨
域名申请与 HTTPS 上线 的参考信息:上线速查 Runbook
一页纸版本。按编号顺序执行,每一步后面都有「不通过就停下」的判据。
阶段一:域名(第 01–02 章)
[ ] 域名已购、实名通过、状态正常(非 Serverhold)
[ ] 已确认是否需要 ICP 备案(看服务器地域)
[ ] 备案号已在页脚展示(若需要)
阶段二:解析(第 03 章)
dig xxxxxx.cn +short # 期望:203.0.113.10
dig www.xxxxxx.cn +short # 期望:203.0.113.10
dig @8.8.8.8 www.xxxxxx.cn +short # 交叉验证
不通过 → 确认权威 DNS 后台是不是你改的那个(dig NS +short)。
阶段三:服务器(第 04 章)
ping -c 4 203.0.113.10 # 主机在线?
curl -I --max-time 5 http://203.0.113.10/ # 80 可达?
sudo nginx -t # 配置语法
sudo ss -lntp | grep -E ':80|:443' # 在监听?
不通过 → 依次查:云平台安全组 → iptables -L -n → nginx 是否启动。
阶段四:证书(第 05 章)
openssl x509 -in /etc/nginx/ssl/xxxxxx.cn_bundle.crt -noout -issuer -dates -ext subjectAltName
# 私钥匹配校验:两条 md5 必须一致
openssl x509 -noout -pubkey -in .../bundle.crt | openssl md5
openssl rsa -noout -pubkey -in .../key | openssl md5
ls -l /etc/nginx/ssl/ # crt 644 / key 600
阶段五:nginx HTTPS(第 06 章)
nginx -v # 决定 http2 写法
sudo cp /etc/nginx/sites-enabled/learning /tmp/learning.bak
sudo nginx -t # 必须 pass
sudo systemctl reload nginx # 用 reload,不是 restart
配置要点:
listen 443 ssl http2; # nginx < 1.25.1
ssl_certificate .../_bundle.crt; # 必须带中间证书
ssl_certificate_key .../.key;
# 80 侧保留 /.well-known/acme-challenge/ 不被 301
# 转发层带 X-Forwarded-Proto $scheme
阶段六:全站 https(第 07 章)
curl -s https://www.xxxxxx.cn/learning/ | grep -c 'http://' # 期望 0
curl -s https://www.xxxxxx.cn/learning/sitemap.xml | grep -c 'http://' # 期望 0
curl -s https://www.xxxxxx.cn/robots.txt
改了本地代码但线上没变 → 检查发布流程是否包含前端源码同步与重新构建:curl -s ... | grep -oE 'assets/[^"]+\.js' 与本地 dist/assets/ 比对。
阶段七:生命周期(第 08 章)
openssl x509 -in /etc/nginx/ssl/xxxxxx.cn_bundle.crt -noout -enddate
sudo certbot renew --dry-run # 若用 certbot
日历提醒:到期前 30 天开始续期,前 7 天必须完成。
一键总验收
./verify-site.sh # 脚本见第 08 章第四节
出事时的回滚(30 秒内)
sudo cp /tmp/learning.bak /etc/nginx/sites-enabled/learning
sudo nginx -t && sudo systemctl reload nginx
黄金规则:改配置前先备份,nginx -t 不过就不要 reload。