Anwendungsdienst über einzelne Domäne mit Nginx verfügbar

Anwendungsdienst über einzelne Domäne mit Nginx verfügbar

Ich habe einen Server auf Digital Ocean und verwende diesen, um mehrere Docker-Container bereitzustellen und sie mithilfe von Reverse-Proxys auf Nginx zu hosten.

Ich habe 2 Domänen mit meinem Server verknüpft (einzelne öffentliche IP). Nennen wir sie domain1.com und domain2.com

Jetzt laufen bei mir 2 Dienste auf Docker, Postgres (Port 5432) und MySQL (Port 3306)

Ich habe Reverse-Proxys eingerichtet, um domain1.com in localhost:5432 und domain2.com in localhost:3306 zu übersetzen:

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;
  }
}

Was mich hier stört, ist, dass die Verbindung funktioniert, wenn ich versuche, auf domain1.com:3306 zuzugreifen, was ich nicht will. Ich möchte, dass jede Domäne nur über den ihr zugewiesenen Dienst zugänglich ist.

Beispielsweise sollte ein Telnet zu domain1.com:5432 von außen funktionieren, ein Telnet zu domain2.com:3306 jedoch nicht.

Kann jemand bitte helfen?

Antwort1

Sie müssen IhreMySQLInstanz, um nur lokal (Container-Host) zu lauschen, sodass Endbenutzer nicht von außen darauf zugreifen können; nur nginx und andere lokale Prozesse können dies.

Dazu müssen Sie lediglich Ihr Image mit der richtigen Konfiguration vonmeine.cnf:

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

Oder ohne das Image neu zu erstellen (vor dem Ausführen):

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

Womeine.cnfsollte die folgende Konfiguration enthalten:

 bind-address=<host_ip>

Dasselbe können Sie tun fürPostgres.

EDIT 1: Seit Ihrem letzten Kommentar:

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

Sie können es umgekehrt machen, um den Verkehr zu blockieren aufnginxEbene; aber wenn Sie den Verkehr vollständig blockieren möchten, so dass er nicht vom Kernel verarbeitet wird, so dass beispielsweise Telnet eine abgelehnte Verbindung anzeigt, müssen Sie dies aufSchicht 3mitiptables.

verwandte Informationen