Nginx结合ACME自动SSL 证书配置

本文记录使用 acme.sh 为 Nginx 申请和部署 Let's Encrypt 证书的常用流程。

1. 安装 acme.sh

curl https://get.acme.sh | sh -s email=youeremail
source ~/.bashrc
acme.sh --set-default-ca --server letsencrypt

2. 配置 HTTP 验证入口

先准备一个统一的 80 端口站点,用于放置 acme-challenge 验证文件,并将普通访问重定向到 HTTPS。

server {
    listen 80 default_server;
    server_name _;

    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/www/html;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

说明:

  • default_server 表示当没有其他 server 块匹配时,流量会进入这里。
  • server_name _ 用作兜底匹配。
  • 所有域名都可以共用同一个验证目录 /var/www/html。

3. 签发证书

单个域名:

acme.sh --issue -d newdomain.com --webroot /var/www/html/

多个域名可以通过重复 -d 追加,最多支持 100 个域名。

4. 安装证书

建议先为目标域名准备独立目录,再把证书安装到固定路径中。

mkdir -p /etc/nginx/ssl/yourdomain/

acme.sh --install-cert -d yourdomain \
  --key-file /etc/nginx/ssl/yourdomain/private.key \
  --fullchain-file /etc/nginx/ssl/yourdomain/fullchain.cer \
  --reloadcmd "systemctl reload nginx"

--reloadcmd 会在证书更新后自动重载 Nginx。

5. 配置 HTTPS 站点

把证书路径和业务配置写入 443 端口的 server 块中。

server {
    listen 443 ssl;
    server_name yourdomain;

    ssl_certificate     /etc/nginx/ssl/yourdomain/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/yourdomain/private.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    location / {
        index index.html;
        proxy_pass http://127.0.0.1:8080;
    }
}

说明:

  • 如果是静态站点,可以把 proxy_pass 替换为 root。
  • 如果是反向代理场景,保留 proxy_pass,并按实际业务补充 proxy_set_header。

6. 续期建议

acme.sh 会自动处理续期任务。证书部署后,建议确认:

  • Nginx 的证书路径是否与安装命令一致。
  • 续期后是否能够正常执行 systemctl reload nginx。
  • 80 端口的验证路径是否仍然可访问。
本文地址: https://www.vvcms.cn/blog/nginx-acme-ssl
版权所有 © admin 未经授权不得转载