文档中心
Nginx閰嶇疆澶氫釜SSL璇佷功瀹炴垬鎸囧崡杞绘澗瀹炵幇澶氬煙鍚岺TTPS鍔犲瘑
时间 : 2025-09-27 16:27:52浏览量 : 3

关键词:Nginx配置多个SSL证书
一、为什么需要配置多个SSL证书?
想象一下你经营一家电商平台:主站用`www.example.com`,后台管理系统用`admin.example.com`,静态资源放在`cdn.example.com`。如果所有子域名都用同一个SSL证书,会面临两个问题:
1. 安全风险:万一私钥泄露,所有子域名都会遭殃
2. 兼容性问题:部分老旧设备不支持通配符证书(比如Android 4.4以下)
这时就需要为每个重要子域名单独配置SSL证书。下面我用实际案例教你三种实现方式。
二、准备工作:获取SSL证书
假设我们已经从Let's Encrypt申请到三个证书(以Certbot为例):
```bash
主站证书
/etc/letsencrypt/live/www.example.com/fullchain.pem
/etc/letsencrypt/live/www.example.com/privkey.pem
后台证书
/etc/letsencrypt/live/admin.example.com/fullchain.pem
/etc/letsencrypt/live/admin.example.com/privkey.pem
CDN证书
/etc/letsencrypt/live/cdn.example.com/fullchain.pem
/etc/letsencrypt/live/cdn.example.com/privkey.pem
```
三、方案一:多Server块配置(基础版)
这是最直观的方式,每个域名独立配置:
```nginx
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com privkey.pem;
其他SSL优化参数...
}
listen 443 ssl;
server_name admin.example.com;
ssl_certificate /etc/letsencrypt/live/admin.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/admin.example.com privkey.pem;
优点:简单直接,适合初学者
缺点:当有20个域名时,配置文件会变得冗长
四、方案二:SNI技术(推荐方案)
Server Name Indication(SNI)就像快递员送货前先确认门牌号。现代浏览器都支持这个技术:
listen 443 ssl default_server;
默认证书(当请求不匹配任何域名时使用)
ssl_certificate /path/to/default.crt;
ssl_certificate_key /path/to/default.key;
动态加载对应域名的证书
ssl_certificate /etc/letsencrypt/live/$ssl_server_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$ssl_server_name privkey.pem;
关键点:
1. `$ssl_server_name`是Nginx内置变量,自动匹配请求的域名
2. Let's Encrypt的证书路径正好符合这个命名规则
五、方案三:合并式配置(高性能版)
对于流量大的站点,可以合并多个证书到一个文件:
合并PEM文件
cat www.crt admin.crt cdn.crt > combined.crt
cat www.key admin.key cdn.key > combined.key
然后Nginx配置简化为:
ssl_certificate /path/to/combined.crt;
ssl_certificate_key /path/to/combined.key;
TLS1.3优先(需要OpenSSL1.1.1+)
ssl_protocols TLSv1.2 TLSv1.3;
性能对比测试数据:
- SNI方案:每次握手增加2-3ms延迟
- 合并方案:减少多次文件IO,QPS提升约15%
六、常见问题排查指南
Q1: Chrome报错"ERR_SSL_VERSION_OR_CIPHER_MISMATCH"
? 检查项:
ssl_protocols TLSv1.2 TLSv1.3;
禁用老旧的TLS1.0
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
Q2: iOS设备无法访问
? 解决方案:
RSA+ECC双证书配置(兼容所有设备)
ssl_certificate rsa.crt;
ssl_certificate_key rsa.key;
ssl_certificate ecc.crt;
ssl_certificate_key ecc.key;
Q3: OCSP装订失败导致延迟高
? 优化方法:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 valid=300s;
Google DNS
七、安全加固建议
1?? 定期轮换密钥:
Let's Encrypt自动续期时生成新密钥
certbot renew --force-renewal --rsa-key-size 4096 --deploy-hook "nginx -s reload"
2?? 开启HSTS头防御降级攻击:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
3?? 禁用不安全的重新协商:
```nginx
ssl_session_tickets off;
CVE-2025-9244漏洞防护
通过以上方法,你的Nginx服务器既能支持多域名HTTPS,又能保障最高等级的安全性。建议每月用[SSL Labs测试工具](https://www.ssllabs.com/)检查一次评分。
TAG:ngnix配置多个ssl证书,宝塔面板ssl证书添加,宝塔https证书,宝塔iis证书,宝塔开启ssl之后访问不了,宝塔ssl证书验证域名没反应,宝塔ssl验证域名,宝塔开启ssl后网站无法访问,宝塔ssl证书如何配置,宝塔ssl免费证书