如何在Nginx Proxy Manager中为多个域名配置Let's Encrypt证书?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
时维教育顾老师 2025-11-25 14:55关注一、Nginx Proxy Manager中多域名Let's Encrypt证书配置深度解析
1. 问题背景与常见现象分析
在使用Nginx Proxy Manager(NPM)部署多个域名服务时,开发者常遇到SSL证书仅对主域名生效的问题。例如:为
example.com和api.example.com创建代理主机时,系统默认只将主域名example.com提交至Let's Encrypt进行签发,子域名未被包含在SAN(Subject Alternative Name)字段中,导致访问api.example.com时浏览器提示“您的连接不是私密连接”。该问题的根本原因在于NPM的SSL证书申请逻辑依赖于代理主机配置中的“域名”输入框内容。若未显式添加所有需要保护的域名,则ACME协议只会为主域名请求证书。
2. 多域名证书配置方法详解
要确保多个域名(包括主域与子域)共用一张有效的Let's Encrypt证书,必须在创建或编辑代理主机时正确填写域名字段:
- 步骤1:进入Nginx Proxy Manager管理界面 → “Hosts” → “Proxy Hosts” → 点击“Add Proxy Host”
- 步骤2:在“Domain Names”输入框中,逐行输入所有需保护的域名,如:
example.com www.example.com api.example.com admin.example.com注意:每个域名占一行,NPM会自动将其作为SAN条目提交给Let's Encrypt。
这样生成的证书将包含全部列出的域名,避免SSL警告。
3. 是否需要启用通配符证书?场景对比分析
需求类型 适用方案 优点 缺点 验证方式要求 固定几个子域 多域名证书(SAN) 简单、兼容性好 无法覆盖未来新增子域 HTTP或DNS均可 大量动态子域 通配符证书(*.example.com) 一次签发,支持无限子域 必须使用DNS验证 DNS验证(如Cloudflare API) 结论:对于少量明确的子域名,推荐使用多域名SAN证书;若存在频繁新增子域的需求(如SaaS平台),则应采用通配符证书。
4. DNS验证集成Cloudflare实现通配符证书签发
当选择通配符证书时,Let's Encrypt要求通过DNS-01挑战验证域名所有权。Nginx Proxy Manager本身不直接支持DNS插件,但可通过反向工程其底层ACME客户端(acme.sh或certbot)结合外部脚本实现。
以下是基于
acme.sh+ Cloudflare API的集成流程:- 获取Cloudflare Global API Key或API Token(建议最小权限原则)
- 在服务器上安装acme.sh:
curl https://get.acme.sh | sh - 设置环境变量以供DNS调用:
export CF_Token="your_api_token"export CF_Account_ID="your_account_id" - 申请通配符证书:
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com' - 导出证书并手动配置到NPM指定路径(/data/ssl/custom/...)
- 在NPM中选择“Use Custom SSL Certificate”绑定已签发证书
5. 自动续期失败排查清单
Let's Encrypt证书有效期为90天,自动续期机制至关重要。当续期失败时,应按以下顺序检查:
- 检查NPM日志输出:
查看容器日志:docker logs nginx-proxy-manager,搜索关键词“Let's Encrypt”、“error”、“failed” - 确认域名解析状态:确保所有域名仍正确指向当前服务器IP
- 验证HTTP-01可达性:从外网访问
http://your-domain/.well-known/acme-challenge/是否可读 - DNS记录有效性:若使用DNS验证,确认TXT记录已成功发布且TTL已过期
- API凭据时效性:Cloudflare等服务商的Token可能过期或权限变更
- 速率限制:Let's Encrypt对同一域名每周最多允许5次失败重试
- 存储卷权限:确保证书目录(如/data/letsencrypt)具有写入权限
- NPM版本兼容性:旧版本可能存在ACMEv2协议支持缺陷,建议升级至最新稳定版
6. 架构级优化建议与监控策略
为提升生产环境稳定性,建议实施如下架构实践:
graph TD A[用户请求] --> B{域名判断} B -->|主站流量| C[example.com] B -->|API流量| D[api.example.com] B -->|管理后台| E[admin.example.com] C --> F[Nginx Proxy Manager] D --> F E --> F F --> G[ACME客户端触发证书申请] G --> H{验证方式} H -->|HTTP-01| I[开放80端口响应挑战] H -->|DNS-01| J[调用Cloudflare API写入TXT] J --> K[成功获取多域名/Wildcard证书] K --> L[自动部署至NPM] L --> M[定期健康检查与告警]通过上述流程图可见,完整的证书生命周期管理应嵌入CI/CD与监控体系中。推荐使用Prometheus + Alertmanager监控证书剩余有效期,并通过Webhook通知运维团队。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报