NGINX ошибка запуска в восходящем направлении: хост не найден в вышестоящем - PullRequest
0 голосов
/ 19 апреля 2020

Я играю с 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 при запуске / перезагрузке, чтобы проверить, не сделали ли вы опечатку в конфигурации.

Любая помощь приветствуется

...