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 $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;


    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_name db.*; или почему второй показывает предполагаемое поведение

записка

Конечно, в моем /etc/hosts я настроил

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

Ответ №1:

Nginx выбирает server блок по порту (с IP, если указан) и Host заголовку. Если совпадения нет, он использует блок, в котором default_server задано значение. В вашем случае совпадения нет Host , и ни того, ни другого нет default_server , поэтому я думаю, что он просто выбрал первый. Либо добавьте server_name в блок с webapp восходящим потоком, либо сделайте его блоком по умолчанию:

 listen 80 default_server;
 

Комментарии:

1. вы имеете в виду, что «xx.xx.xx.xx` не соответствует ни одному. в то время как db.xx.xx.xx.xx` сопоставляется. и в конечном итоге в первом случае это происходит первым.

2. @Santhosh Да, именно это я и имею в виду. Об этом есть статья , хотя она и не объясняет ваш случай.