文档中心
Nginx澶氬煙鍚嶆坊鍔燬SL璇佷功鏁欑▼鎵嬫妸鎵嬫暀浣犻厤缃瓾TTPS瀹夊叏璁块棶
时间 : 2025-09-27 16:26:41浏览量 : 2

在今天的互联网环境中,SSL证书已经成为网站安全的标配。无论是保护用户数据还是提升搜索引擎排名,HTTPS都至关重要。对于使用Nginx作为Web服务器的管理员来说,如何为多个域名配置SSL证书是一个常见需求。本文将以通俗易懂的方式,结合具体实例,带你一步步完成Nginx多域名SSL证书的配置。
一、为什么需要为多域名配置SSL证书?
假设你运营着两个网站:`example.com`和`shop.example.com`。如果没有SSL证书:
1. 用户访问时浏览器会显示"不安全"警告(比如Chrome的小红锁图标)
2. 所有传输数据(包括密码、信用卡号)都是明文传输
3. 搜索引擎会降低你的排名
通过配置SSL证书:
- 每个域名都会显示绿色安全锁标志
- 数据传输加密(比如用户登录时的密码会被加密)
- 符合PCI DSS等安全标准要求
二、准备工作:获取SSL证书
常见的获取方式有三种:
1. 免费证书:Let's Encrypt(适合个人和小企业)
```bash
示例:使用Certbot获取证书
sudo certbot certonly --nginx -d example.com -d shop.example.com
```
2. 商业证书:DigiCert、GeoTrust等(适合企业级应用)
3. 自签名证书(仅用于测试环境)
以Let's Encrypt为例,它会生成以下文件:
```
/etc/letsencrypt/live/example.com/
├── fullchain.pem
证书链
├── privkey.pem
私钥
└── ...
其他文件
三、Nginx多域名配置实战
场景1:同一IP不同域名(SNI技术)
现代浏览器都支持SNI(Server Name Indication),允许一个IP托管多个HTTPS站点。
```nginx
example.com的配置
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
root /var/www/html;
index index.html;
}
}
shop.example.com的配置
server_name shop.example.com;
ssl_certificate /etc/letsencrypt/live/shop.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/shop.example.com/privkey.pem;
root /var/www/shop;
index index.php;
场景2:通配符证书(*.example.com)
如果你有多个子域名,可以使用通配符证书:
server_name *.example.com;
动态匹配子域名
set $subdomain "";
if ($host ~* ^(.*)\.example\.com$) {
set $subdomain $1;
root /var/www/$subdomain;
四、关键安全优化设置
除了基本配置,建议添加以下安全增强:
ssl_protocols TLSv1.2 TLSv1.3;
禁用老旧协议
ssl_prefer_server_ciphers on;
优先使用服务端加密套件
ssl_session_timeout 1d;
SSL会话缓存时间
ssl_session_cache shared:SSL:50m;
SSL会话缓存大小
HSTS头(强制HTTPS访问)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
OCSP装订提升性能
ssl_stapling on;
ssl_stapling_verify on;
五、常见问题排查
1. 混合内容警告
-现象:页面有绿锁但控制台提示"Mixed Content"
-解决:确保所有资源(图片/js/css)都使用https://加载
2. 证书不匹配错误
```bash
openssl x509 -in fullchain.pem -noout -text | grep DNS
??检查证书包含的域名是否与当前访问一致
3. 性能优化
nginx -t
测试配置语法
systemctl reload nginx
平滑重载
六、高级技巧扩展
对于大型站点可以考虑:
- 多级证书链:将根CA、中间CA分开部署提升兼容性
- 硬件加速:通过OpenSSL引擎调用HSM设备处理密钥
- 自动化续期:使用Certbot的cron任务自动续期Let's Encrypt证书
```bash
0 */12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
通过以上步骤,你的Nginx服务器就能安全高效地支持多域名HTTPS访问了。记得定期检查SSL Labs的评分(https://www.ssllabs.com/ssltest),确保配置始终符合最佳实践!
TAG:nginx多域名添加ssl证书,nginx 绑定多个域名,nginx 多域名ssl认证,nginx配置多个域名 servername

