You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx配置异常:主域名与通配符域名SSL证书无法同时生效

解决Nginx中主域名与通配符域名SSL配置冲突的问题

问题根源

你的核心问题在于:

  1. 通配符SSL证书(*.example.com)默认不包含裸域名example.com,若证书未同时覆盖这两个域名,访问https://example.com会触发SSL错误。
  2. 多个server块监听同一443端口且域名配置逻辑重叠,导致Nginx无法正确匹配,抛出conflicting server name警告并忽略其中一个配置。

具体解决步骤

1. 确保SSL证书同时覆盖两个域名

先检查证书是否包含example.com和*.example.com两个SAN条目。若没有,用Certbot重新申请(以Let's Encrypt为例):

certbot certonly --nginx -d example.com -d *.example.com

这条命令会生成同时覆盖裸域名和通配符的证书。

2. 合并主域名与通配符到同一个server块(最优方案)

不要拆分到多个server块,直接在一个块中指定两个域名,避免Nginx的匹配冲突。示例配置:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    # 同时指定裸域名和通配符域名
    server_name example.com *.example.com;

    # 替换为你的证书实际路径
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 基础SSL安全配置(可选)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 站点核心配置(根据你的实际需求调整)
    root /var/www/example-site;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

3. 可选:配置裸域名跳转至www子域名

如果你希望example.com自动跳转到www.example.com,直接在上面的server块中添加以下规则即可,无需额外拆分server块:

if ($host = example.com) {
    return 301 https://www.example.com$request_uri;
}

4. 验证配置并重启Nginx

执行配置检查,确保无警告:

nginx -t

如果输出test is successful,重启Nginx生效:

systemctl restart nginx

为什么之前的方法失效?

  • 拆分server块时,Nginx会根据server_name的匹配优先级选择第一个符合条件的块,另一个块的域名配置会被判定为冲突并忽略。
  • 若证书仅包含通配符,访问裸域名时Nginx返回的证书不匹配,浏览器直接抛出SSL错误;偶尔跳转是因为浏览器缓存了之前的重定向规则,并非Nginx的稳定配置。

内容的提问来源于stack exchange,提问作者Farrokh Rostami Kia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:12:10