#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 Да, именно это я и имею в виду. Об этом есть статья , хотя она и не объясняет ваш случай.