Хост не найден в upstream – AWS ECS и Docker

Вопрос или проблема

Я пытаюсь обновить определение задачи ECS (Elastic Container Service). Я изменяю свой API ключ SendGrid для своего серверного сервиса. Так что я развертываю это обновленное определение задачи, обновляя ECS, и это запускает развертывание контейнеров.

Во время повторного развертывания nginx, который, возможно, является прокси-сервером контейнерной службы docker, сталкивается с ошибкой. Ошибка заключается в том, что nginx не может разрешить сервис uwsgi. Я проверил, может ли nginx пинговать и wget uwsgi. 

Так что я совершенно сбит с толку, потому что это должно происходить без каких-либо проблем, но я не могу это разрешить.

Вот ошибка:

nginx: [emerg] host not found in upstream "backendUwsgi" in /etc/nginx/conf.d/backend.conf:45

Есть ли способ сделать это без того, чтобы что-либо выкладывать на Github и вносить изменения в консоли AWS? Какие изменения мне, возможно, придется внести?

Конфигурационный файл nginx:

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {

  listen  80 default_server;
  server_name ${HOST};
  charset     utf-8;

  client_max_body_size 500m;
  gzip on;
  gzip_disable "msie6";
  gzip_types text/plain
             text/css
             application/json
             application/x-javascript
             text/xml
             application/xml
             application/xml+rss
             text/javascript
             application/javascript
             application/x-font-opentype
             image/svg+xml;
  gzip_comp_level 9;
  gzip_vary on;

  location = /api/v1/***** {
    return 200;
    access_log off;
  }

  location / {
    proxy_read_timeout 600;
    client_body_timeout 600;
    uwsgi_read_timeout 600;

    proxy_set_header Host ${HOST};
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_pass  http://${UWSGI_APP}:${UWSGI_PORT};
  }
}

Мне просто нужно добавить эту строку “upstream” в конфигурацию nginx и повторно развернуть? Не знаю. “backendUwsgi” упоминается в свойствах и слушает на порту 9000.

Ответ или решение

Чтобы решить проблему "host not found in upstream" в вашем случае с AWS ECS и Docker, вам нужно выполнить несколько шагов, чтобы убедиться, что ваш Nginx правильно настроен для связи с uwsgi сервисом. Давайте посмотрим на потенциальные причины этой проблемы и способы их решения.

1. Проверьте доступность целевого сервиса

В первую очередь, убедитесь, что ваш backendUwsgi сервис доступен для контейнера Nginx. Вы можете сделать это с помощью команды ping или wget из контейнера Nginx. Если вы уже это проверили и у вас нет проблем с подключением, переходите к следующему шагу.

2. Проверьте имена сервисов и конфигурацию

Убедитесь, что вы используете правильное имя сервиса и порт в вашем Nginx конфиге. В вашем конфиге указано:

proxy_pass  http://${UWSGI_APP}:${UWSGI_PORT};

Проверьте, что переменные окружения UWSGI_APP и UWSGI_PORT правильно устанавливаются и соответствуют имени вашего сервиса uwsgi и его порту. Если backendUwsgi слушает на порту 9000, вам также нужно убедиться, что это имя корректно передается в конфигурацию.

3. Использование блока upstream

Если Nginx по-прежнему не может разрешить имя сервиса, вы можете добавить блок upstream в ваш Nginx конфиг, чтобы явно объявить целевой сервис:

upstream backendUwsgi {
    server backendUwsgi:9000; # Убедитесь, что имя соответствует имени вашего сервиса
}

server {
    # Остальная часть вашей конфигурации...

    location / {
        proxy_read_timeout 600;
        client_body_timeout 600;
        uwsgi_read_timeout 600;

        proxy_set_header Host ${HOST};
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass  http://backendUwsgi; # Теперь используется имя upstream
    }
}

4. Обновление конфигурации в ECS

Чтобы внести эти изменения, вы можете сделать следующее:

  • Обновите ваш Nginx конфиг в локальном окружении или на вашей машине.
  • Используйте CLI или интерфейс AWS для обновления контейнера с новым конфигом.
  • Создайте новый образ Docker с обновленным конфигом и загрузите его в ваш реестр (если это необходимо).
  • После обновления образа убедитесь, что обновленная версия задачи ECS запущена.

5. Проверка сетевых настроек и прав

Имейте в виду, что ваши сетевые настройки (например, правила безопасности и группы) также могут влиять на доступность сервисов. Убедитесь, что ваши контейнеры находятся в одной VPC и имеют правильные разрешения для взаимодействия друг с другом.

6. Логи и отладка

Если проблема не решается, проверьте логи как контейнера Nginx, так и uwsgi, чтобы получить дополнительную информацию о возникших ошибках. Логи могут вам обеспечить важную информацию о том, что именно идет не так.

Заключение

Следуя вышеописанным шагам, вы должны быть в состоянии устранить проблему с "host not found in upstream". Убедитесь, что все ваши имена сервисов и конфигурация правильны, добавьте блок upstream и обновите ECS с новым конфигом. Не забудьте проверить сетевые настройки на наличие возможных препятствий для связи между контейнерами.

Оцените материал
Добавить комментарий

Капча загружается...