必须先确认Nginx已启用--with-http_ssl_module模块(通过nginx -V检查),再正确申请含example.com和.example.com的通配符证书,最后在server块中配置listen 443 ssl、server_name example.com .example.com、ssl_certificate和ssl_certificate_key绝对路径,并设私钥权限600、属主为Nginx运行用户。

Linux 下用 Nginx 配置通配符(泛域名)SSL 证书,核心是两步:先正确申请带 *.example.com 的证书,再在 Nginx 中准确引用并启用 HTTPS。关键点不是“能不能配”,而是“每一步是否绕过常见坑”——比如 SSL 模块缺失、私钥权限错误、DNS 验证失败、或泛域名没覆盖主域名。
确认 Nginx 已启用 SSL 模块
这是所有配置的前提,跳过必报错:
- 运行
nginx -V(注意大写 V),在输出的configure arguments:行里查找--with-http_ssl_module - 没这个参数?说明编译时没开 SSL 支持,
ssl_certificate指令会被识别为非法指令,nginx -t直接失败 - 补救方法:回到原始源码目录,执行
./configure --with-http_ssl_module [其他原有模块参数] && make,然后用objs/nginx替换/usr/local/nginx/sbin/nginx(替换前先nginx -s stop)
申请通配符证书(推荐 acme.sh + DNS 自动验证)
手动申请容易卡在 DNS 解析延迟或 TXT 记录清理不及时,acme.sh 配合阿里云 DNS 是最稳路径:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 安装 acme.sh:
curl https://get.acme.sh | sh && source ~/.bashrc - 注册账号:
~/.acme.sh/acme.sh --register-account -m your@email.com - 配置阿里云 DNS 凭据(RAM 子账号需有
AliDNSFullAccess):export Ali_Key="xxx"export Ali_Secret="xxx"
建议写入~/.bashrc并source永久生效 - 签发泛域名证书(必须包含主域名 + 通配符):
~/.acme.sh/acme.sh --issue --dns dns_ali -d example.com -d *.example.com --dnssleep 60
注意:-d example.com不能省——泛域名*.example.com不匹配example.com本身 - 成功后证书路径如:
/root/.acme.sh/example.com_ecc/fullchain.cer和example.com.key
Nginx 配置 HTTPS server 块(含泛域名支持)
证书放哪、怎么读、怎么写配置,三者缺一不可:
- 把证书文件复制到明确路径,例如:
/etc/nginx/ssl/example.com/,避免用~/.acme.sh这类 root 专属路径(Nginx worker 进程通常无权访问) - 修复权限:
chmod 644 /etc/nginx/ssl/example.com/fullchain.cerchmod 600 /etc/nginx/ssl/example.com/example.com.key
私钥必须是600,且属主为 Nginx 运行用户(CentOS 通常是nginx:nginx,Ubuntu 是www-data:www-data) - 在
nginx.conf或站点 conf 文件中添加 server 块:server {<br> listen 443 ssl;<br> server_name example.com *.example.com;<br> ssl_certificate /etc/nginx/ssl/example.com/fullchain.cer;<br> ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;<br> # 其他 ssl_* 参数可选,但这两行必须存在且路径绝对准确<br> } - 同时建议加一个 80 端口重定向块,强制跳转 HTTPS:
server {<br> listen 80;<br> server_name example.com *.example.com;<br> return 301 https://$host$request_uri;<br> }
验证与排错要点
配置完别急着 reload,按顺序检查:
- 运行
nginx -t:确认语法无误,且能读取证书文件(若报permission denied,90% 是私钥权限或属主不对) - 检查证书是否真含泛域名:
openssl x509 -in /etc/nginx/ssl/example.com/fullchain.cer -noout -text | grep DNS
输出应含DNS:example.com, DNS:*.example.com - 确保系统防火墙(如 firewalld 或 ufw)放行 443 端口
- 浏览器访问
https://sub.example.com和https://example.com都应显示安全锁,无证书警告

















