У меня есть 2 API и интерфейс, которые работают в docker контейнерах. Все они могут быть созданы с помощью docker -compose, и у меня есть Nginx обратный прокси-сервер, который должен направить к ним, используя их имена хостов, т.е. api-1.my-project.localhost
. На самом деле у меня этот процесс работал, но время от времени, как сегодня утром, я получаю «Несуществующий домен» или «Мы не можем найти этот сайт» при посещении его с использованием этих имен хостов.
Я не верю, что docker-compose.yml
так важен, но я включил его здесь:
version: "3.2"
services:
api-1:
# Runs on port 5000
image: my-companies-docker-registry.api-1
api-2:
# Runs on port 5000
image: my-companies-docker-registry.api-2
main-front-end:
# Runs on port 3000
image: my-companies-docker-registry.main-front-end
my-project:
image: nginx
depends_on:
- api-1
- api-2
- main-front-end
ports:
- 80:80
volumes:
- type: bind
read_only: true
source: ./nginx
target: /etc/nginx
Мой nginx конфиг выглядит так:
events {}
http {
# Api 1
upstream api-1{
server api-1:5000;
}
server {
listen 80;
server_name api-1.my-project.localhost;
location / {
proxy_pass http://api-1;
}
}
# Api 2
upstream api-2 {
server api-2:5000;
}
server {
listen 80;
server_name api-2.my-project.localhost;
location / {
proxy_pass http://api-2;
}
}
# Main Front end
upstream main-front-end {
server main-front-end:3000;
}
server {
listen 80 default_server deferred;
server_name my-project.localhost www.my-project.localhost;
location / {
proxy_pass http://main-front-end;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
}
Цель это означает, что я могу получить доступ к сайту с помощью http://my-project.localhost
, а API-интерфейсы с использованием api-1.my-project.localhost
и api-2.my-project.localhost
. Поскольку у меня есть listen 80 default_server deferred
, посетив http://localhost
, я могу нажать nginx, что позволяет мне увидеть мой интерфейсный сайт. Так что docker-compose
правильно связал порты.
В прошлом я мог получить доступ к сайтам с использованием суффикса my-project.localhost
, но теперь это уже не так. Этот сайт предлагает добавить запись хоста для каждого сайта, я не помню, чтобы делал это раньше, так как есть много сайтов, это заняло бы некоторое время, но возможно, что я сделал, и теперь они имеют были удалены Я также знаю, что Nginx не является docker, поэтому я понятия не имею, как эти имена хостов были бы извлечены и добавлены в процесс разрешения хостов моих машин.
Как это могло работать раньше, а не сейчас ? И как я могу заставить мою установку работать без внесения ручных изменений файла хоста?