Nginx配置多个域名HTTPS

当你需要在同一台服务器、同一个 IP 下为多个域名配置 HTTPS 时,Nginx 的 SNI(Server Name Indication)机制可以在 TLS 握手阶段根据客户端访问的域名自动选择对应证书。
配置思路并不复杂:每个域名使用一个独立的 server 块,各自绑定自己的证书文件。
本文会给出一个可直接套用的多证书 SNI 配置模板,并说明准备条件、常见坑位和验证方法。

配置前需要准备哪些材料

动手之前,请先确认以下内容都已完成:

  • 域名与解析:至少两个域名,并且已经解析到当前服务器 IP。
  • SSL 证书:每个域名对应一张证书和私钥。可以是单域名证书,也可以是通配符证书。
  • Nginx 环境:Nginx 必须支持 SSL 模块。使用宝塔面板或官方源安装的 Nginx 通常都已开启,不需要额外编译。
  • 端口放行:服务器安全组和本机防火墙要放行 443 端口,否则外部无法访问。

如果这些条件不满足,后面的配置即使正确也无法正常生效。

一份可以直接套用的多证书配置模板

/etc/nginx/conf.d/ 目录下,可以为每个域名单独创建一个配置文件,例如 aaa.confbbb.conf,也可以全部写在一个文件里。
推荐分开管理,后期维护更清晰。

以第一个域名为例,配置内容如下:

# /etc/nginx/conf.d/aaa.conf
server {
    listen 443 ssl;
    server_name aaa.com www.aaa.com;

    ssl_certificate     /etc/nginx/certs/aaa.com.pem;
    ssl_certificate_key /etc/nginx/certs/aaa.com.key;

    root /var/www/aaa;
    index index.html;
}

第二个域名的配置文件基本一样,只需要替换 server_name、证书路径和网站目录:

# /etc/nginx/conf.d/bbb.conf
server {
    listen 443 ssl;
    server_name bbb.com www.bbb.com;

    ssl_certificate     /etc/nginx/certs/bbb.com.pem;
    ssl_certificate_key /etc/nginx/certs/bbb.com.key;

    root /var/www/bbb;
    index index.html;
}

这里的关键点在于:每个 server 块里的 server_name 必须和证书域名对应一致,Nginx 正是根据这个字段在 SNI 握手时选择正确的证书。

如何让 HTTP 自动跳转到 HTTPS

多数站点都希望用户直接输入域名时,能自动从 HTTP 跳到 HTTPS。
实现方式也很简单,为每个域名再加一个 80 端口跳转配置:

server {
    listen 80;
    server_name aaa.com www.aaa.com;
    return 301 https://$host$request_uri;
}

如果有多个域名,就需要写多个这样的 80 端口 server 块,每个对应一个域名。
这里不建议使用 if ($scheme = http) { return 301; } 写在同一个 server 里,单独配置跳转规则更直观,也更容易排查问题。

常见报错与避坑说明

实际配置过程中,下面几个问题最容易遇到:

1. 证书与域名不匹配

如果浏览器提示“证书不安全”,第一反应应该是检查 server_name 和证书中的域名是否完全一致。
很多证书只绑定某个域名,例如证书只包含 aaa.com,那 www.aaa.com 就无法正常使用,需要重新签发包含 www 的证书,或者使用通配符证书。

2. 证书链不完整

部分证书厂商会要求把中间证书和域名证书放在同一个 .pem 文件里。
如果只填了域名证书,浏览器或 curl 会提示证书链不完整。
解决办法是把中间证书内容追加到 .pem 文件末尾,或者通过 ssl_trusted_certificate 单独指定中间证书路径。

3. 默认 server 干扰

当用户直接用 IP 访问服务器时,Nginx 会匹配到默认 server。
如果默认 server 配置了证书,可能会返回错误证书。
稳妥做法是单独设置一个默认 server 块,指向一张能覆盖访问场景的证书,或者直接返回 444 不响应。

4. 配置了没生效

修改配置文件后必须重启或重载 Nginx 才会生效。
先执行 nginx -t 检查语法,再执行 nginx -s reload
如果语法有误,Nginx 会拒绝重载,并提示具体错误行。

如何验证配置是否成功

完成配置后,按以下顺序验证:

  1. 检查语法
   nginx -t

看到 syntax is oktest is successful 即说明语法无误。

  1. 重载配置
   nginx -s reload
  1. 浏览器访问:分别打开 https://aaa.comhttps://bbb.com,点击地址栏锁形图标,查看证书详情是否对应该域名。
  2. 命令行验证证书
   openssl s_client -connect 127.0.0.1:443 -servername aaa.com \
     -brief 2>/dev/null | grep subject

如果返回的 subject 中包含 aaa.com,说明 SNI 证书选择正确。

  1. 检查跳转:访问 http://aaa.com,确认能 301 跳转到 https://aaa.com

如果你正在配置多个域名 HTTPS,建议先把上面的模板复制一份,按域名逐项替换后完成验证。
遇到证书链或跳转问题时,优先检查证书路径和 server_name 的对应关系。
Nginx 的 SNI 配置非常成熟,只要对应关系不错,基本能一次成功。

分享到:
上一篇
MySQL数据库定时全量备份+binlog增量备份恢复演练
下一篇
KVM迁移qcow2镜像到其他存储池
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意