NPM은 기본적으로 위에 이야기한 리버스프록시서버(Reverse Proxy Server)로서의 역할을 한다.
그럼 이것을 가지고 무엇을 할 수 있을까??
Nginx Proxy Manager
2.1 NPM 사용 목적 및 기능
Proxy Hosts : 서버로 들어온 요청을 특정 위치로 라우팅 한다
Redirection Hosts : 특정 도메인으로 접속된 요청을 다른 도메인으로 리다이렉션 시킨다.
Streams : Nginx의 새로운 기능인 Stream은 TCP/UDP 트래픽을 네트워크상의 다른 컴퓨터로 직접 전달해 준다.
404 Hosts : 페이지를 찾을 수 없을 때 연결페이지 설정한다.
SSL Certificates : Let`sEncrypt 기반 SSL 인증 설정을 관리한다.
위처럼 NPM을 사용하는 여러 가지 목적이 있겠지만 내가 현재 원하는 그림을 간단하게만 그려보면 아래와 같다.
각각의 도메인으로 호출을 하게 되면 해당서버로 접속을 할 수 있도록 하는 것이다.
이 보다 더 많은 기능들이 존재하지만 추후 알아보기로 하고 이제 설치부터 진행해 보자.
NPM을 이용한 서버 구상도
3. NPM 설치
사실 Nginx Proxy Manager에서 제공하는 공식 설치 방법(Setup Guide)이 있다. 하지만 Proxmox VE Helper-Scripts를 먼저 이야기하는 이유는 사용이 간단하기 때문에 추천하는 용도이긴 하다.
하지만 편한 만큼 실제 설치가 어떤 방식으로 진행되는지는 관심을 가지지 않는 경우 과정은 모르고 설치 시 문제가 발생할 경우 조치도 어렵기 때문에 혹여나 난 하나하나 설치해 보기를 원한다면 아래 링크를 통해 공식 설치 가이드를 통한 설치항목을 참고해 보는 것도 괜찮은 방법이다.
실행 후 아래와 같이 LXC를 설치할지 묻는 화면이 나오고 이어서 설정 부분이 나온다 본인이 원하는 설정이 있다면 수정하면 되며 기본적으로 Default Settings를 선택해 설치하면 되며 필요시 추후 변경도 가능하니 Ok를 선택해 설치를 진행해 보자.
Promox VE Helper-Scripts 를 통한 NPM 설치
‼️Proxmox에서 제공하는 쉘이 아닌 외부 SSH를 이용하여 접속한 경우 설치 시 아래와 같은 메시지를 볼 수 있다. Proxmox shell이 아닌 곳에서 설치할 경우 잠재적인 문제가 발생할 수 있다는 내용인데 혹시 모르니 Proxmox Shell을 이용하여 설치하는 것을 권장한다. 외부SSH를 이용한 설치시 확인 팝업
잠시 후 설치가 진행되고 설치 중간에 최신버전이 아닌 이전버전을 설치를 묻는 항목이 나오는데 각자 상황에 맞게 설치하면 된다.
최신 버전을 설치할 경우 'N'을 입력 후 진행하면 아래와 같이 설치가 완료된 항목이 나온다.
👏👏👏~ 이로서 설치가 끝이다 얼마나 간단하게 설치할 수 있는지는 별도로 이야기하지 않아도 될 것이다.
Script를 통한 NPM 설치 완료
설치가 완료되면 좌측에 101(nginxproxymanager) LXC컨테이너가 생성되며 자동실행 된다.
이후 하단의 접속 URL을 통해 접속하면 NPM관리 콘솔로 접근하지만 당장은 포트포워딩이나 각자의 상황에 따라 서버에 접속되지 않을 수 있다. 이 부분은 관리콘솔 접속 부분에서 별도로 설명하도록 한다.
4. WEB 관리 콘솔 접속
4.1 방화벽 오픈 및 포트 포워딩 설정
외부에서 NPM 관리 콘솔에 접속하기 위해서는 내부에 접근가능하도록 방화벽 및 포트 포워딩을 해줘야 한다.
아래는 ipTime을 기준으로 보면 접근 가능한 IP 및 포트를 오픈함으로써 외부에서도 접근가능하도록 지정한다.
각자의 네트워크 환경에 맞도록 구성해서 사용하도록 한다.
🚨필수 오픈 포트
80 / 443 (웹 서비스 포트 오픈)
81 (웹 관리 콘솔 포트 오픈) - [설정 후 삭제] 해당 포트는 Proxy Host 등록 전 확인용도로만 사용
IPTime 포트 포워딩 규칙 추가
4.2 관리 콘솔 접속 및 로그인
관리 콘솔 접속 URL을 통해 다음과 같은 로그인 화면을 볼 수 있으며 3.1.1 사이트정보에서 이야기한 기본 로그인 정보를 통해 로그인 가능하다.
You can use the following credentials to login to the Nginx Proxy Manager ct. Username: admin@example.com Password: changeme
NPM 로그인 및 Email, 패스워드 설정
로그인 이후에 초기에 본인이 추후 사용할 이메일 정보 및 패스워드를 지정하여 이후 로그인 시에는 본인이 지정한 이메일 및 패스워드를 통해 로그인하면 된다.
📌 로그인 정보는 Web 관리콘솔 > Users 항목을 통해 추후 변경도 가능하고 필요에 따라 사용자를 추가해서 사용도 가능하다.
5. 도메인 접속 및 SSL적용
NPM을 설치하고 외부에서 접속되도록 하였다면 이제 도메인을 연결하고 SSL을 통한 보안 작업까지 마무리해 보자!~
해당 항목은 1. 사전준비 부분에서 설명한 Duckdns를 통한 도메인 연결이 되었다는 가정하에 진행하였다.
5.1 도메인을 통한 접속
도메인이 정상적으로 연결이 되었다면 다음과 같이 도메인을 통해 접속을 해보면 접속페이지가 출력되며 로그인도 정상적으로 진행된다.
다만 아직 SSL이 적용되어 있지 않기 때문에 ⚠️안전하지 않음이 표시되는 것을 확인할 수 있다.
Duckdns 무료 도메인을 통한 NPM접속
5.2 SSL 인증서 발급(with. Let`s Encrypt)
SSL은 NPM에서 제공하는 기능을 통해 무료 Let`s Encrypt 인증서를 발급받는다.
관리콘솔 > SSL Certificates > Add SSL Certificate
Let`s Encrypt SSL인증서 등록
Add Let`s Encrypt Certificate 항목의 [*] 표시가 된 필수 입력사항( Use a DNS Challenge 토글 버튼을 활성화한 정보 포함)
Domain Names
인증서를 발급받으려는 도메인정보를 입력 (탭[\tab] 을 눌러 복수개 입력가능)
Email Address for Let`s Encrypt
본인의 이메일 정보를 입력
DNS Provider
본인의 DNS Provider정보 선택
Credentials File Content
각 DNS 별로 본인인증용 Token정보등등 필요정보를 입력해준다.
여기서는 DNS Provider는 DuckDns를 선택하고 your-duckdns-token 부분에 본인의 Duckdns Token정보를 입력해 준다.
Save를 클릭하면 잠시 후 다음과 같이 인증서가 발급된 것을 확인할 수 있다.
참고로 무료 인증서인 만큼 3개월의 만료주기가 주어진다. 만료되기 전에 우측의 ⁝ 부분을 클릭하여 Renew Now항목을 통해 3개월 단위 갱신이 가능하다.
인증서 갱신 부분은 서버에 Crontab 등 자동갱신도 지정할 수 있다. 이 부분은 너무 길어지는 관계로 패스....