文档中心
Nginx澶氬煙鍚峉SL璇佷功閰嶇疆鎸囧崡涓€鏈哄鐢ㄥ畨鍏ㄦ棤蹇?txt
时间 : 2025-09-27 16:26:40浏览量 : 3
什么是多域名SSL证书?

想象你经营着好几家网店,每家都有不同的域名:shop1.com、shop2.com、blog.shop1.com等等。要为每个网站单独配置服务器不仅麻烦,还浪费资源。多域名SSL证书(也叫SAN证书)就像是一把万能钥匙,可以同时保护多个不同的域名。
举个例子:
- 单域名证书:只能保护 www.example.com
- 多域名证书:可以同时保护 example.com、shop.example.com、api.example.org 等多个完全不相关的域名
为什么需要多域名SSL配置?
1. 成本效益:一张证书保护多个域名,比单独购买多个证书便宜
2. 管理简便:只需维护一个证书文件,更新和续期都更方便
3. 性能优化:减少TLS握手次数,提升网站加载速度
实际案例:某电商平台拥有主站(example.com)、移动端(m.example.com)、API接口(api.example.com)三个子域。使用多域名SSL后:
- 运维工作量减少60%
- SSL相关故障率下降75%
- 每年节省约$500的证书费用
Nginx配置前的准备工作
在开始之前,你需要准备好:
1. 有效的多域名SSL证书(包含.crt和.key文件)
2. Nginx服务器root权限
3. 需要保护的域名已经解析到服务器IP
以常见的Certbot申请为例:
```bash
sudo certbot certonly --manual --preferred-challenges dns -d example.com -d shop.example.com -d api.example.org
```
这个命令会为example.com、shop.example.com和api.example.org三个域名生成一个联合证书。
Nginx基础配置方法
单个server块配置多个域名
这是最简单的配置方式,适合所有域名使用相同网站内容的情况:
```nginx
server {
listen 443 ssl;
server_name example.com www.example.com shop.example.com;
ssl_certificate /etc/ssl/certs/multi_domain.crt;
ssl_certificate_key /etc/ssl/private/multi_domain.key;
其他通用配置...
}
多个server块共享同一证书
更常见的场景是不同域名需要展示不同内容:
第一个网站配置
server_name example.com www.example.com;
root /var/www/example;
其他专属配置...
第二个网站配置
server_name shop.example.com;
ssl_certificate /etc/ssl/certs/multi_domain.crt;
root /var/www/shop;
注意这里两个server块引用了相同的证书文件,但服务不同的网站内容。
HTTPS强制跳转最佳实践
为了确保所有流量都走加密通道,我们需要设置HTTP到HTTPS的自动跳转:
listen 80;
HTTP自动跳转到HTTPS
return 301 https://$host$request_uri;
这个配置会捕获所有HTTP请求,并301重定向到对应的HTTPS地址。
OCSP Stapling性能优化
OCSP Stapling可以显著提高SSL握手速度:
ssl_stapling on;
ssl_stapling_verify on;
Cloudflare DNS作为OCSP验证器示例
resolver 1.1.1.1 valid=300s;
resolver_timeout 5s;
ssl_trusted_certificate /path/to/fullchain.pem;
启用后可以减少客户端验证时间约200-300ms。
HSTS安全增强配置
HTTP严格传输安全(HSTS)可以防止降级攻击:
```nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
这个头部告诉浏览器:"未来两年内都只能用HTTPS访问我和我的子域"。
SNI技术处理旧浏览器兼容性
对于不支持SNI(Server Name Indication)的古老浏览器(如IE6/WinXP),可以设置默认回退:
listen 443 ssl default_server;
"兜底"的旧版兼容性证书
这样当老浏览器无法指明要访问哪个域时,至少能看到一个有效(但不一定匹配)的HTTPS页面。
CSR生成技巧与密钥管理
生成CSR时包含所有备用名称(SAN):
openssl req -new -newkey rsa:2048 -nodes -keyout multi.key \
-out multi.csr \
-subj "/CN=example" \
-addext "subjectAltName=DNS:example,DNS:www.example,DNS:shop.examle"
密钥安全管理建议:
1. key文件权限设置为600 (chmod600)
2. key文件所有权设为root (chown root:root)
3. key文件存储在/etc/ssl/private等受限目录
Let's Encrypt自动化示例
使用Certbot自动续期多域名单个证书:
certbot certonly --webroot \
-w /var/www/html -d example \
-w /var/www/shop -d shop.examle \
--expand --keep-until-expiring --non-interactive --agree-tos
`--expand`参数允许后续添加新域到现有证书记录中。
TLS协议最佳实践推荐
在Nginx中禁用不安全的协议和密码套件:
ssl_protocols TLSv1.2 TLSv1.3;
Mozilla推荐的现代兼容性套件
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256...';
ssl_prefer_server_ciphers on;
这确保了只使用最安全的加密算法组合。
CDN与Nginx配合注意事项
当使用Cloudflare等CDN时:
1. CDN上安装主SSL证书记录(Full模式)
2.Nginx只需处理CDN到源站的内部加密(通常用自签名或免费证书记录即可)
3.HTTPS头需要特殊处理避免冲突
典型错误案例:某站点同时在CDN和源站部署了HSTS头部导致无限重定向循环。
SSL性能监控与调优技巧
查看当前SSL握手统计信息:
```bash
nvidia-smi
GPU加速监控(如有)
openssl speed rsa2048
CPU加密性能测试
Nginx状态监控模块示例
stub_status on;
access_log /var/log/nginx/ssl_perf.log custom_format;
常见性能瓶颈排查点:
- RSA密钥长度超过2048位导致CPU负载过高
- OCSP响应超时影响首次加载速度
- Session缓存未启用导致重复握手
通过以上全面的Nginx多域名单个SSL证书记录部署方案,您可以实现安全性与管理效率的双重提升。记住定期检查证书记录到期时间并设置自动续期任务!
TAG:nginx多域名ssl证书配置,nginx配置多个ssl证书,nginx 多域名ssl认证,nginx多域名多端口,nginx 多域名配置,nginx severname配置多个地址