Я смотрел много уроков по докерным контейнерам, микросервисам и прокси nginx. Одна вещь, которая действительно привлекла мое внимание, это то, что в файле docker-compose.yml служба, которую я хотел бы запустить, имеет переменную среды VIRTUAL_HOST. Таким образом, я могу запустить контейнер, напрямую ссылаясь на VIRTUAL_HOST.

Но нужно ли указывать VIRTUAL_HOST во всех контейнерах? Например, предположим, что у меня есть 3 контейнера: A, B и C. Если я хочу, чтобы все 3 из этих контейнеров были проксированы, нужно ли указывать переменную среды VIRTUAL_HOST для всех 3 из них в файле docker-compose? Является ли переменная среды VIRTUAL_HOST необходимым условием для правильной работы прокси-сервера Nginx с этими контейнерами? Ни один из проверенных мной руководств не отвечает на этот вопрос.

1 ответ1

0

Я предполагаю, что вы говорите об образе jwilder/nginx-proxy .

Таким образом, я могу запустить контейнер, напрямую ссылаясь на VIRTUAL_HOST.

Контейнер запускается, как только вы docker-compose up и он работает все время. VIRTUAL_HOST сообщает обратному прокси-серверу, какие запросы хоста должны быть перенаправлены в этот контейнер.

Например, если у вас есть контейнер с VIRTUAL_HOST=foo.example.com , то каждый запрос к revproxy с foo.example.com в заголовке Host будет перенаправлен в этот контейнер, а его ответ будет отправлен прокси клиенту , Но если заголовком Host является bar.example.com , запрос не будет перенаправлен в этот контейнер. Вместо этого прокси перенаправит его в контейнер с VIRTUAL_HOST=bar.example.com . Если такого контейнера не существует, он попытается использовать хост по умолчанию, указанный в переменной DEFAULT_HOST в прокси-контейнере (не в контейнере по умолчанию). Если хост по умолчанию не настроен, он вернет ошибку.

Без VIRTUAL_HOST прокси - сервер не будет знать , какой Host этот контейнер соответствует, так что никаких запросов не будет пересылаться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .