返回博客

备案通过之后:个人站转正 + 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 + 备案号」,整个链路其实就一个下午的事,但每个坑不踩一遍是不知道要踩的。

📍 定位中…
--° --
体感 --°💧 --%💨 --
加载中…
🔊