Press "Enter" to skip to content

Nginx默认server事故小记

事故背景

A项目组曾用旧域名 old-domain.com 提供服务,后转到新域名new-domain.com

旧域名客户已经保存,所以这时 old-domain.co 302到新域名。

B项目组需要调A项目组API,有个地方还在使用 old-domain.com 。但旧域名已经不再有HTTPS。

在一次nginx调整,增加一个域名配置a-domain.com时B项目组调用服务挂掉了。。

这是为啥呢?

疑点

  1. old-domain.com虽然还解析到原来服务器,但已经不提供HTTPS服务。B项目组是如何可以通过HTTPS调通服务的呢?
  2. 现在增加a-domain.com为什么对旧域名造成影响?

真相

B项目组在调用旧域名时无视了SSL证书验证,所以即使没有也一样通过了。

那为什么没有HTTPS也能通过呢?

这就要提到nginx默认域名配置,对于未配置域名nginx默认解析到按字母表顺序第一个解析。

这也就解释了,为什么老域名还可以使用,因为nginx只有一个新域名的配置。误打误撞用上了。

新增的a-domain.conf优先级大于new-domain.com。所以就使用a-domin.conf配置了。

当然你也可以设置默认server,就能避免类似巧合发生了。

server {
    listen       80 default_server;
    server_name  _;
    return 403;
}