Назад | Перейти на главную страницу

Направляйте входящий трафик для host1.example.com:80 в контейнер докеров с портом 80, привязанным к 10080

У меня есть машина Ubuntu 16.04 с Apache2 и Docker (сам докер запускает GitLab из концентратора Docker). В этом ящике также находится экземпляр Phabricator, поэтому я поместил GitLab в отдельный Docker, чтобы разделять вещи.

Также важно отметить, что я могу получить доступ к серверу двумя разными способами: в частной сети моей компании через частный IP-адрес (10.10.XY) или через имя хоста "gitlab.example.com", которое указывает на общедоступный IP-адрес. .

Изнутри частной сети, если я перейду к «10.10.X.Y: 10080», я смогу получить доступ к GitLab во всей его красе. Если я перейду на «gitlab.example.com:10080» за пределы сети (и открою 10080 в брандмауэре), я все равно смогу получить доступ к GitLab без проблем.

Однако я хочу избежать открытия 10080; Я также предпочел бы, чтобы моим разработчикам нужно было вводить только имя хоста и не указывать номер порта.


Я пытался сделать это несколькими способами, но безрезультатно ...


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

Я нашел решение своей проблемы. Во время первых попыток это была ошибка пользователя с моей стороны.

Прокси-сервер Apache

Мой VHost:

<VirtualHost *:80>
    ServerName gitlab.example.com

    ProxyPreserveHost On
    <Proxy *>
            Order allow,deny
            Allow from all
    </Proxy>
    ProxyPass / http://172.17.0.2:80/
    ProxyPassReverse / http://172.17.0.2:80/
</VirtualHost>

ПРИМЕЧАНИЕ. 172.17.0.2 - это IP-адрес моего контейнера gitlab.

Что я упустил в своих первых попытках, так это ... подождите ... Я не включил мод proxy_http !! Так что неудивительно, что это никогда не работало. Этого никогда не было бы.

После настройки VHost обязательно выполните следующие действия:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo service apache2 reload

И вуаля! Теперь я могу получить доступ к своему экземпляру gitlab с gitlab.example.com в браузере, и он будет автоматически перенаправлять на порт 10080, но оставить URL-адрес в браузере как есть.

РЕДАКТИРОВАТЬ: У меня возникла проблема с моей исходной конфигурацией, когда я запретил трафик на порт 10080 через брандмауэр, потому что я пытался прокси-сервер обратно на сервер, используя имя хоста. Вместо этого я переключился на IP-адрес докера: PORT в VHost, чтобы решить эту проблему.

rinetd использует файл конфигурации для запуска. Вы можете просто поместить эту строку в файл с именем rinetd.conf:

gitlab.example.com 80 172.17.0.2 10080

А затем запустите rinetd, как вы планировали (-f работает в режиме переднего плана; иначе он перейдет в фоновый режим, как традиционный демон):

sudo rinetd -f -c rinetd.conf