1. 为什么需要多域名多证书配置?
在Web服务部署实践中,我经常遇到这样的场景:同一台服务器需要承载多个独立域名的服务,每个域名都有独立的SSL证书需求。比如公司官网、客户后台系统、移动端API接口可能分别使用不同的域名,而现代Web服务又普遍要求HTTPS加密传输。这时候,单靠Nginx默认的单一证书配置就显得捉襟见肘了。
传统做法是为每个域名单独配置一台服务器,这显然会造成资源浪费。更合理的方案是通过Nginx的SNI(Server Name Indication)扩展,在单个服务器上实现多域名多证书的智能分发。实测在2核4G配置的服务器上,这种方案可以轻松承载20+个域名的HTTPS服务,TLS握手性能损耗不到5%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境准备与关键配置解析
2.1 证书文件的标准存放结构
我习惯将证书文件按以下结构组织,便于维护:
code复制/etc/nginx/certs/
├── domain1.com/
│ ├── fullchain.pem
│ ├── privkey.pem
│ └── dhparam.pem
├── domain2.net/
│ ├── fullchain.pem
│ └── privkey.pem
└── dhparams.pem # 公共DH参数文件
重要提示:私钥文件(privkey.pem)权限应设置为600,避免密钥泄露风险
2.2 Nginx核心配置片段解析
nginx复制server {
listen 443 ssl http2;
server_name api.domain1.com;
ssl_certificate /etc/nginx/certs/domain1.com/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/domain1.com/privkey.pem;
# 使用更安全的加密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ss
