Nginx报错“invalid server name or wildcard”的原因和解决方案

 更新时间:2025年10月21日 09:24:23   作者:一勺菠萝丶  
很多人第一次给网站配置HTTPS时,会遇到一个看似奇怪的报错:
invalid server name or wildcard,
明明就是想用通配符匹配多个子域,结果保存不成功,本文就来一步步讲清楚,帮你从根本上解决这个问题,需要的朋友可以参考下

很多人第一次给网站配置 HTTPS 时,会遇到一个看似奇怪的报错:

nginx: [emerg] invalid server name or wildcard "abc-*.example.cn" on 0.0.0.0:80

明明就是想用通配符匹配多个子域,结果保存不成功。

这其实不是语法写错,而是 Nginx 对通配符的使用范围有限制

本文就来一步步讲清楚,帮你从根本上解决这个问题。

一、问题场景复现

假设你有两个域名都在同一台服务器上:

https://api.example.cn
https://web.example.cn

你在 Nginx 配置时,想着简单点,写成:

server_name abc-*.example.cn;

保存时却直接报错:

nginx: [emerg] invalid server name or wildcard "abc-*.example.cn"
nginx: configuration file test failed

这到底是哪里不对?

二、错误原因:Nginx 不支持“中间通配”

Nginx 的通配符(*)规则是有限制的:

写法是否支持示例说明
*.example.cn✅ 支持匹配 api.example.cnweb.example.cn✅ 通配符必须在最左边
example.*✅ 支持匹配 example.cnexample.com✅ 通配符可以在最右边
abc-*.example.cn❌ 不支持想匹配 abc-web.example.cnabc-api.example.cn❌ 通配符不能出现在中间

也就是说,你写的 abc-*.example.cn非法的写法

Nginx 不知道如何去匹配这类模式,因此直接拒绝加载。

三、正确写法与最佳实践

根据你的实际需求,有几种安全可行的方式:

方案一:直接列出多个域名(最推荐)

如果只是几个固定域名,比如:

api.example.cn
web.example.cn

那就直接列出来:

server_name api.example.cn web.example.cn;

这样写最清晰、兼容性最好,也不会报错。

方案二:使用标准通配符(同一层级)

如果你确实想让一个配置同时匹配多个子域(例如网站很多个):

server_name *.example.cn;

这表示它可以匹配:

api.example.cnweb.example.cncdn.example.cn

但注意:

  • 只匹配一级子域xxx.example.cn),
  • 不会匹配多层结构(如 a.api.example.cn)。

方案三:多个项目共用证书但分开配置

比如你同一台服务器上部署了:

api.example.cnweb.example.cn

而另一台服务器有:

shop.example.cn

这种情况下,你可以让每台服务器都使用同一张通配符证书(*.example.cn),
但在各自的 Nginx 里写独立配置:

在服务器 A

server_name api.example.cn web.example.cn;

在服务器 B

server_name shop.example.cn;

这样能共用证书,又不会让不同机器互相干扰。

四、完整可用示例(两个域名在同一台服务器)

下面这份配置可以直接用在宝塔或手动编辑中:

# HTTP 自动跳转 HTTPS
server {
    listen 80;
    server_name api.example.cn web.example.cn;
    return 301 https://$host$request_uri;
}

# HTTPS 配置
server {
    listen 443 ssl http2;
    server_name api.example.cn web.example.cn;

    ssl_certificate     /www/server/panel/vhost/cert/example.cn/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/example.cn/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    add_header Strict-Transport-Security "max-age=31536000";
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;

    # 根据访问的域名切换网站目录
    if ($host = api.example.cn) {
        root /www/wwwroot/api.example.cn/dist;
    }

    if ($host = web.example.cn) {
        root /www/wwwroot/web.example.cn/dist;
    }

    index index.html index.htm;
    try_files $uri $uri/ /index.html;

    access_log /www/wwwlogs/https-access.log;
    error_log  /www/wwwlogs/https-error.log;
}

五、证书建议

为了同时支持多个子域名:

  • 建议使用 通配符证书*.example.cn
  • 在签发时选择 DNS 验证 模式(HTTP 验证无法验证通配符)
  • 同一张证书可以放在多台服务器上使用,只要路径一致即可。

六、总结

问题原因正确做法
报错 “invalid server name or wildcard”通配符出现在中间(abc-*.example.cn改为具体域名或标准通配(*.example.cn
想匹配多个域名可以空格分开多个域名server_name api.example.cn web.example.cn;
想共用 HTTPS 证书使用 *.example.cn 通配符证书多个子域共用
不同服务器不同站点各自独立配置不互相影响

结语

如果你是第一次配置 HTTPS,建议遵循这两条经验法则:

写具体域名最安全通配符只能在最左边

只要掌握这两条,99% 的 Nginx 报错都能一次解决。

以上就是Nginx报错“invalid server name or wildcard”的原因和解决方案的详细内容,更多关于Nginx报错invalid server name or wildcard的资料请关注脚本之家其它相关文章!

相关文章

  • 前端将项目部署到服务器(Nginx)的完整步骤

    前端将项目部署到服务器(Nginx)的完整步骤

    最近写了一个项目,需要进行手机上测试,下面就需要前端自己将项目进行部署,这篇文章主要给大家介绍了关于前端将项目部署到服务器(Nginx)的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 使用nginx.exe时闪退的原因和解决方法

    使用nginx.exe时闪退的原因和解决方法

    最近使用老师给的nginx.exe时,点击nginx.exe突然屏幕就闪一下,经过一番排查,发现是端口被占用所导致的,所以本文就给大家讲讲端口被占用时的解决方法详细步骤,需要的朋友可以参考下
    2023-07-07
  • 详解Nginx的超时keeplive_timeout配置步骤

    详解Nginx的超时keeplive_timeout配置步骤

    Nginx 处理的每个请求均有相应的超时设置,本文主要介绍了Nginx的超时keeplive_timeout配置步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Nginx的使用经验小结

    Nginx的使用经验小结

    相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额。今天我们就简单介绍下本人在使用nginx的过程中的一些小小的经验
    2017-10-10
  • Nginx的预定义变量方式

    Nginx的预定义变量方式

    这篇文章主要介绍了Nginx的预定义变量方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • 解决httpd占用80端口导致Nginx启动失败报错的解决办法

    解决httpd占用80端口导致Nginx启动失败报错的解决办法

    今天在建自己小网站时启动Nginx时,发现其报下列错误,意思是因为80端口被占用导致Nginx启动失败,所以本文小编给大家介绍介绍如何解决解决httpd占用80端口导致Nginx启动不成功报nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    2023-11-11
  • 当Nginx所在服务器的磁盘空间满时的影响以及如何避免这一问题

    当Nginx所在服务器的磁盘空间满时的影响以及如何避免这一问题

    Nginx所在服务器的磁盘空间满了,会导致日志无法写入、缓存失效、反向代理请求异常等问题,严重时可能导致服务不可用,这篇文章主要介绍了当Nginx所在服务器的磁盘空间满时的影响以及如何避免这一问题,需要的朋友可以参考下
    2024-12-12
  • Nginx 部署及配置详细步骤(附详细代码)

    Nginx 部署及配置详细步骤(附详细代码)

    Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,这篇文章主要介绍了Nginx部署及配置的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • nginx使用sticky基于cookie的会话保持方式

    nginx使用sticky基于cookie的会话保持方式

    这篇文章主要介绍了nginx使用sticky基于cookie的会话保持方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解nginx高并发场景下的优化

    详解nginx高并发场景下的优化

    这篇文章主要介绍了详解nginx高并发场景下的优化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论