Nginx配置多域名server块时domain.com错误匹配sub.domain.com块问题
Nginx 域名匹配异常原因分析
以下是该问题的几类常见触发原因:
- 配置未生效:修改Nginx配置后没有执行
nginx -s reload(或对应系统的服务重载命令),domain.com对应的server块并未实际加载,所有443端口的请求只会匹配已加载的第一个server块。 - 第二个server块缺少完整SSL配置:你给出的配置示例中省略了SSL证书相关参数,若仅在
sub.domain.com的server块中配置了ssl_certificate和ssl_certificate_key,第二个server块未配置对应证书,Nginx无法识别该块可处理SSL请求,最终所有443端口的SSL请求都会落到同端口下的第一个server块。 - 客户端不支持SNI扩展:部分老旧客户端(如Windows XP系统的IE浏览器、低版本爬虫工具)不支持SNI(服务器名称指示)扩展,SSL握手阶段不会携带请求的目标域名,Nginx无法根据域名匹配对应server块,会默认使用同监听端口下的第一个server块处理请求。
- 存在隐性默认服务冲突:如果Nginx全局配置或其他引入的配置文件中,已有其他监听443端口的server块被标记为
default_server,或者第一个server块被隐式设为默认服务,当请求的Host头匹配失败时就会走默认服务,可执行nginx -T查看全量生效配置确认是否存在冲突。 - 测试请求参数异常:若测试时没有正确指定Host头,或者第一个server块使用的是包含
domain.com的泛域名证书,也可能出现匹配异常,可通过命令curl -v --resolve 'domain.com:443:你的服务器IP' https://domain.com测试,查看返回的服务信息确认实际匹配的server块。
内容的提问来源于stack exchange,提问作者Finn
相关产品推荐
相关产品推荐

