Nginx配置多个域名HTTPS

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

配置前需要准备哪些材料

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

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

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

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

在 /etc/nginx/conf.d/ 目录下,可以为每个域名单独创建一个配置文件,例如 aaa.conf 和 bbb.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 ok 和 test is successful 即说明语法无误。

  1. 重载配置:
   nginx -s reload
  1. 浏览器访问:分别打开 https://aaa.com 和 https://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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意