嫌弃证书发放和续签比较麻烦或不方便的情况下,可以考虑用这个方法:
在Linux服务器上保存一份这个文件(比如/usr/local/bin/install_ssl):
#!/bin/bash
read -p "请输入你的域名(如 example.com): " DOMAIN
if [ -z "$DOMAIN" ]; then
echo "❌ 域名不能为空!"
exit 1
fi
if [ -f /etc/debian_version ]; then
OS="debian"
elif [ -f /etc/redhat-release ]; then
OS="centos"
else
echo "❌ 不支持的系统,请使用 Debian/Ubuntu 或 CentOS/Rocky/AlmaLinux"
exit 1
fi
if ! nc -z 127.0.0.1 80 >/dev/null 2>&1; then
echo "⚠️ 警告:80 端口未监听,请确保 Nginx 正常运行且域名已解析到本机!"
read -p "是否继续?(y/n): " CONFIRM
if [ "$CONFIRM" != "y" ]; then
exit 1
fi
fi
if ! command -v certbot >/dev/null 2>&1; then
echo "📦 正在安装 Certbot..."
if [ "$OS" == "debian" ]; then
apt update
apt install -y certbot python3-certbot-nginx
elif [ "$OS" == "centos" ]; then
yum install -y epel-release
yum install -y certbot python3-certbot-nginx
fi
else
echo "✅ Certbot 已安装,跳过安装步骤"
fi
echo "开始为 $DOMAIN 申请证书..."
dot_count=$(echo "$DOMAIN" | awk -F'.' '{print NF-1}')
if [ "$dot_count" -eq 1 ]; then
certbot certonly --nginx -d "$DOMAIN" -d "www.$DOMAIN" --non-interactive --agree-tos -m admin@$DOMAIN
else
certbot certonly --nginx -d "$DOMAIN" --non-interactive --agree-tos -m admin@$DOMAIN
fi
if [ $? -eq 0 ]; then
echo "✅ SSL 证书申请成功!"
echo "证书路径:/etc/letsencrypt/live/$DOMAIN/fullchain.pem"
echo "私钥路径:/etc/letsencrypt/live/$DOMAIN/privkey.pem"
echo ""
echo "请在 Nginx 配置中添加以下内容:"
echo "ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;"
echo "ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;"
else
echo "❌ SSL 证书申请失败,请检查域名解析或端口开放情况!"
exit 1
fi
if ! crontab -l | grep -q 'certbot renew --quiet'; then
(crontab -l 2>/dev/null; echo "0 3 * * * certbot renew --quiet") | crontab -
echo "已添加自动续期任务"
else
echo "自动续期任务已存在,跳过添加"
fi
certbot renew --dry-run
echo "============================"
echo " 申请完成 ✅"
echo " 自动续期已配置"
echo "============================"
保存好后,需要给一下可执行权限:
chmod +x /usr/local/bin/install_ssl
然后运行脚本:install_ssl,按提示输入域名后会有如下提示:

然后在nginx里配置一下证书路径(比如下面这种):

然后重启nginx,就可以了!
nginx资源404 nginx无法访问静态资源 Mac nginx PHP安装Imagick Imagick 多版本PHP环境安装Imagick SSL免费续签 SSL证书续签 SSL证书领取 SSL免费 SSL证书 link must be in js secure domain list uniapp分享 wx.config is not a function 微信分享 pyenv-virtualenv brew install pyenv-virtualenv ModuleNotFoundError: No module named 'requests' python报错 python环境