You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

脚本化非交互式使用Certbot配合Nginx获取Let's Encrypt SSL证书的操作咨询

脚本化非交互式使用Certbot配合Nginx获取Let's Encrypt SSL证书的操作咨询

嗨,我来帮你搞定在脚本里非交互式用Certbot获取Let's Encrypt SSL证书的问题~ 先看你给出的Nginx基础配置是没问题的,接下来咱们一步步来:

一、确认前置条件

在运行Certbot之前,先确保这几点:

  • 你的域名domain.tld已经正确解析到当前服务器的公网IP
  • Nginx服务处于运行状态(执行sudo systemctl start nginx启动)
  • 服务器防火墙已经开放80和443端口(比如用ufw allow 'Nginx Full'快速配置)
  • 你的服务器能正常通过HTTP访问(Let's Encrypt的HTTP-01验证依赖这一步)

二、完整的非交互式Certbot命令

你之前写的命令差几个关键参数,完整的非交互式命令应该是这样的:

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --non-interactive --email your-email@domain.tld -d domain.tld

我给你拆解下每个参数的作用:

  • --nginx:告诉Certbot自动检测并修改Nginx配置文件,无需手动编辑
  • --agree-tos:自动同意Let's Encrypt的服务条款,避免交互式确认
  • --redirect:自动将所有HTTP请求重定向到HTTPS,省去手动写重定向规则的麻烦
  • --hsts:添加HSTS响应头,强制浏览器后续仅通过HTTPS访问你的站点,提升安全性
  • --staple-ocsp:启用OCSP Stapling,减少SSL握手时间,同时提升隐私性
  • --non-interactive:核心参数,完全禁用交互式操作,适合在脚本中运行
  • --email:指定接收证书过期通知的邮箱(必须填写,否则Certbot会报错)
  • -d:指定要获取证书的域名,多个域名可以用多个-d参数,比如-d domain.tld -d www.domain.tld

三、Certbot对Nginx配置的修改

运行命令后,Certbot会自动修改你的Nginx配置文件,大致会变成这样(你可以在/etc/nginx/sites-available/super_site里查看):

server {
    listen 80;
    listen [::]:80;
    server_name domain.tld;
    # Certbot自动添加的重定向规则
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name domain.tld;
    root /var/www/super_site/public;
    index index.php index.html;

    access_log /var/log/nginx/super_site_access.log;
    error_log /var/log/nginx/super_site_error.log;

    # Certbot自动添加的SSL配置
    ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ ^/(doc|sql|setup)/ {
        deny all;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        include snippets/fastcgi-php.conf;
    }

    location ~ /\.ht {
        deny all;
    }
}

四、证书续期的脚本化处理

Let's Encrypt证书有效期是90天,Certbot默认会自动设置定时任务(比如systemd timer或者cron)来自动续期。如果要在脚本里手动触发续期,可以用:

sudo certbot renew --non-interactive --quiet

加上--quiet参数可以让续期命令不输出多余信息,适合脚本运行。你可以用sudo certbot renew --dry-run来测试续期流程是否正常,这个命令不会实际更新证书,只是模拟续期过程。

五、常见问题提醒

  • 如果你的站点用了CDN或者反向代理,要确保HTTP-01验证的请求能正确到达你的服务器(有些CDN需要开启“回源HTTP”或者配置验证路径的转发)
  • 如果需要通配符证书(比如*.domain.tld),就得用DNS-01验证方式,这时候需要结合你的域名服务商的API来自动添加DNS记录,命令会变成类似sudo certbot certonly --dns-<服务商> --dns-<服务商>-credentials /path/to/creds.ini --non-interactive --agree-tos -d *.domain.tld

备注:内容来源于stack exchange,提问作者Potivier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:13:10