核心难点在于证书文件完整性、续签路径拦截、权限与路径一致性:必须用_bundle.crt(含证书链)和对应.key;反向代理需前置配置/.well-known/acme-challenge/本地处理;私钥权限须为600且路径与nginx配置严格一致。

用宝塔面板或 Nginx Proxy Manager(NPM)管理 Nginx 的 SSL 证书,核心难点不在“怎么点”,而在于“谁在读、怎么读、读对没”。很多 HTTPS 配置失败,不是证书没申请到,而是文件路径错、权限不对、链不完整,或续签时被反向代理吞掉了验证请求。下面这些是真实高频出问题的环节,直接说清怎么做。
证书文件必须配齐三样:私钥、域名证书、证书链
很多人只粘贴了 .crt 或 .pem 内容,漏掉证书链,结果 iOS 和部分安卓浏览器提示“证书不受信任”。腾讯云、阿里云下载的 Nginx 包里,优先用 _bundle.crt 文件作为证书内容(它已合并域名证书 + 中间 CA),而不是单独的 domain.crt;私钥必须用对应的 .key 文件,不能混用其他项目密钥。若只有 .pem 和 .key,可手动合并:
把 .pem 内容(含 BEGIN CERTIFICATE 块)全部复制进“证书(PEM格式)”框;
把 .key 内容(含 BEGIN PRIVATE KEY 块)完整粘贴进“密钥(KEY)”框。
反向代理场景下,Let’s Encrypt 续签极易静默失败
宝塔或 NPM 开启自动续签后,如果网站配置了反向代理,Nginx 默认会把 /.well-known/acme-challenge/ 请求也转发给后端,导致验证文件无法被 ACME 服务器访问。这不是面板 bug,是配置逻辑缺失。
解决方法:在反向代理规则前,显式声明该路径由本机处理:
– 宝塔用户需手动编辑站点配置文件(/www/server/panel/vhost/nginx/你的域名.conf),在 location / { proxy_pass ... } 上方插入:
location ^~ /.well-known/acme-challenge/ {
root /www/wwwroot/你的域名;
try_files $uri =404;
}
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
– NPM 用户需在对应 Proxy Host 的 “Custom locations” 中添加该 location 块,并确保其顺序在主代理规则之前。
权限与路径不一致,更新等于白做
自动续签脚本生成的新证书若放在 /etc/letsencrypt/live/,但 Nginx 配置里写的是 /www/server/panel/vhost/cert/,那重载后仍用旧证书。更隐蔽的问题是权限:
– 私钥文件必须为 600 权限(chmod 600 your.key),否则 Nginx 启动报错或拒绝加载;
– 证书文件建议设为 644 权限;
– 所有证书相关文件所属用户应为 www 或 root(取决于 Nginx 运行用户),不能是普通用户或 nobody。
Nginx Proxy Manager 特别注意:自定义证书需禁用“Force SSL”再导入
NPM 界面中,如果已开启 “Force SSL” 或 “HTTP to HTTPS Redirect”,再上传自定义证书时可能因配置冲突导致 502 或空白页。正确流程是:
– 先关闭 “Force SSL” 和重定向开关;
– 在 “SSL Certificate” 标签页选择 “Upload a new SSL certificate”,上传 .key + .pem(或 bundle.crt);
– 成功保存后,再回到设置页重新启用 HTTPS 强制跳转;
– 最后点击右上角 “Save” 按钮(不是单个表单的保存),触发 Nginx 重载。










