UnsplashSander Weeteling

Self-Hosted 프록시 관리자 NPM(Nginx Proxy Manager)을 Docker-compose로 설치하기

Web, 인터넷 2024년 1월 9일

개요

NPM(Nginx Proxy Manager)관련 글은 올렸는데 막상 NPM설치글을 안올렸다는 걸 깨닫고 올립니다. 도메인을 구매해서 소규모 서버를 운영하는 작은 기업이나 개인을 대상으로 하는 글입니다.

프록시 서버란?

프록시 서버란 클라이언트 요청을 받아 서버로 전달하는 중간 과정을 처리하는 중계 서버를 말합니다. 프록시 서버를 하드웨어로 사용하는 경우도 있지만 일반 사용자나 소규모 네트워크에서는 소프트웨어로 처리합니다.

포워드 프록시

💡
클라이언트→포워드 프록시→서버

포워드 프록시는 서버에게 클라이언트가 누군지 알 수 없도록 하는 용도로 사용할 수 있습니다. 보안뿐만 아니라 캐시나 분산서버같은 리소스 때문에 사용하기도 합니다.

그렇지만 어차피 전문가를 위한 글이 아니기에 개인 사용자의 용도에 맞게 쉽게 적자면 접근이 막혔거나 증거를 남기고 싶지 않을 때 쓰면 됩니다. 물론 어설프게 하면 접근도 안되고 증거도 여전히 남겠죠.

리버스 프록시

💡
서버 →리버스 프록시→클라이언트

리버스 프록시는 클라이언트에게 서버가 누군지(어디인지)알 수 없도록 할 수 있습니다. 포워드 프록시와 마찬가지로 리소스 때문에 사용하기도 합니다.

여기도 개인사용자의 용도에 맞게 쉽게 적어보면 홈서버에서 접속 주소가 123.123.123.123:8765이런식으로 안이쁘게 나오는 것을 a.bongbong.com 이런식으로 예쁘게 나오고 싶게 할 때 쓰면 됩니다.(물론 bongbong.com도메인은 구매해야 합니다.)

NPM(Nginx Proxy Manager)란?

NPM이란 리버스(Reverse Proxy)를 처리하는 소프트웨어 입니다. 포워드와 리버스 프록시 기능만 있는 간단한 소프트웨어고 설치방법과 사용방법이 쉽습니다. 더 기능이 많은 대체 소프트웨어는 SWAG, Traefik, Caddy 등이 있습니다. Nginx이라 써 있어서 'Nginx 서버를 이용해야만 하는건가?'라는 오해를 불러일으키기 쉬운데 호스트의 Nginx 서버 구동과는 아무런 상관이 없습니다.

Nginx Proxy Manager
Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let’s Encrypt

Nginx Proxy Manager 홈페이지

위에 언급한 소프트웨어가 기능은 더 많은데 갈아타기 귀찮아서 자세히 보지는 않았습니다. NPM에서 제공하는 리버스 프록시, 인증서 자동등록(와일드 카드 인증서도 가능) 등의 기능으로 충분하다고 느꼈습니다. 특히, SSL 인증서 발급, 관리 기능이 편하다고 생각합니다.

NPM(Nginx Proxy Manager)를 도커 컴포즈로 설치

저의 설치 환경은 오라클 클라우드 A1, 우분투 20.04 입니다. 도커, 도커컴포즈를 이용합니다.

Nginx Proxy Manager 폴더 및 도커 컴포즈 파일 생성

💡
저는 도커로 설치하는 소프트웨어는 모두 /home/docker안에서 관리합니다. 에디터는 nano를 사용합니다.
# root 사용자로 변경
sudo -i

# 도커 폴더내에 nginx-proxy-manager 폴더 생성
mkdir /home/docker/nginx-proxy-manager

# 생성한 폴더로 이동
cd /home/docker/nginx-proxy-manager

# docker-compose.yml 파일 생성
nano docker-compose.yml

Docker-compose.yml 파일의 내용

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Nginx Proxy Manager 실행

docker compose up -d

# 과거 버전의 도커를 사용중이라면
docker-compose up -d

기본 설정

NPM이 시작되었다면 ip:81로 관리자 화면에 접속할 수 있습니다. TCP 81 포트는 열려 있어야 합니다.

NPM 로그인
# 최초 접속 ID/PW
ID : admin@example.com
PW : changeme

NPM 최초 접속 아이디/패스워드

로그인하고 나면 이제 리버스 프록시와 포워드 설정을 할 수 있습니다.

NPM에 로그인하면 Proxy, Redirect를 설정할 수 있습니다.

81번 포트는 관리자 접속에 사용하고 80(http), 443(https)는 다른 소프트웨어들이 사용하게 됩니다. 따라서 80, 443 포트도 열려 있어야 합니다. (대부분 열려 있겠지만...)

NPM의 사용법은 간단한 편입니다. 도메인 연결과 인증서 등록은 다음에 작성하겠습니다.

태그

BoniK

협업, 작업의뢰, 레슨 및 기타 문의 : mail@bonik.me