Настройка 2 виртуальных хостов в nginx в контейнере докера и адресация их через имя хоста

Я уже искал, но не совсем уверен, что вопросы, которые я нашел, касаются моей проблемы.

У меня есть виртуальная машина (ubuntu 16.04.04 LTS), на которой уже установлен докер и запущен веб-сервер nginx (отлично работает) .

Не хочу настраивать второй виртуальный хост. Для этого у меня есть один файл конфигурации szenario.conf, который содержит следующие строки: 1. хост и 2. host

docker-compose.yml выглядит так: Docker compose yml

Теперь, когда я ввожу IP-адрес виртуальной машины, я должен набирать, например, 192.168.56.103:8080, который возвращает только первый веб-сайт (в данном примере - спидометр).

Ввод example.speedo и example.fakebook направляется в Интернет и не работает.

Как сделать оба сайта доступными через имя хоста, чтобы при экспорте этого компьютера другой пользователь мог легко получить доступ к этим сайтам, набрав имена при импорте машины в его среду?

Какие изменения я должен внести?

0
задан 19 May 2018 в 20:00
2 ответа

Чтобы ввести имя хоста в адресной строке браузера и подключить браузер к вашей виртуальной машине, он должен преобразовать имя хоста в IP-адрес. Для этого он сначала просматривает файл / etc / hosts и проверяет, определено ли там имя хоста. Если да, то используется IP, указанный в файле. В противном случае выполняется обычный поиск DNS.

В зависимости от вашей среды вы не сможете изменить DNS, поэтому давайте сначала сконцентрируемся на etc / hosts (или % SystemRoot% \ system32 \ drivers \ etc \ hosts , если ваша ОС Windows). Это локальный файл вашего компьютера, поэтому любые изменения, которые вы в нем вносите, влияют только на ваш собственный браузер.

Чтобы иметь возможность открывать «example.speedo» и «example.fakebook» в вашем браузере и подключаться к вашему nginx, добавьте следующую строку в ваш файл hosts:

192.168.56.103 example.speedo example.fakebook

Все, что он сообщает вашему компьютеру, что имена example.speedo и example.fakebook должны быть преобразованы в 192.168.56.103.

Пожалуйста, имейте в виду, пока это работает для вас, если вы передадите свою виртуальную машину кому-то другому, он должен будет сделать такую ​​же модификацию своего файла hosts.

Другой вариант - изменить ваш DNS. Поскольку процесс этого сильно зависит от используемого DNS-сервера, я не могу сказать, как это сделать. Вам нужно будет добавить две новые зоны, speedo и facebook, и добавить туда записи DNS. Тогда другие пользователи, использующие тот же DNS-сервер (что, вероятно, означает, что они находятся в той же сети, что и вы), могут использовать ваш компьютер без необходимости редактировать файл своих хостов.

Однако я не могу рекомендовать это, так как создание поддельных зон в локальном DNS-сервер, использующий имена, которые однажды могут стать официальными зонами (возможно, что facebook зарегистрирует TLD facebook), может привести к проблемам в будущем (в этом случае facebook может когда-нибудь перестать работать для вас).

Если вы используете домен, которым вы владеете или который может использоваться локально (например, "локальный"), вы можете без проблем добавлять имена под этим доменом. Примеры: «speedo.local» и «facebook.local» или «speedo.your.name.here» и «facebook.your.name.here».

Чтобы не указывать порт в адресной строке, у вас должен быть nginx на порту 80 вместо 8080. Установите портов на 80:80 в docker-compose.yml .

.
0
ответ дан 24 November 2019 в 02:40

Вам необходимо добавить имена виртуальных хостов в / etc / hosts на компьютере, который будет использоваться для доступа к этим хостам.

Итак, если вы запустите браузер на вашем хосте и хотите получить доступ к сайту в контейнере,вам нужно добавить следующие строки в файл / etc / hosts на вашем хосте:

192.168.56.103 example.speedo
192.168.56.103 example.fakebook

Если ваш хост - машина Windows, вам нужно ввести эти строки в `C: \ Windows \ System32 \ Файл drivers \ etc \ hosts.

В качестве альтернативы можно добавить их в зону DNS для ваших доменов.

0
ответ дан 24 November 2019 в 02:40

Теги

Похожие вопросы