目 录CONTENT

文章目录

Nginx使用Acme续签泛域名证书

数据渔港
2025-11-01 / 0 评论 / 0 点赞 / 47 阅读 / 1,109 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2025-11-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

使用 Acme 为 Nginx 续签泛域名证书,优势在于结合计划任务与自动化脚本实现全流程省心操作,通过编写包含证书续签、配置检测及 Nginx 平滑重启的脚本,搭配 crontab 定时任务,可按周期自动触发 DNS 验证、证书更新与服务重载,无需人工干预即可确保泛域名证书持续有效,既规避了手动操作疏漏,又以极简流程实现高效运维,让 HTTPS 服务稳定性与管理便捷性完美兼顾。

系统时区设置

  • 如果不设置好时区,设置的定时任务无法正常按照要求执行

 #设置上海时区
 sudo timedatectl set-timezone Asia/Shanghai

域名解析

  • 重要的事情多说几句,千万别忘记
	
  #如下方操作解析
  请在域名管理处泛域名解析到服务器  你的泛域名 123.456.789
  请在域名管理处泛域名解析到服务器  你的泛域名 123.456.789
  请在域名管理处泛域名解析到服务器  你的泛域名 123.456.789

设置系统源

  • 设置阿里云的软件源,my使用的是CentOS

  #安装crul和
  sudo yum install curl -y && sudo yum install wget -y

  #执行更换
  curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    
  #生成缓存
  yum makecache

安装nginx

  • 设置启用Nginx官方仓库

  #设置官方仓库
  sudo vi /etc/yum.repos.d/nginx.repo
  
  #在文件中添加以下内容保存生效
  [nginx]
  name=nginx repo
  baseurl=http://nginx.org/packages/centos/7/$basearch/
  gpgcheck=1
  enabled=1
  gpgkey=http://nginx.org/keys/nginx_signing.key
  
  #执行安装
  sudo yum install nginx
  
  #启用并启动Nginx
  sudo systemctl start nginx
  
  #设置开机启动
  sudo systemctl enable nginx

安装Acme.sh

  • 执行代码之后数分钟后会显示申请成功,之后复制到nginx目录设置ssl即可,可选的不需要的可以略过
  • 其他DNS域名托管商参考这个文档:github.com
	
  #安装acme.sh,安装不成功请使用科学,也可以离线安装
  curl https://get.acme.sh | sh
  cd /root/.acme.sh

  #设置自动更新
  ./acme.sh --upgrade --auto-upgrade
  
  #可选-查看版本
  acme.sh -v
  
  #切换服务商为ZeroSSL
  acme.sh --set-default-ca --server zerossl
  
  #关联账户
  acme.sh --register-account -m 你的邮箱 --server zerossl
  
  #设置Aliyun api非全局是域名api
  export Ali_Key=你KEY
  export Ali_Secret=你的ID
  
  #申请泛域名证书
  acme.sh --dns dns_ali --issue -d *.你的域名 -d 你的域名 --debug
  
  #创建SSL目录
  mkdir -p /etc/nginx/ssl
  
  #手动复制证书到nginx目录
  cp /root/.acme.sh/*.你的域名_ecc/* /etc/nginx/ssl/
  
  #可选-查看已申请好的域名证书路径
  acme.sh --issue --dns dns_ali --domain *.你的域名 你的域名 --debug 
	

配置Nginx ssl



  server {
      listen 80;
      server_name *.iteuu.com;
      return 301 https://$host$request_uri;

  }
  server {
      listen 443 ssl;
      server_name *.iteuu.com; #这里设置的是泛域名,所有域名都可以
      ssl_certificate /etc/nginx/ssl/fullchain.cer;  # SSL证书路径
      ssl_certificate_key /etc/nginx/ssl/你的泛域名.key;  # SSL私钥路径
      ssl_protocols TLSv1.2 TLSv1.3;
      ssl_ciphers HIGH:!aNULL:!MD5;
            

强制续签部署

  • 生成一个acme-xq.sh脚本,包含了强制续签安装到nginx的自动化
	
    #!/bin/bash

    # 设置日志文件路径
    LOG_FILE="/var/log/cert_force_renewal.log"

    # 定义日志记录函数
    log() {
        local message="$1"
        echo "$(date): $message" >> "$LOG_FILE"
    }

    # 强制续签证书
    log "Starting certificate force renewal..."
    "/root/.acme.sh"/acme.sh --renew -d 你的泛域名 --ecc --force
    if [ $? -ne 0 ]; then
        log "Certificate renewal failed!"
        exit 1
    fi
    log "Certificate renewal succeeded."

    # 复制证书文件到 Nginx 目录
    log "Copying certificate files to Nginx directory..."
    rm -f /etc/nginx/ssl/*
    cp /root/.acme.sh/你的泛域名_ecc/* /etc/nginx/ssl/
    if [ $? -ne 0 ]; then
        log "Failed to copy certificate files to Nginx directory!"
        exit 1
    fi
    log "Certificate files copied successfully."

    # 重新加载 Nginx 服务
    log "Reloading Nginx service..."
    systemctl reload nginx
    if [ $? -ne 0 ]; then
        log "Failed to reload Nginx service!"
        exit 1
    fi
    log "Nginx service reloaded successfully."

    log "Certificate force renewed and installed to Nginx."
	

使用计划任务

  • 设置脚本执行的日志路径就可以了**,程序会在每月 1 号的凌晨 2 点 30 分执行该任务
	
	# 编辑计划任务
	crontab -e
	
	# 填写执行脚本日期,程序会强制续签安装到Nginx
	30 2 1 * * /root/acme-xq.sh >> /var/log/acme_renew.log 2>&1

0

评论区

ip); ?>