@Drottarutarnum
Любопытный любитель

Как настроить множество сеервисов на одном сервере?

Из доков nginx не нашел, как такое возможно

Кратко:
Нужно чтобы nginx перехватывал абсолютно все внешние подключения и обрабатывал их строго маршрутизации
Для примера, если у меня есть два веб сервера в двух докер контейнерах на 8080 и 9090 порту, и домен с днс записями на ip сервера,
то:
s1.domain.com вел бы на localhost:8080
s2.domain.com вел бы на localhost:9090

Но я все еще могу ввести s1.domain.com:9090 или domain.com:9090 и попасть на второй сервер
Использовать SERVER_IP:9090 и сделать тоже самое (а надо разрешить переходы только с доменов)

И если юзер приходит с порта и/или не указан в конфигах, его должно перекинуть на главную страницу

Подробно:
Суть в том, что у меня на домашнем сервере есть облачный диск, менеджер паролей, гит, и т.п. (все это в докере, кроме nginx)

Проблема вот в чем, я хочу ограничить возможность подключения только с нужными мне поддоменами и портами

Несколько примеров:

Сейчас web интерфейс гит слушает порт 8080
Я перенаправляю git.domain.com:80 -> localhost:8080

Mini CMS слушает порт 8090
Я перенаправляю domain.com:80 -> localhost:8090

portainer слушает порты 8000 и 9443
Я пока ничего с этим не делаю, просто захожу на domain.com:9443

postgres на 5432 порту

Сервер старбаунд и маинкрафт на 21025 и 25565 порту

Проблемы с этим такие:
1) Я могу подключится к чему угодно используя domain.com:[НУЖНЫЙ ПОРТ] или [server IP]:[НУЖНЫЙ ПОРТ]

Я бы хотел разрешить, допустим, ТОЛЬКО поддомену portainer.domain.com подключаться к localhost:8000 и localhost:9443
portainer.domain.com:80 -> localhost:9443
portainer.domain.com:8000 -> localhost:8000

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

2) postgres, кажется, так же смотрит в интернет, как это закрыть?

3) Нужно правило для всех подключений вне правил, с любого поддомена и порта который не описан в конфигах редирект на domain.com
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Drno
Могу ошибиться, но я бы пробовал так.
Снаружи лишние порты закрываем iptables.

Далее в nginx делаем revers_proxy
1. Без указания ip и домена - редирект на damain.com
2. Домен1 - на такой то ip:порт
3. Домен2 на такой то ip:порт.

Мне кажется в таком случае всё лишнее уйдет на domain.com
А сервисы уйдут только при обращении к доменам

Насчет майнкрафта - хз как его проксировать. Аидимо только с помощью модуля stream
Ответ написан
ValdikSS
@ValdikSS
Но я все еще могу ввести s1.domain.com:9090 или domain.com:9090 и попасть на второй сервер

Потому что вы пробрасываете (expose) порты из Docker на хост. Не используйте эту функцию, тогда сервисы не будут открываться на порту хоста.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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