Nginx를 활용한 단일 도메인을 통한 응용 서비스 이용 가능

Nginx를 활용한 단일 도메인을 통한 응용 서비스 이용 가능

Digital Ocean에 서버가 있고 이를 사용하여 여러 도커 컨테이너를 배포하고 역방향 프록시를 사용하여 Nginx에서 호스팅하고 있습니다.

내 서버에 2개의 도메인이 연결되어 있습니다(단일 공용 IP). domain1.com과 domain2.com의 이름을 지정하겠습니다.

이제 Docker, Postgres(포트 5432) 및 MySQL(포트 3306)에서 2개의 서비스가 실행되고 있습니다.

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에 액세스하려고 하면 원하지 않는 연결이 작동한다는 것입니다. 각 도메인에 할당된 서비스로만 액세스할 수 있도록 하고 싶습니다.

예를 들어 외부에서 domain1.com:5432에 대한 텔넷은 작동해야 하지만 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>

당신도 똑같이 할 수 있습니다포스트그레스.

편집 1 : 마지막 댓글 이후 :

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

반대로 트래픽을 차단할 수도 있습니다.nginx수준; 그러나 트래픽을 완전히 차단하여 커널에 의해 처리되지 않도록 하려는 경우, 예를 들어 텔넷에서 연결이 거부되었음을 표시하려면 다음에서 수행해야 합니다.레이어 3~와 함께iptables.

관련 정보