Nginx 二级域名混乱

刚开始有以上网站配置如下,这时候各网站功能正常

server{
    listen 80;
    server_name  www.xx.com xx.com;# http跳https,自动加 www
    return 301 https://www.xx.com$request_uri;
}
server {
    listen 443 ssl;
    server_name www.xx.com;
}
server {
    listen 443 ssl;
    server_name api.xx.com;
}
server {
    listen 443 ssl;
    server_name admin.xx.com;
}

当某天我加了以下网站,问题就来了

server {
    listen 443 ssl;
    server_name bt.xx.com;
}

当访问 bt.xx.com 结果访问的是 admin.xx.com
关掉admin.xx.com ,访问 bt.xx.com 结果访问的是 www.xx.com
关掉其他所有 ,访问 bt.xx.com 结果正常
这个问题以前也遇到过,但莫名其妙的好了,没有细究,今天又碰到,google了一个种还没解决,求解


又发现一个问题
关闭www.xx.com,访问 www.xx.com 结果是 admin.xx.com
关闭www.xx.comadmin.xx.com,访问 www.xx.com 结果是api.xx.com
似乎是关闭www.xx.com,再访问它的时候,他会自动转向子域名中某一个

阅读 3.6k
2 个回答

nginx配置文件后面没加分号导致的

;

我猜的。。之前一个朋友也是碰到这个问题了。

  1. 当访问一个没有配置的主机名的时候,nginx会按以下顺序查找:

    1. 这个socket里的default_server
    2. 这个socket里的server_name _
    3. 这个socket里按配置文件排序的第一个server
  2. 所以,关闭某些域名,再访问这个域名,就会按照第1点去匹配
  3. 按理不会出现bt.xx.com这个问题,原因可能是配置没有reload,访问错端口之类的。
  4. 碰到这种问题,直接看access_log或者debug_log就行。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题