Рейтинг:0

Соединение Nginx отклонено

флаг ng

Я использую контейнеры докеров для размещения веб-приложения. У меня есть три основных контейнера: MySQL, flask и Nginx. Первые два работают так, как ожидалось, а последний работает нормально, так как при запуске docker-compose не отображается ошибка.

Вывод инициализации контейнера Nginx:

нгинкс | /docker-entrypoint.sh: /docker-entrypoint.d/ не пустой, попытается выполнить настройку
нгинкс | /docker-entrypoint.sh: поиск сценариев оболочки в /docker-entrypoint.d/
нгинкс | /docker-entrypoint.sh: запуск /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
нгинкс | 10-listen-on-ipv6-by-default.sh: информация: /etc/nginx/conf.d/default.conf не является файлом или не существует
нгинкс | /docker-entrypoint.sh: запуск /docker-entrypoint.d/20-envsubst-on-templates.sh
нгинкс | /docker-entrypoint.sh: запуск /docker-entrypoint.d/30-tune-worker-processes.sh
нгинкс | /docker-entrypoint.sh: настройка завершена; готов к запуску
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: использование метода события "epoll"
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: nginx/1.21.6
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: построено gcc 10.2.1 20210110 (Debian 10.2.1-6) 
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: ОС: Linux 4.19.130-boot2docker
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
нгинкс | 07.04.2022, 13:09:13 [уведомление] 1#1: запустить рабочие процессы
нгинкс | 07.04.2022 13:09:13 [уведомление] 1#1: запустить рабочий процесс 21

Докерфайл Nginx

# Dockerfile-nginx
ОТ nginx: последняя
# Nginx будет прослушивать этот порт
# ЭКСПОЗИЦИЯ 80
# Удалите файл конфигурации по умолчанию, который
# /etc/nginx/nginx.conf включает
ЗАПУСК rm /etc/nginx/conf.d/default.conf
# Копируем файл требований для установки
# Зависимости Python
скопируйте nginx.conf /etc/nginx/conf.d/

Контейнеры после развертывания и соответствующие им порты:

ИДЕНТИФИКАТОР КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СТАТУС ИМЕНА ПОРТОВ
bffffcfe2f70 sc_server_nginx "/docker-entrypoint.â¦" 14 секунд назад Up 13 секунд 0.0.0.0:80->80/tcp nginx
a73d958c1407 sc_server_flask "uwsgi app.ini" 9 часов назад Up 9 часов 8080/tcp flask
d273db5f80ef mysql:5.7 "docker-entrypoint.s¦" 21 час назад Up 9 часов (исправен) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

Я новичок на сервере Nginx, поэтому я думаю, что это может быть ошибка новичка. Я пытаюсь перенаправить весь трафик с 80-го порта моей хост-машины на 80-й докер, который перенаправляет трафик в контейнер WSGI через сокет.

Я использую следующую конфигурацию Nginx (я думаю, ничего особенного):

сервер {
  слушать 80;
  место расположения / {
    включить uwsgi_params;
    колба uwsgi_pass:8080;
  }
}

Как видите, сервер слушает порт 80 и перенаправляет весь трафик через сокет. колба uwsgi_pass:8080; в контейнер WSGI, в котором размещено приложение.

Однако всякий раз, когда я набираю 127.0.0.1:80 или 0.0.0.0:80 в своем браузере, в соединении отказывается. У меня нет развернутого брандмауэра, поэтому я думаю, что нет проблем с отключенным портом 80.

Это мой конфигурационный файл app.ini, в котором указаны параметры инициализации и развертывания:

[увсги]
wsgi-файл = wsgi.py
; Это имя переменной
; в нашем скрипте, который будет называться
вызываемый = приложение
; Мы используем порт 8080, который мы будем
; затем выставить на наш Dockerfile
сокет = :8080
; Настройте uWSGI для запуска 4 рабочих процессов.
процессы = 4
темы = 2
мастер = правда
chmod-сокет = 660
вакуум = правда
умирать в срок = правда

Кроме того, я также включаю docker-compose.yml (думаю, это может быть полезно):

докер-compose.yml

Сервисы:
  колба:
    сборка: ./фласк
    имя_контейнера: колба
    перезапуск: всегда
    среда:
      - APP_NAME=MyFlaskApp
      - YOURAPPLICATION_SETTINGS=docker_config.py
    разоблачать:
      - 8080
    зависит от:
      MySQL:
          состояние: service_healthy
  MySQL:
    изображение: MySQL: 5.7
    имя_контейнера: mysql
    порты:
      - "3306:3306"
    среда:
      MYSQL_ROOT_ПАРОЛЬ:
      MYSQL_DATABASE:
      MYSQL_USER:
      MYSQL_ПАРОЛЬ:
    тома:
      - ./db/init.sql:/data/application/init.sql
    проверка состояния здоровья:
      тест: mysql -u -p --database -e "показать таблицы;"
      интервал: 3 с
      повторы: 5
      начальный_период: 30 сек.
  нгинкс:
    сборка: ./nginx
    имя_контейнера: nginx
    перезапуск: всегда
    зависит от:
      - mysql
      - колба
    порты:
      - "80:80"

Кто-нибудь может помочь?

Обновлять

Я использовал Wireshark для сканирования петлевого интерфейса, чтобы увидеть ответ сервера на 0.0.0.0:80 (я подозреваю, что могут быть проблемы с портом 80), и я получаю следующую полезную нагрузку:

проволочная акула

drookie avatar
флаг za
Проверьте логи контейнера nginx, там есть ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.