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.