之前网页连接总是显示不安全,看着很难受,虽然这个网站也没有什么有价值的信息值得别人攻击,但是既然现在有时间了,那就签个证书吧
首先我使用的是github上的acme.sh工具,支持全自动免费续签证书,很方便
acme.sh项目地址:https://github.com/acmesh-official/acme.sh?tab=readme-ov-file
安装
- 安装很简单,就按照github上的教程安装就行了
- 后面的邮箱要换成自己的,用于注册和到期提醒等
curl https://get.acme.sh | sh -s email=my@example.com- 关于因为连不上github的情况导致的安装失败,b站教程也有详细的解释
- 后续安装成功应该是这样的:

- 需要记一下安装地址
切换CA机构
- acme.sh默认用的是ZeroSSL,如果希望换为 Let's Encrypt来颁发,就需要执行下面的命令来切换CA
acme.sh --set-default-ca --server letsencrypt- 切换CA后可能需要用邮箱重新注册一下进行账号登记
/root/.acme.sh/acme.sh --register-account -m ****@**.com- 我这边使用的是 Let's Encrypt
因为我在签证书的时候,命令写错了,导致多次验证失败,ZeroSSL直接把我封了24小时
申请新证书
- 这里就跟着教程来,但需要注意一下,如果你有两个HOST,并且两个网站都是有不同的数据库,放在不同的根目录下的,是完全独立的站点,比如像我一样,一个www,一个blog,可能需要对命令进行一些修改,不然就像我一样被ZeroSSL封了...
- 同时也有很多颁发证书的方法,具体可以看github教程
- 我这边就说一下在两个三级域名的情况下,怎么用webroot模式来颁发证书,采用webroot可以规避后续签发证书时,导致占用80端口而使nginx停机几十秒的情况,虽然也就几十秒,完全没有影响就是了。
- 首先教程給的原指令是
acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com- 这边虽然它有两个三级域名,但是只有一个根目录
/home/wwwroot/example.com,如果在我这种情况下直接使用,会出现奇奇怪怪的问题,在使用zerossl的话,会出现网络超时的问题,而用letsencrypt的话,就直接404了 这是当时我的Let's Encrypt的报错
[Sun Jan 25 07:38:19 PM CST 2026] Changed default CA to: https://acme-v02.api.letsencrypt.org/directory root@*******:~# /root/.acme.sh/acme.sh --issue -d blog.comyugetsu.top -d www.comyugetsu.top --webroot /www/wwwroot/comyugetsu.top [Sun Jan 25 07:38:35 PM CST 2026] Using CA: https://acme-v02.api.letsencrypt.org/directory [Sun Jan 25 07:38:35 PM CST 2026] Multi domain='DNS:blog.comyugetsu.top,DNS:www.comyugetsu.top' [Sun Jan 25 07:38:44 PM CST 2026] Getting webroot for domain='blog.comyugetsu.top' [Sun Jan 25 07:38:44 PM CST 2026] Getting webroot for domain='www.comyugetsu.top' [Sun Jan 25 07:38:44 PM CST 2026] Verifying: blog.comyugetsu.top [Sun Jan 25 07:38:46 PM CST 2026] Pending. The CA is processing your order, please wait. (1/30) [Sun Jan 25 07:38:51 PM CST 2026] blog.comyugetsu.top: Invalid status. Verification error details: *******: Invalid response from http://blog.comyugetsu.top/.well-known/acme-challenge/QyV6Z-26yt4C-Eh59zjELvpx9J8R8pp3ifaFDdWIXe4: 404 [Sun Jan 25 07:38:51 PM CST 2026] Please add '--debug' or '--log' to see more information. [Sun Jan 25 07:38:51 PM CST 2026] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh- 所以后面其实要接两个地址,都是你的两个网站的根目录
- 先运行这个命令
nginx -T | grep -E "server_name|root"- 输出:

- 我有三个三级语域名,分别存在于两个完全不同的文件夹下,所以后面要接两个地址
- 实际命令就是:
/root/.acme.sh/acme.sh --issue \
-d blog.comyugetsu.top -w /www/wwwroot/comyugetsu.blog.top \
-d www.comyugetsu.top -w /www/wwwroot/comyugetsu.top- 这个过程有可能会经历几次连接超时,没办法,毕竟国内连国外,多试几次总会成功的。
输出:
[Sun Jan 25 07:47:26 PM CST 2026] Your cert is in: *** [Sun Jan 25 07:47:26 PM CST 2026] Your cert key is in: *** [Sun Jan 25 07:47:26 PM CST 2026] The intermediate CA cert is in: *** [Sun Jan 25 07:47:26 PM CST 2026] And the full-chain cert is in: ***
安装证书
- 此时证书还在
/root/.acme.sh/...,要把证书从/root先复制到nginx能读到的/etc/nginx/ssl目录 - 命令:
mkdir -p /etc/nginx/ssl
/root/.acme.sh/acme.sh --install-cert -d blog.comyugetsu.top \
--key-file /etc/nginx/ssl/blog.key \
--fullchain-file /etc/nginx/ssl/blog.cer \
--reloadcmd "service nginx force-reload"- 按照自己的实际情况具体更改即可
- 然后
nginx -t- 出现
syntax is ok后就重启
service nginx restart修改配置文件
- 先查看网站配置文件叫啥名:
ls /www/server/panel/vhost/nginx/- 我这边是叫
comyugetsu.blog.top.conf和comyugetsu.top.conf
先配comyugetsu.top.conf(无typecho后台)
- 然后用nano打开文件
nano /www/server/panel/vhost/nginx/comyugetsu.top.conf- 然后把下列配置添加到原文件最后一个 } 的后面(新添加的 HTTPS (443端口) 配置)
server {
listen 443 ssl http2;
server_name comyugetsu.top www.comyugetsu.top;
# 网站目录 (根据你之前 nginx -T 查到的结果填写)
root /www/wwwroot/comyugetsu.top;
index index.php index.html index2.html;
# SSL 证书路径 (复用刚才安装的证书,也就是彻底安装好证书之后的那个输出,不是刚刚签发好证书的那个输出)
ssl_certificate /***/***/***;
ssl_certificate_key /***/***/***;
# SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# PHP 配置
include enable-php-82.conf;
# 伪静态规则
include /www/server/panel/vhost/rewrite/comyugetsu.top.conf;
# 禁止访问的文件
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
return 404;
}
# 错误页配置
error_page 404 /404.html;
}note type="success flat"
退出nano编辑器:
按 Ctrl + O (保存) -> 按 Enter (确认)
按 Ctrl + X (退出)
后配comyugetsu.blog.top.conf(有typecho后台)
- 然后用nano打开文件
nano /www/server/panel/vhost/nginx/comyugetsublog.top.conf- 然后把下列配置添加到原文件最后一个 } 的后面(新添加的 HTTPS (443端口) 配置)
server {
listen 443 ssl http2;
server_name blog.comyugetsu.top;
# 证书路径(复用刚才安装的证书)
ssl_certificate /***/***/***;
ssl_certificate_key /***/***/***;
# SSL 协议配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 网站根目录(根据你之前 nginx -T 查到的结果填写)
root /www/wwwroot/comyugetsu.blog.top;
index index.php index.html;
# Typecho 伪静态规则
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
# 【关键修正】直接使用宝塔自带的 PHP-82 配置
# 这行代码会自动处理 PathInfo,让后台正常访问
include enable-php-82.conf;
# 错误页
error_page 404 /404.html;
}- 然后
nginx -t- 出现
syntax is ok和Successful后就重启
service nginx restart- 然后通过
https://访问,大概率是可以访问到的,也就是成功了🎉🎉🎉🎉🎉🎉🎉🎉🎉 - 如果还是没有
https:,那主要就是看看你服务器防火墙有没有开 443 端口
查看证书
acme.sh --info -d domain.com更新证书
-acme.sh 安装完成后会每日执行证书状态检测。如果检测到证书剩余有效期不足 30 天,脚本将尝试自动触发续期,全程无需人工操作。
-如需提前更新,可执行以下指令针对某个域名手动进行强制更新:
acme.sh --renew -d domain.com --force中途踩的一个坑:
最开始我的blog.的conf配置最后多加了一个配置:
location ~ [^/]\.php(/|$) {
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-74.sock; # 注意:这里的 74 取决于你的 PHP 版本,可能是 56, 72, 80 等
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
}AI给的,结果直接把我的typecho后台给干404了
后续AI给的原因是:
这是一个非常经典的问题,原因出在我刚才给你提供的那个“通用 PHP 配置”里有一行代码太严格了,把 Typecho 的后台路径(/admin/)给误杀(404)了。
Typecho 的后台地址其实是“虚拟”的(比如 index.php/admin/),但我给你的配置里有一句 try_files $uri =404;,它会去硬盘里找真实存在的 /admin/ 文件夹,找不到就报错 404。
解决方法非常简单:删繁就简。 既然你用的是宝塔面板,它自带的 enable-php-82.conf 已经写得很完美了,我们不需要手写那一堆复杂的 PHP 配置。
评论已关闭