Я играю с NGINX и docker. Я пытаюсь запустить nginx в качестве обратного прокси-сервера для 3 контейнеров.
Каждый раз, когда я пытаюсь запустить сервер nginx, а один из вышестоящих контейнеров не работает, я получаю сообщение об ошибке: [emerg] host not found in upstream "f505218f8932:8000"
Моя цель - компенсировать отключение вышестоящего сервера. Но когда nginx не может запуститься, если один хост не работает, тогда весь nginx бесполезен.
Я попытался установить преобразователь DNS в контейнер docker, но безуспешно.
Когда все вышестоящие контейнеры работают, мой конфиг работает нормально. Даже если я убью / остановлю один из вышестоящих серверов.
Сложная часть - это начальная фаза nginx ...
Файл конфигурации:
upstream api-gateway {
server f505218f8932:8000;
server fcad286dab24:8000;
server 0f1f0219dc93:8000;
}
# main server block
# this servers the frontend
# if no static file found, proxy to backend
server {
#listen 443 ssl;
listen 80;
server_name example.com www.example.com;
access_log off;
server_tokens off;
root /var/www/html/example.com;
location / {
# server static files
# if no static file is found
# us the backend location
try_files index.html $uri $uri/ @backend;
autoindex off;
}
location @backend {
# use api-gateway upstream
proxy_pass http://api-gateway;
proxy_next_upstream error timeout;
resolver 127.0.0.11 valid=30s;
# disable buffering
proxy_buffering off;
# set proxy header
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Connection "Upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
РЕДАКТИРОВАТЬ:
После долгого времени отладки, если обнаружится, что docker не может разрешить имена хостов из контейнера, которые не работают. Это нормально, потому что IP-адрес контейнера может измениться после запуска.
Итак, проблема в том, что nginx выполняет поиск DNS при запуске / перезагрузке, чтобы проверить, не сделали ли вы опечатку в конфигурации.
Любая помощь приветствуется