nginx:与正确的方式不匹配

nginx:与正确的方式不匹配,nginx,Nginx,我有以下nginx配置 给出错误的结果 upstream webapp { server webapp:8000; } upstream db { server phppgadmin:80; } server { listen 80; server_name db.*; location / { proxy_pass http://db; proxy_set_header X-Forwarded-For $pro

我有以下nginx配置

给出错误的结果

upstream webapp {
    server webapp:8000;
}


upstream db {
    server phppgadmin:80;
}


server {
    listen 80;

    server_name db.*;

    location / {
        proxy_pass http://db;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

}

server {
    listen 80;


    location / {
        proxy_pass http://webapp;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    location /static {
        autoindex on;
        alias /staticfiles/;
    }

   location /media {
       autoindex on;
       alias /mediafiles/;
   }

}
我的电脑ip地址是xx.xx.xx.xx

我观察到的是

db.xx.xx.xx.xx
-显示上游的
db

并且
xx.xx.xx.xx
-显示上游的
db

给出正确的结果

upstream webapp {
    server webapp:8000;
}


upstream db {
    server phppgadmin:80;
}


server {
    listen 80;

    server_name db.*;

    location / {
        proxy_pass http://db;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

}

server {
    listen 80;


    location / {
        proxy_pass http://webapp;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    location /static {
        autoindex on;
        alias /staticfiles/;
    }

   location /media {
       autoindex on;
       alias /mediafiles/;
   }

}
当我改变顺序时,它会正确显示

upstream webapp {
    server webapp:8000;
}


upstream db {
    server phppgadmin:80;
}

server {
    listen 80;


    location / {
        proxy_pass http://webapp;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    location /static {
        autoindex on;
        alias /staticfiles/;
    }

   location /media {
       autoindex on;
       alias /mediafiles/;
   }

}



server {
    listen 80;

    server_name db.*;

    location / {
        proxy_pass http://db;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

}
现在

db.xx.xx.xx.xx
-显示上游的
db

xx.xx.xx.xx
-显示
webapp
上游

问题

在第一种情况下,我无法理解为什么
xx.xx.xx.xx
server\u name db.*匹配或第二个显示预期行为的原因

注意

当然,在我的
/etc/hosts
中,我有设置

xx.xx.xx.xx app.xx.xx.xx.xx
xx.xx.xx.xx db.xx.xx.xx.xx

Nginx选择
服务器
按端口分组(如果给定IP)和
主机
头。如果没有匹配项,它将使用设置了
default\u server
的块。在您的情况下,
Host
没有匹配项,也没有
default\u服务器
,因此我认为它只是先选择的。使用
webapp
上游将
server\u name
添加到块中,或者将其设为默认块:

listen 80 default_server;

你的意思是“xx.xx.xx.xx`没有任何匹配。而db.xx.xx.xx.xx.xx`得到匹配。最终在第一种情况下,它是第一张图片。@Santhosh是的,这就是我的意思。虽然它不能解释你的情况。