1. 背景与目标
本文档提供了一个详细的操作指南,用于在已运行 Nginx 的 Windows Server 环境下,使用 win-acme (WACS) 客户端为新的域名申请 Let's Encrypt SSL 证书,并从一开始就配置好全自动的续订和部署流程。此方法旨在避免分阶段配置的繁琐,实现“一步到位”。
前提条件:
-
服务器操作系统:Windows Server
-
Web 服务器:Nginx (已在运行并处理 HTTP/HTTPS 请求)
-
SSL 证书客户端:win-acme (WACS)
-
您已有一个或多个域名通过类似流程成功配置,并拥有一个可用的、通用的 Nginx 重载脚本 (例如
reload_nginx.bat
)。
核心目标:
-
为新域名成功申请 Let's Encrypt SSL 证书,Nginx 服务不中断。
-
证书直接以 PEM 格式存储在指定位置,私钥不加密。
-
Nginx 在证书成功获取及后续自动续订后,能够自动重新加载配置。
2. 步骤一:前期准备 (在运行 win-acme 之前)
在启动 win-acme 为新域名申请证书前,务必完成以下准备工作:
2.1. DNS 配置
确保您的新域名 (例如 newdomain.example.com
) 已经正确地将 A 记录 (或 CNAME 记录) 解析到您这台 Nginx 服务器的公网 IP 地址。
2.2. Nginx 配置 (针对新域名)
您需要在 Nginx 的配置文件中 (通常是 nginx.conf
或 conf.d
目录下的某个文件) 为新域名添加或修改相应的 server
块。
-
配置 80 端口的 server 块:
这个 server 块主要负责两件事:处理 Let's Encrypt 的 HTTP-01 域名验证请求,以及将所有其他 HTTP 请求重定向到 HTTPS。
server { listen 80; server_name newdomain.example.com; # 将这里替换为您的新域名 # ACME HTTP-01 域名验证处理 location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; # 指定新域名的网站根目录 (webroot) # win-acme 会在这个目录下创建 .well-known/acme-challenge/ 子目录并写入验证文件 root D:/path/to/newdomain_webroot; # 将这里替换为新域名实际的网站文件根目录 } # 将所有其他 HTTP 请求永久重定向到 HTTPS location / { return 301 https://$server_name$request_uri; } }
重要:
-
将
newdomain.example.com
替换为您的实际新域名。 -
将
D:/path/to/newdomain_webroot
替换为该新域名对应的网站文件在服务器上的实际根目录路径。确保 Nginx 对此路径有读取权限。
-
-
(可选) 准备 443 端口的 server 块骨架:
您可以先为新域名创建一个监听 443 端口的 server 块的基本结构。ssl_certificate 和 ssl_certificate_key 的路径可以暂时留空或使用占位符,等 win-acme 成功颁发证书后再回来填写准确的路径。
# server { # listen 443 ssl http2; # server_name newdomain.example.com; # 替换为您的新域名 # # ssl_certificate D:/cer/newdomain.example.com/fullchain.pem; # 证书路径占位符 # ssl_certificate_key D:/cer/newdomain.example.com/privkey.pem; # 私钥路径占位符 # # # 其他 SSL 配置 (ssl_protocols, ssl_ciphers 等) # # 网站根目录和 location 配置 # root D:/path/to/newdomain_webroot; # 与 80 端口配置中的 root 保持一致 # location / { # # ... (例如 try_files, index 等) ... # } # }
-
测试并重载 Nginx 配置:
-
保存对 Nginx 配置文件的修改。
-
打开命令提示符 (以管理员身份),导航到 Nginx 的安装目录。
-
运行
nginx -t
来测试配置文件的语法是否正确。确保没有错误。 -
如果测试通过,运行
nginx -s reload
来重新加载 Nginx 配置,使新的server
块生效。
-
确保 Nginx 能够正常启动,并且可以通过 HTTP 访问您的新域名(即使它会立即重定向到 HTTPS,或者对于 /.well-known/acme-challenge/
路径能被正确路由到指定的 root
)。
3. 步骤二:使用 win-acme 为新域名申请证书 (一步到位配置)
完成上述准备工作后,启动 win-acme 客户端 (wacs.exe
),并按照以下步骤操作:
-
选择创建模式:
-
在主菜单中,输入
M
选择Create certificate (full options)
(创建证书 - 完整选项),然后按回车。
-
-
指定域名来源 (Source):
-
通常选择
Manual input
(手动输入) 或类似的选项。 -
输入您的新域名 (例如
newdomain.example.com
),然后按回车。 -
可能会提示输入一个“友好名称 (Friendly name)”,您可以接受默认(通常是主域名)或自定义一个。
-
-
配置域名验证 (Validation):
-
当询问如何证明域名所有权时 (How would you like to prove ownership for the domain(s)?), 选择 HTTP-01 验证方式。
-
在具体的 HTTP-01 验证方法列表中,选择
1: [http] Save verification files on (network) path
(将验证文件保存到(网络)路径,即 filesystem/webroot 方式)。 -
当提示输入
Path:
(网站根路径) 时,输入您在步骤 2.2.1 中为新域名 Nginx 配置中指定的root
目录路径 (例如D:\path\to\newdomain_webroot
),然后按回车。 -
当询问
Copy default web.config before validation? (y/n*)
(是否在验证前复制默认 web.config) 时,直接按回车选择默认的“否 (n)”。
-
-
配置证书存储 (Store):
-
win-acme 可能会首先列出一些存储选项,或者默认选中了 Windows Certificate Store。我们的目标是使用
PemFiles
。 -
选择添加/更改存储插件的选项。
-
选择
2: PEM encoded files (Apache, nginx, etc.)
存储插件。 -
当提示输入
File path:
(PEM 文件输出路径) 时,为您的新域名指定一个清晰、固定且独立的目录路径,例如D:\cer\newdomain.example.com\
(请确保这个路径与您为其他域名配置的路径不同,以便管理)。然后按回车。-
提示:如果该目录不存在,win-acme 通常会自动创建它。
-
-
当提示为私钥文件设置密码 (
Password to set for the private key .pem file.
) 时,选择1: None
(无密码),然后按回车。 -
当询问
Would you like to store it in another way too?
(是否还想用其他方式存储) 时,选择5: No (additional) store steps
(无额外的存储步骤),然后按回车。
-
-
配置安装步骤 (Installation) - Nginx 重载:
-
当询问安装步骤时 (
Which installation step should run first?
),选择2: Start external script or program
(启动外部脚本或程序)。 -
当提示输入
File:
(脚本文件路径) 时,输入您已经准备好并且测试通过的、用于重新加载 Nginx 的通用批处理脚本的完整路径 (例如D:\smartPC\nginx-1.24.0\reload_nginx.bat
),然后按回车。-
这个脚本应该是您为
bgzs.pcxzf.cn
配置并测试成功的那个,它可以被多个续订任务共用。
-
-
当提示输入
Parameters:
(脚本参数) 时,将其留空 (直接按回车键)。 -
当询问
Add another installation step?
(是否添加其他安装步骤) 时,选择3: No (additional) installation steps
,然后按回车。
-
-
其他选项与完成:
-
win-acme 可能会询问关于 CSR (证书签名请求) 生成、密钥类型等问题,通常接受默认选项 (如 RSA 密钥) 即可。
-
仔细阅读后续的确认信息。win-acme 在完成所有配置后,通常会立即尝试为新域名申请证书。
-
观察 win-acme 的输出,确保域名验证成功、证书下载成功、
PemFiles
存储成功,以及安装脚本被调用。
-
4. 步骤三:更新 Nginx 的 443 端口配置 (如果之前未完成)
如果在步骤 2.2.2 中您只为新域名创建了 443 端口 server
块的骨架,现在 win-acme 已经成功颁发了证书并将 PEM 文件保存到了您在步骤 3.4 中指定的路径 (例如 D:\cer\newdomain.example.com\
),您需要:
-
确认 PEM 文件名:进入该目录 (例如
D:\cer\newdomain.example.com\
),查看实际生成的证书文件名。通常会有类似newdomain.example.com-chain.pem
(完整证书链) 和newdomain.example.com-key.pem
(私钥) 的文件。 -
更新 Nginx 配置:
编辑 Nginx 配置文件,找到为新域名配置的 443 端口 server 块,将 ssl_certificate 和 ssl_certificate_key 指令指向这些实际生成的 PEM 文件:
server { listen 443 ssl http2; server_name newdomain.example.com; # 替换为您的新域名 ssl_certificate D:/cer/newdomain.example.com/newdomain.example.com-chain.pem; # 确保证书链文件名正确 ssl_certificate_key D:/cer/newdomain.example.com/newdomain.example.com-key.pem; # 确保证书私钥文件名正确 # 其他 SSL 配置 (ssl_protocols, ssl_ciphers 等,可以参考您成功的 bgzs.pcxzf.cn 配置) # 网站根目录和 location 配置 root D:/path/to/newdomain_webroot; # 与 80 端口配置中的 root 保持一致 location / { # ... (例如 try_files, index 等) ... } }
-
测试并重载 Nginx:
-
运行
nginx -t
。 -
运行
nginx -s reload
。
-
5. 步骤四:测试
-
浏览器测试:
-
打开浏览器,访问
https://newdomain.example.com
。 -
点击地址栏的小锁图标,检查证书详情,确认颁发给的是您的新域名,签发者是 Let's Encrypt,并且有效期是正确的。
-
-
(可选) win-acme 手动续订测试:
-
如果您想立即测试续订流程,可以在 win-acme 中找到为新域名创建的续订任务,选择强制运行 (
S: Run ... (force)
)。 -
检查 win-acme 的输出、Nginx 重载脚本的日志文件 (
D:\smartPC\nginx-1.24.0\logs\win-acme_nginx_reload_script.log
) 以及 PEM 文件的修改时间,确保一切按预期工作。
-
通过以上“一步到位”的配置方法,您可以高效地为新的域名在 Nginx 环境下配置好 Let's Encrypt SSL 证书的自动申请与续订,确保网站的 HTTPS 服务持续、安全且无需人工干预。