Как настроить множество сеервисов на одном сервере?
Из доков 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
Михаил Ливач, по IP-адресам запущенных контейнеров. Expose порта активирует прокси с сети хоста до IP-адреса и порта сервиса в контейнере, а если его не активировать, сервис будет доступен по, собственно, IP-адресу контейнера и его порту, который и нужно прописать в nginx.