Servicio de aplicación disponible a través de un único dominio usando Nginx

Servicio de aplicación disponible a través de un único dominio usando Nginx

Tengo un servidor en Digital Ocean y lo estoy usando para implementar múltiples contenedores acoplables y uso servidores proxy inversos para alojarlos en Nginx.

Tengo 2 dominios vinculados a mi servidor (IP pública única). Llamémoslos dominio1.com y dominio2.com

Ahora tengo 2 servicios ejecutándose en Docker, Postgres (puerto 5432) y MySQL (puerto 3306).

Configuré servidores proxy inversos para traducir domain1.com a localhost:5432 y domain2.com a 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;
  }
}

Lo que me molesta aquí es que si intento acceder a domain1.com:3306, la conexión funciona y no quiero. Quiero que cada dominio sea accesible únicamente mediante el servicio que se les ha asignado.

Por ejemplo, un telnet a dominio1.com:5432 desde el exterior debería funcionar, pero un telnet a dominio2.com:3306 no.

Puede ayudarme alguien, por favor ?

Respuesta1

Tienes que hacer tuMySQLinstancia para escuchar localmente (host del contenedor), por lo que los usuarios finales no podrán acceder a ella desde fuera, solo nginx y otros procesos locales pueden hacerlo.

Entonces, para esto solo tienes que reconstruir tu imagen con la configuración correcta demi.cnf:

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

O sin reconstruir la imagen (antes de ejecutar):

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

Dóndemi.cnfdebe contener la siguiente configuración:

 bind-address=<host_ip>

Puedes hacer lo mismo paraPostgres.

EDITAR 1: Desde su último comentario:

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

Puedes hacerlo al revés para bloquear el tráfico ennginxnivel; pero si desea bloquear totalmente el tráfico para que no sea procesado por el kernel, por ejemplo, telnet mostrará conexión rechazada, debe hacerlo enCapa 3coniptables.

información relacionada