Nginx Proxy Manager로 NAS 외부 접속 구성하기

Nginx Proxy Manager로 NAS 외부 접속 구성하는 방법을 정리합니다. Docker 실행부터 DNS 연결, 80·443 포트포워딩, Let’s Encrypt 인증서, Proxy Host 설정과 오류 확인까지 단계별로 안내합니다.

Reverse proxy h2g2bob

목차

리버스 프록시 구조와 전제조건

이 글은 NAS에 Docker와 Docker Compose가 설치되어 있고, 공유기에서 포트포워딩을 설정할 수 있다고 가정합니다. 저자의 NAS는 UGOS Pro 기반이며 Docker 작업 경로는 /volume2/docker/입니다.

리버스 프록시는 외부 요청을 내부 서비스로 전달하는 중계 서버입니다. 하나의 도메인으로 여러 NAS 서비스를 연결할 때 유용합니다. 예를 들어 cloud.example.com 요청은 NAS 내부의 파일 서비스로, automation.example.com 요청은 자동화 서비스로 전달하는 방식입니다.

Nginx Proxy Manager 실행

docker docker_desktop container nginx server interface search_bar sidebar dashboard port GENERIC 실물

이미지: Franco9400 / Wikimedia Commons · CC BY-SA 4.0

Nginx Proxy Manager는 웹 화면에서 도메인, 인증서, 전달 주소를 설정할 수 있는 Docker 애플리케이션입니다. 별도 디렉터리를 만들고 Compose 파일을 작성합니다.

mkdir -p /volume2/docker/nginx-proxy-manager
cd /volume2/docker/nginx-proxy-manager || exit
nano compose.yml
services:
  npm:
    image: jc21/nginx-proxy-manager:2.15.0
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
docker compose up -d
docker compose ps

관리 화면은 내부 네트워크에서 http://NAS_IP:81로 접속합니다. 81번 포트는 관리용이므로 공유기에서 외부로 열지 않습니다. 외부 서비스에는 80·443만 사용합니다.

DNS와 포트포워딩 설정

먼저 도메인 관리 화면에서 사용할 하위 도메인의 A 레코드를 현재 공인 IP로 연결합니다. 예를 들어 nas.example.com의 값이 공유기의 공인 IP를 가리켜야 합니다. 공인 IP가 바뀌는 인터넷 회선이라면 DDNS 또는 자동 DNS 갱신 기능이 필요합니다.

공유기 포트포워딩에는 외부 TCP 80을 NAS의 80번 포트로, 외부 TCP 443을 NAS의 443번 포트로 연결합니다. NAS의 내부 IP가 바뀌면 전달 대상이 사라지므로 DHCP 예약이나 고정 IP를 적용하는 편이 안전합니다.

Let’s Encrypt와 Proxy Host 설정

Forward proxy h2g2bob

이미지: H2g2bob / Wikimedia Commons · CC0

관리 화면에서 Proxy Hosts를 선택하고 Add Proxy Host를 누릅니다. Domain Names에는 DNS에 등록한 도메인을 입력합니다. Scheme은 내부 서비스가 HTTP라면 http를 선택하고, Forward Hostname/IP에는 NAS 내부 서비스 주소, Forward Port에는 해당 컨테이너나 서비스의 포트를 입력합니다.

SSL 탭에서 Request a new SSL Certificate를 선택하고 이메일과 약관 동의를 입력한 뒤 Force SSL을 켭니다. Let’s Encrypt 인증서는 도메인이 NAS를 가리키고 80번 포트로 인증 요청이 도달해야 발급됩니다. 설정 직후에는 먼저 HTTP 경로가 열리는지 확인합니다.

접속 오류 확인

80·443 포트가 NAS의 다른 웹 서비스에 이미 사용 중이면 컨테이너가 시작되지 않고 포트 바인딩 오류가 표시됩니다. docker compose logs npm으로 오류를 확인한 뒤 충돌하는 서비스의 포트를 변경하거나, Nginx Proxy Manager가 사용할 포트를 비워야 합니다.

DNS가 공인 IP를 가리키지 않거나 인터넷 회선이 CGNAT 환경이면 도메인이 내부 NAS까지 도달하지 않을 수 있습니다. 외부 모바일 네트워크에서 도메인을 테스트하고, DNS가 가리키는 공인 IP와 공유기의 WAN IP가 다르다면 DDNS 설정이나 CGNAT 여부를 확인하세요.

결론

Nginx Proxy Manager는 DNS, 80·443 포트포워딩, 인증서, Proxy Host를 순서대로 맞추면 NAS 서비스를 도메인과 HTTPS로 통합할 수 있습니다.

관련 글

이미지: H2g2bob / Wikimedia Commons · CC0