文档中心
Nginx娉涘煙鍚峉SL璇佷功閰嶇疆鎸囧崡涓€娆℃悶瀹氭墍鏈夊瓙鍩熷悕瀹夊叏
时间 : 2025-09-27 16:27:08浏览量 : 1

关键词:Nginx泛域名配置SSL证书
一、为什么需要泛域名SSL证书?
想象一下:你运营一个SaaS平台,用户拥有`xxx.yourdomain.com`格式的子域名。如果每个子域名单独申请SSL证书:
1. 管理噩梦:1000个子域名=1000次申请+1000次续期
2. 成本爆炸:单域名证书均价¥200/年,1000个就是20万!
3. 部署延迟:新子域名上线需等待证书签发
泛域名证书(Wildcard SSL)就像"万能钥匙":
- 一张`*.yourdomain.com`证书覆盖所有同级子域名
- Let's Encrypt免费签发,商业证书约¥1500/年(不限子域名数量)
二、准备工作清单
| 必备项 | 示例值 | 作用说明 |
|--|--|-|
| 服务器环境 | Ubuntu 20.04 + Nginx 1.18 | 需支持SNI扩展 |
| 域名控制权 | DNS解析权限 | 用于验证证书所有权 |
| ACME客户端 | certbot | Let's Encrypt官方工具 |
```bash
安装certbot示例(Ubuntu)
sudo apt update
sudo apt install certbot python3-certbot-nginx
```
三、Nginx配置实战步骤
?? Step1. 基础配置模板
```nginx
server {
listen 80;
server_name ~^(?
HTTP自动跳转HTTPS(重要!)
return 301 https://$host$request_uri;
}
?? Step2. SSL证书申请
使用DNS验证方式(适合无公网IP场景)
sudo certbot certonly \
--manual \
--preferred-challenges=dns \
-d *.example.com \
--server https://acme-v02.api.letsencrypt.org/directory
执行后会提示添加DNS TXT记录:
_acme-challenge.example.com. IN TXT "gfj8Xq...zYQ"
?? Step3. Nginx SSL配置
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
TLS强化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
HSTS头(增强安全性)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains";
四、常见故障排错指南
? 错误1:SSL握手失败
现象:浏览器报"ERR_SSL_VERSION_OR_CIPHER_MISMATCH"
排查:
openssl s_client -connect sub.example.com:443 -servername sub.example.com
解决:检查Nginx的`ssl_protocols`是否包含客户端支持的协议版本
? 错误2:证书不匹配
现象:"NET::ERR_CERT_COMMON_NAME_INVALID"
原因:浏览器SNI未正确传递子域名
验证工具:[SSL Labs测试](https://www.ssllabs.com/ssltest/)
五、高级安全加固技巧
1. OCSP装订优化性能
```nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
```
2. 自动续期设置(避免过期)
```bash
crontab每月自动续期
0 3 */30 * * certbot renew --quiet --post-hook "systemctl reload nginx"
3. 混合内容防护
add_header Content-Security-Policy "upgrade-insecure-requests";
FAQ快速答疑
Q: Let's Encrypt泛域名有效期多久?需要频繁更新吗?
A: 90天有效期,建议配置自动续期(如上文crontab方案)
Q: `*.example.com`能否覆盖二级子域如`app.test.example.com`?
A: 不能!*通配符仅匹配一级子域,二级需单独申请`*.*.example.com`
Q: Nginx reload会导致HTTPS服务中断吗?
A: 不会!reload是优雅重启,保持现有连接的同时加载新配置
> ?? 最佳实践建议:生产环境建议搭配使用CDN(如Cloudflare),在其边缘节点卸载SSL加解密流量,既提升性能又降低后端服务器压力。
TAG:nginx泛域名配置ssl证书,nginx如何配置ssl证书,nginx配置多个ssl证书,nginx域名绑定,nginx 域名,nginx ssl_ciphers配置