Nginx run from docker -compose возвращает "хост не найден в восходящем потоке" - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь создать обратный прокси-сервер для приложения, используя nginx с этим docker -компонентом:

version: '3'
services:
  nginx_cloud:
    build: './nginx-cloud'
    ports:
        - 443:443
        - 80:80
    networks:
        - mynet
    depends_on:
        - app

  app:
    build: './app'
    expose:
        - 8000
    networks:
        - mynet

networks:
    mynet:

И это мой nginx conf (сокращенный):

 server {
  listen 80;
  server_name reverse.internal;

  location / {
    # checks for static file, if not found proxy to app
    try_files $uri @to_app;
  }

  location @pto_app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app:8000;
  }
 }

Когда я его запускаю, nginx возвращает:

[emerg] 1#1: host not found in upstream "app" in /etc/nginx/conf.d/app.conf:39

I пробовал несколько другие предлагаемые решения без любые успех . Любопытно, что если я запускаю nginx вручную через оболочку изнутри контейнера, это работает, я могу пропинговать app et c. Но запуск из docker -композит или напрямую через docker сам по себе не работает.

Я попытался настроить отдельный апстрим, добавив docker внутренний распознаватель, ожидающий несколько секунд, чтобы убедиться, что приложение уже запущено и т. Д. c без удачи. Я знаю, что этот вопрос задавался несколько раз, но пока что ничего не работает.

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Услуга app может не запуститься вовремя. Чтобы диагностировать проблему, попробуйте двухэтапный подход:

docker-compose up -d app

подождите 15-20 секунд (или все, что требуется, чтобы приложение было готово и готово)

docker-compose up -d nginx_cloud

Если оно работает, тогда вам нужно обновить entrypoint в nginx_cloud сервисе, чтобы ждать сервиса app.

1 голос
/ 02 марта 2020

Можете ли вы попробовать следующее определение сервера?

server {
    listen       80;
    server_name  reverse.*;

    location / {
        resolver 127.0.0.11 ipv6=off;

        set $target http://app:8080;

        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_pass $target;
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...