nginx通过sni机制实现在同一ip和443端口下为不同域名加载各自https证书,需为每个域名配置独立server块,精确设置server_name与专属ssl_certificate路径,并用nginx -t验证后reload生效。

可以共存,靠的是 Nginx 的 SNI(Server Name Indication)机制,而不是靠端口隔离。现代 Nginx(1.9.1+ 默认启用,依赖 OpenSSL 1.0.2+)天然支持同一 IP、同一 443 端口下为不同域名加载各自证书。
每个域名配独立 server 块
这是最直接可靠的方式:为每个需要 HTTPS 的域名写一个 server 块,监听 443 端口,指定各自的证书路径和域名。
- 每个块必须有唯一且明确的
server_name,比如example.com、api.example.org -
ssl_certificate和ssl_certificate_key必须指向该域名对应的有效证书文件和私钥 - 建议统一启用 TLSv1.2 及以上协议,并设置合理 cipher 套件,例如:
ssl_protocols TLSv1.2 TLSv1.3;
证书路径与权限要正确
Nginx 主进程以 root 启动,但工作进程通常以非 root 用户(如 www-data 或 nginx)运行,因此证书文件需确保该用户可读。
- 私钥文件权限应设为
600(仅属主可读写),避免安全警告 - 证书文件权限建议
644,路径尽量用绝对路径,避免相对路径引发加载失败 - 常见位置如
/etc/nginx/ssl/example.com.crt和/etc/nginx/ssl/example.com.key
验证配置并热重载
改完配置后不能直接重启,先验证再生效,避免服务中断。
- 执行
sudo nginx -t检查语法和证书路径是否可访问 - 若输出
successful,再执行sudo nginx -s reload平滑加载新配置 - 可用
curl -I https://domain.com或浏览器访问,确认返回200且地址栏显示锁图标
注意通配符与多域名证书的适用场景
不是所有情况都需要多个证书。合理选型能简化维护:
- 同一主域下的多个子域(如
www.site.com、blog.site.com)适合用一张泛域名证书(*.site.com) - 完全无关的域名(如
site-a.com和site-b.net)必须使用各自独立证书 - Let’s Encrypt 支持单证书绑定多个域名(SAN),适用于少量关联域名,但续期需同步操作











