홈랩·자작 서버

Nginx Proxy Manager로 한 서버에 여러 서비스 운영하기

한 서버에서 프로젝트를 둘 이상 돌리면 결국 80번과 443번 포트에 부딪힙니다. 이 포트는 한 프로세스만 리스닝할 수 있기 때문입니다. Selectel 블로그의 Habr 글은 Nginx Proxy Manager로 이 문제를 푸는 방법을 단계별로 보여 줍니다.

저자는 먼저 문제를 설명합니다. 특권 포트, '포트 하나에 리스너 하나'라는 제약, 프런트엔드와 백엔드를 포트로 나눌 때 생기는 CORS 문제, HTTPS 부재가 그것입니다. 역방향 프록시는 중간에서 도메인과 경로 기준으로 트래픽을 나눠 줍니다. 추가 장점은 방화벽에서 22, 80, 443번 포트만 열면 된다는 점입니다.

실습 환경은 2 vCPU, 2GB RAM, 40GB NVMe의 VDS, Ubuntu 24.04, 공식 저장소에서 설치한 Docker입니다. docker network create proxy 명령으로 네트워크를 만들고, 데이터와 인증서 볼륨을 붙여 jc21/nginx-proxy-manager 컨테이너를 띄웁니다. 관리 화면의 81번 포트를 127.0.0.1에만 묶고 SSH 터널로 접속하는 방식이 마음에 들었습니다.

다음으로 프록시 호스트를 설정합니다. Forward Hostname에는 컨테이너 이름을 쓰고, SSL 인증서는 SSL 탭에서 연결합니다. 테스트에는 traefik/whoami를 씁니다. 애플리케이션이 호스트에서 직접 돌아가는 경우도 따로 다룹니다. Docker 네트워크의 게이트웨이 주소는 docker network inspect로 얻고, 프록시를 우회해 앱에 직접 접근할 수 없도록 방화벽을 설정합니다.

아쉬운 점도 있습니다. 예제에서 도메인이 섞여 있고, 이미지가 latest 태그라서 시간이 지나면 재현성이 떨어질 수 있습니다. 그래도 집이나 VDS에서 nginx 설정을 손으로 고치지 않고 여러 서비스를 운영하고 싶은 사람에게 좋은 출발점입니다.

출처: Habr (Selectel 블로그)

댓글 0

첫 댓글을 남겨 보세요. 어느 나라 말이든 괜찮아요.

로그인하고 댓글 남기기