2016-11-05 5 views
1

У меня есть 3 приложения (приложение-приложение, приложение-приложение, приложение-b), работающие на сервере причала и одном балансировщике нагрузки NGINX (приложение-фунт). Все (внутренние или внешние) запросы поступают в мое приложение через балансировщик нагрузки. На основе имени веб-контекста (/ app-a/or/app-b /) LB отправит запрос правильному приложению. Я настроил (location/app-a/и location/app-b и location/app-client) в LB. app-a вызовет приложение-b и приложение-b вызовет приложение-a, приложение-клиент будет вызываться из внешнего мира, приложение-клиент вызовет app-a или app-b.Конфигурация местоположения Docker jwilder/nginx-proxy

Я написал Docker-composer для своего приложения. Чтобы избежать циклической зависимости, я использовал Docker net. он работает хорошо.

Если я увеличил свое приложение. LB не знает об этом новом контейнере приложения.

Я прошел несколько учебников и пытался использовать jwilder/nginx-proxy вместо NGINX. если я использую это с помощью переменной VIRTUAL_HOST = app-name, она обновляется вверх по потоку в файле конфигурации. Но мое приложение выполняется на основе сопоставления местоположений для каждого контейнера. Если я не укажу, как запрос будет отправляться на правильный контейнер.

Как указать отображение местоположения в файле default.conf LB, как показано ниже, поскольку эта конфигурация обновляется контейнером динамически или, как сделать внутренние URL-адреса.

location /app-a { 
      proxy_pass http://app-a; 
    } 
    location /app-client { 
      proxy_pass http://app-client; 
    } 


    location /app-b { 
      proxy_pass http://app-b; 
    } 
Request from outside: http://IP:9090/app-client/ 
Internal call : http://app-lb:80/app-a/ 
       http://app-lb:80/app-b 

    LB exposed port no is 9090 

ответ

1

Есть тянуть запросы (e.g. #599) для Nginx-прокси изображения для поддержки виртуальных путей. Чтобы реализовать это, вы можете использовать исходное изображение и просто передать свой собственный файл nginx.tmpl в контейнер (в качестве тома, например, -v $(pwd)/nginx.tmpl:/app/nginx.tmpl:ro). Тогда ваши контейнеры просто должны определить VIRTUAL_PATH, так как они будут VIRTUAL_HOST.

Я также рекомендовал бы установить DEFAULT_HOST в контейнере nginx-proxy и указать на все это, если вы не хотите, чтобы маршрутизация на основе имени хоста.

Отмечают с # 599, есть ошибка в nginx.tmpl, что я столкнулся, вам нужно переместить {{ $networks := .Networks }} вверх две линии, чтобы быть до {{ range $container := .Containers }} (диапазон переопределяет . который переопределяет .Networks). В противном случае все сети будут считаться доступными, и вы получите тайм-ауты, если контейнер также подключен к другим сетям, недоступным nginx-proxy.

+0

Я планирую использовать dockercloud-haproxy. он имеет ВИРТУАЛЬНЫЙ ПУТЬ и ХОЗЯИН. пожалуйста, предложите мне об этом – Gnana

+0

Вопрос был выше для nginx-прокси jwilder, на который я ответил здесь. У меня нет совета для dockercloud-haproxy, это будет другой вопрос. – BMitch

Смежные вопросы