Служба приложений доступна через один домен с использованием Nginx

Служба приложений доступна через один домен с использованием Nginx

У меня есть сервер на Digital Ocean, и я использую его для развертывания нескольких Docker-контейнеров и использую обратные прокси-серверы для их размещения на Nginx.

У меня есть 2 домена, привязанных к моему серверу (один публичный IP). Давайте назовем их domain1.com и domain2.com

Теперь у меня на Docker запущено 2 сервиса: Postgres (порт 5432) и MySQL (порт 3306).

Я настроил обратные прокси-серверы для перевода domain1.com в localhost:5432 и domain2.com в localhost:3306:

server {
  listen        80;
  server_name   domain1.com;

  location / {
    proxy_pass  http://localhost:5432;
  }
}

server {
  listen        80;
  server_name   domain2.com;

  location / {
    proxy_pass  http://localhost:3306;
  }
}

Меня беспокоит то, что если я пытаюсь получить доступ к domain1.com:3306, соединение работает, а мне не нужно. Я хочу, чтобы каждый домен был доступен только назначенному ему сервису.

Например, telnet-подключение к domain1.com:5432 извне должно работать, а telnet-подключение к domain2.com:3306 — нет.

Может ли кто-нибудь помочь?

решение1

Вы должны сделать свойmysqlэкземпляр будет прослушиваться только локально (хост контейнера), поэтому конечные пользователи не смогут получить к нему доступ извне, это могут сделать только nginx и другие локальные процессы.

Так что для этого вам нужно просто перестроить ваш образ с правильной конфигурациеймой.cnf:

FROM mysql
COPY custom.cnf /etc/mysql/my.cnf

Или без пересборки образа (перед запуском):

docker run -v <path_to_custom.cnf>:/etc/mysql/conf.d

Гдемой.cnfдолжен содержать следующую конфигурацию:

 bind-address=<host_ip>

Вы можете сделать то же самое дляПостгрес.

EDIT 1: С момента вашего последнего комментария:

server{
  listen        3306;
  server_name   domain2.com;
  return 403; 
} 

Вы можете сделать это наоборот, чтобы заблокировать трафик наnginxуровне; но если вы хотите полностью заблокировать трафик, чтобы он не обрабатывался ядром, например, telnet покажет, что соединение отклонено, вам нужно сделать это наСлой 3сiptables.

Связанный контент