Serviço de aplicativo disponível por meio de domínio único usando Nginx

Serviço de aplicativo disponível por meio de domínio único usando Nginx

Eu tenho um servidor no Digital Ocean e estou usando-o para implantar vários contêineres docker e proxies reversos para hospedá-los no Nginx.

Tenho 2 domínios vinculados ao meu servidor (IP Público Único). Vamos chamá-los de domínio1.com e domínio2.com

Agora tenho 2 serviços em execução no docker, Postgres (porta 5432) e MySQL (porta 3306)

Configurei proxies reversos para traduzir domain1.com para localhost:5432 e domain2.com para 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;
  }
}

O que está me incomodando aqui é que se eu tentar acessar domínio1.com:3306, a conexão funciona, o que eu não quero. Quero que cada domínio seja acessível apenas pelo serviço atribuído a eles.

Por exemplo, um telnet para domínio1.com:5432 externo deve funcionar, mas um telnet para domínio2.com:3306 não.

Alguém pode ajudar por favor ?

Responder1

Você tem que fazer o seumysqlinstância para escutar localmente ( Container Host ) apenas, para que os usuários finais não possam acessá-la de fora, apenas o nginx e outros processos locais podem fazê-lo.

Então para isso basta reconstruir sua imagem com a configuração correta domeu.cnf:

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

Ou sem reconstruir a imagem (antes de executar):

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

Ondemeu.cnfdeve conter a seguinte configuração:

 bind-address=<host_ip>

Você pode fazer o mesmo porPostgres.

EDIT 1: Desde o seu último comentário:

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

Você pode fazer isso vice-versa para bloquear o tráfego emnginxnível; mas se você quiser bloquear totalmente o tráfego para que ele não seja processado pelo kernel, por exemplo, o telnet mostrará a conexão recusada, você terá que fazer isso emCamada 3comtabelas de ip.

informação relacionada