본문 바로가기

리눅스, 시놀로지(NAS)

[시놀로지/리눅스_Nginx Proxy Manager] NPM 설치하기 및 역방향 프록시 설정 하기

안녕하세요
오늘은 어제 소개드린 Nginx Proxy Manager (이하 NPM)을 설치하는 방법과 Reverse Proxy(역방향 프록시)를 설정하는 방법을 포스팅하겠습니다.

1. NPM이란?

Nginx의 프록시 기능을 세팅할 수 있도록 도와주는 애플리케이션으로
별도의 웹서버 설치없이 사용할 수 있도록 도와준다

  • Tabler 기반으로 안전하게 관리해주는 인터페이스 제공
  • Nginx에 대해 전혀 몰라도 Forwarding Domains, Redirections, Streams, 404 hosts를 생성
  • Let's Encrypt를 사용한 무료 SSL 인증 또는 사용자 정의 SSL 인증서 제공
  • 호스트의 액세스 목록 및 기본 HTTP 인증
  • 고급 Nginx 구성

무슨 말인지 어려우시죠?
간단하게 설명드리면 웹 인터페이스를 통해서 본인의 도메인을 별도의 인증 절차 없이 SSL 인증을 해주고,
역방향 프록시를 통해서 포트 없이 도메인에 접속할 수 있도록 도와주는 기능을 제공합니다.
ex) 도메인.com:9999 --> subdoamin.도메인.com

2. NPM 도커 이미지 소개

1) jlesage/nginx-proxy-manager

  • 간단한 설치
  • mysql 내장으로 별도의 DB설치 필요 없음

2) jc21/nginx-proxy-manager

  • 별도의 DB 설치 필요
  • 상세 설정을 통한 커스텀 Nginx 설정 기능 제공

3. NPM 설치를 위한 Docker / Docker Compose 설치하기

1) docker 설치

## 도커 설치하기 curl -fsSL https://get.docker.com/ | sudo sh ## sudo 없이 사용하기 (현재 로그인한 사용자에게 권한 주기) sudo usermod -aG docker $USER ## sudo 없이 사용하기 (특정 사용자에게 권한 주기) sudo usermod -aG docker your-user ## 설치 확인 (정상) docker version Client: Version: 18.09.8 API version: 1.39 Go version: go1.11 Git commit: bfed4f5 Built: Fri Mar 13 06:46:11 2020 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.09.8 API version: 1.39 (minimum version 1.12) Go version: go1.11 Git commit: 3a371f3 Built: Fri Mar 13 06:44:35 2020 OS/Arch: linux/amd64 Experimental: false ## 설치 확인 (에러 발생) Error response from daemon: Bad response from Docker engine -> 이 경우 보통 sudo 를 입력 하지 않은 경우 발생합니다.
docker 버전 확인


2) docker-compose 설치

## Docker Compose 다운로드 sudo curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # https://github.com/docker/compose/releases 에서 다른 버전 다운로드 가능 ## Docker Compose가 위치한 경로에 실행 권한 추가 sudo chmod +x /usr/local/bin/docker-compose ## 설치 확인 docker-compose --version docker-compose version 1.24.0, build 0aa59064 ## Docker Compose 삭제 sudo rm /usr/local/bin/docker-compose
docker-compose 버전 확인

3. NPM 설치하기 (Docker / Docker Compose)

1) jlesage/nginx-proxy-manager

docker run -d \ --name=nginx-proxy-manager \ -p 81:8181 \ -p 80:8080 \ -p 443:4443 \ -v /docker/appdata/nginx-proxy-manager:/config:rw \ jlesage/nginx-proxy-manager

--name 컨테이너의 이름 (원하는 데로 설정 가능)
-p 내부포트:컨테이너포트 내부 포트는 본인이 원하는 데로 설정 가능
(ssh에서 "netstat -ntpl"로 검색 후 나오지 않는 포트 사용 가능)
-v /본인경로:/config:rw 본인 경로에 NPM이 설치됨 (우측의 /config:rw는 수정 X)

2) jc21/nginx-proxy-manager

## docker-compose 파일을 저장할 디렉토리 생성 mkdir -p /volume1/docker/config/npm ## 컨테이너 내부 경로와 매칭할 디레토리 생성 mkdir -p /volume1/docker/appdata/npm/data mkdir -p /volume1/docker/appdata/npm/letsencrypt mkdir -p /volume1/docker/appdata/npm/mysql ## config.json 작성 nano /volume1/docker/config/npm/config.json { "database": { "engine": "mysql", "host": "db", "name": "npm", "user": "npm", "password": "npm", "port": 3306 } } ## docker-compose.yml 작성 nano /volume1/docker/config/npm/docker-compose.yml version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: npm restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - /volume1/docker/config/npm/config.json:/app/config/production.json - /volume1/docker/appdata/npm/data:/data - /volume1/docker/appdata/npm/letsencrypt:/etc/letsencrypt db: image: 'jc21/mariadb-aria:10.4' container_name: npm_db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: 'npm' MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: 'npm' volumes: - /volume1/docker/appdata/npm/mysql:/var/lib/mysql ## docker-compose 컨테이너 생성 docker-compose up -d

jc21님의 이미지는 별도의 DB를 설치해 주어야 합니다.
물론 docker-compose 파일에 함께 설정해주어 한번에 설치가 되기 때문에 크게 신경 쓰실 필요는 없습니다.

NPM 접속 확인

"본인IP:80"로 접속하여 위와 같은 화면이 나오면 정상적으로 설치된 것입니다.

4. NPM 접속 및 설정하기

1) 최초 접속하기

npm 접속 화면

"본인아이피:81"로 접속하시면 위와 같은 화면이 나오는데,
아이디 : admin@example.com
비밀번호 : changeme

2) admin 계정 아이디 및 비밀번호 변경

"Email : 변경할 아이디 입력" 나머지는 설명 안 해도 아시겠죠?

3) 역방향 프록시 설정하기

Proxy Hosts 목록 보기 및 추가하기
신규 Proxy Host 추가


신규 Proxy Host 추가 (Details 탭 설정)

  • "Hosts -> Proxy Hosts -> Add Proxy Host"
  • Domain Names : 서브도메인.도메인.com
  • Scheme : http
  • Forward Hostname / IP : 내부IP
  • Forward Port : 내부포트
  • Cache Assets 선택
  • Block Common Exploits 선택
  • Websockets Support 선택

신규 Proxy Host 추가 (SSL 탭 설정)

  • Request a new SSL Certificate 선택
  • Force SSL 선택
  • HTTP/2 Support 선택
  • HSTS Enabled 선택

4) SSL 인증 기간 확인 및 자동 갱신 설정하기

여기서 EXPIRES의 기간이 가기 전에 반드시 SSL을 갱신해주어야 합니다.

  • 갱신 주기 : 90일 (만료 30일 이전부터 갱신 가능)

NPM의 단점? 인지 만약 갱신 기간을 놓쳐 버리면 DB가 꼬이면서 상당히 불편한 상황이 발생합니다.
(저도 최근에 한번 겪었죠 그 일로.... 하드까지 날려버리는 나비효과가..)


이상으로 NPM 설치하기 및 역방향 프록시 설정하는 방법에 대한 포스팅을 마치겠습니다.
내일은 NPM으로 설정한 Proxy Host의 SSL을 자동 갱신하는 방법에 대하여 포스팅하도록 하겠습니다.