Administrator
发布于 2026-10-05 / 6 阅读
0
0

证书安装成功,接下来继续设置Nginx的步骤

acme.sh + Cloudflare DNS 申请证书成功后完整后续步骤

前提:--issue 执行成功,已经拿到 blog.myfamily2027.top、stockapi.myfamily2027.top 两个域名的泛域名/多域名证书(dns_cf 就是Cloudflare DNS API方式)
证书默认路径:~/.acme.sh/blog.myfamily2027.top/

第1步:把证书安装复制到Nginx/Halo可读取目录(必须,不要直接引用acme.sh内部文件,acme会自动更新证书)

# 创建存放证书目录
mkdir -p /etc/ssl/myfamily2027

# 执行install-cert,这一步会自动注册证书续期钩子
~/.acme.sh/acme.sh --install-cert -d blog.myfamily2027.top \
--key-file       /etc/ssl/myfamily2027/private.key  \
--fullchain-file /etc/ssl/myfamily2027/fullchain.cer \
--reloadcmd     "docker restart nginx"
  • --reloadcmd "docker restart nginx":证书自动续期成功后,自动重启nginx加载新证书;如果你不是docker版nginx,改成 systemctl reload nginx
  • 执行完,/etc/ssl/myfamily2027/ 就有私钥+完整证书链

第2步:验证证书文件是否生成

ls -l /etc/ssl/myfamily2027/

能看到 private.key、fullchain.cer 两个文件就是正常。

第3步:Nginx反向代理配置(Halo博客,原端口8090)

新建/修改nginx站点配置 blog.conf

server {
    listen 80;
    server_name blog.myfamily2027.top;
    # http强制跳转https
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name blog.myfamily2027.top;

    ssl_certificate      /etc/ssl/myfamily2027/fullchain.cer;
    ssl_certificate_key  /etc/ssl/myfamily2027/private.key;

    # ssl安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    location / {
        proxy_pass http://127.0.0.1:8090; # Halo容器端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# stockapi子域名,如果你库管API用这个域名,可以单独配置
server {
    listen 80;
    server_name stockapi.myfamily2027.top;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name stockapi.myfamily2027.top;
    ssl_certificate      /etc/ssl/myfamily2027/fullchain.cer;
    ssl_certificate_key  /etc/ssl/myfamily2027/private.key;

    ssl_protocols TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://127.0.0.1:【这里填你的库管API端口】;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

第4步:检查Nginx配置语法,重载Nginx

# 检查配置
docker exec nginx nginx -t
# 重载配置(如果是宿主机nginx:nginx -t && systemctl reload nginx)
docker exec nginx nginx -s reload

⚠️ 服务器防火墙/安全组放行 80、443端口,关闭直接对外暴露的8090端口(安全重点!)

第5步:测试域名解析访问

  1. Cloudflare DNS把两个A记录解析到你VPS公网IP
    • blog.myfamily2027.top A记录 → VPS公网IP
    • stockapi.myfamily2027.top A记录 → VPS公网IP
  2. 浏览器访问 https://blog.myfamily2027.top,查看地址栏小锁,证书正常即可。

第6步:设置自动续期(acme.sh默认自带定时任务)

# 查看定时任务
crontab -l

acme.sh安装时会自动添加crontab,默认每天0点自动检测证书,到期前自动更新证书,并且执行上面写的 --reloadcmd 重启nginx加载新证书。
手动测试续期命令(仅测试,不会强制更新):

~/.acme.sh/acme.sh --cron

第7步:Cloudflare额外建议(可选)

  1. Cloudflare面板 → SSL/TLS → 模式改为 Full(完全),不要Flexible
  2. 开启最小版本TLS1.2,关闭旧协议

安全重点提醒

✅ 完成后,VPS安全组直接关闭8090端口对外访问,只留80/443;外部全部走443反向代理访问Halo,不再直接暴露8090。


如果你需要,我可以单独给你一份只针对Halo博客精简版nginx.conf,或者给你docker-compose.yml一键启动Nginx+Halo。


评论