备案通过之后:个人站转正 + HTTPS 的完整实操记录
背景:备案期间域名不能解析国内服务器
8 月底给个人站(AI 技能空间)提交了 ICP 备案。审核期有个硬规矩:域名不能解析到国内服务器,所以当时只把 aiskillspace.cn 解析过去、指到 nginx 的一个「备案中」占位页,完整站先用 IP:端口 内部预览。
9 月 9 号,备案下来了。记录一下转正全流程,都是能直接抄的。
第一步:签发证书(webroot 方式)
服务器上用 certbot 的 webroot 模式签发,不用停 nginx:
certbot certonly --webroot -w /opt/placeholder -d aiskillspace.cn -d www.aiskillspace.cn
关键点:-w 指向的占位目录已经挂载进了 nginx 容器,ACME 挑战文件放进去容器就能读到——签发和后续自动续期都不需要重建容器。证书 90 天有效期,certbot 的定时任务会自动续。
第二步:续期钩子,让证书「自己跑进容器」
Let’s Encrypt 证书在宿主机 /etc/letsencrypt/live/,但 nginx 跑在容器里读不到。写一个 deploy 钩子,续期成功后自动把证书复制到容器挂载目录并重载:
#!/bin/bash
# /etc/letsencrypt/renewal-hooks/deploy/mysite-deploy.sh
[ "$(basename "${RENEWED_LINEAGE:-}")" = "aiskillspace.cn" ] || exit 0
CERT_DIR=/opt/placeholder/certs
cp -f /etc/letsencrypt/live/aiskillspace.cn/fullchain.pem "$CERT_DIR/"
cp -f /etc/letsencrypt/live/aiskillspace.cn/privkey.pem "$CERT_DIR/privkey.pem"
docker exec mynginx nginx -s reload
多域名共存时记得按 RENEWED_LINEAGE 判断是哪本证书续期,别误触发。
第三步:nginx 切换
把原来指向占位页的 80 端口 server 块改成 301 到 https,新加 443 块挂完整站:
server {
listen 80;
server_name aiskillspace.cn www.aiskillspace.cn;
location /.well-known/acme-challenge/ { root /usr/share/nginx/html-placeholder; }
location / { return 301 https://$host$request_uri; }
}
server {
listen 443 ssl; http2 on;
server_name aiskillspace.cn www.aiskillspace.cn;
ssl_certificate /usr/share/nginx/html-placeholder/certs/aks-fullchain.pem;
# ... root 指向完整站目录
}
注意保留 /.well-known/acme-challenge/ 路径不被 301 走,否则下次续期签发验证会失败。
改完 nginx -t 校验语法,再 nginx -s reload 平滑生效。
踩过的两个坑
① Docker bind mount 的 inode 陷阱。 部署静态站时如果用 mv 换整个目录,nginx 容器里挂载的还是旧 inode——文件明明是新版本,容器读到的永远是旧版。要么原地覆盖文件,要么 docker restart。
② 容器内不能写 127.0.0.1。 一个域名要反代到宿主机另一个容器,nginx 配置里写 proxy_pass http://127.0.0.1:8080 指向的是容器自己。要用 docker 网桥网关地址(一般 172.17.0.1)。
页脚备案号:合规的细节
备案通过后,工信部要求网站首页底部挂备案号并链到 beian.miit.gov.cn。之前测试时挂过「粤ICP备xxxxxxxx号」这种占位假号——转正部署前一定要下掉,挂着假号上线是违规的。
另外还有一个容易忘的:ICP 通过后 30 天内要做公安联网备案(beian.mps.gov.cn,需本人实名核验)。网站名称、服务内容、服务器接入商信息提前备好。
结果
https://aiskillspace.cn全站 HTTPS/2,HTTP 自动 301- 证书自动续期 + 钩子自动同步进容器,后续无感
- 同容器内另一个已备案域名反代不受影响,平滑共存
个人站从「裸 IP + 占位页」到「域名 + HTTPS + 备案号」,整个链路其实就一个下午的事,但每个坑不踩一遍是不知道要踩的。