Proxmox에 NPM(Nginx Proxy Manager) 및 SSL적용

2025. 6. 2. 17:14Proxmox

 

1. 사전준비

NPM(Nginx Proxy Manager)을 설치하기에 앞서 도메인 준비 및 리버스 프록시 서버(Reverse Proxy Server)의 개념에 대해서만 알고 넘어가자.

1.1 도메인(Domain) 준비

HTTPS의 SSL연결을 사용하려면 기본적으로 도메인을 필요로 한다.

본인의 도메인을 가지고 있는 경우가 아니라면 아래 링크를 통해 Duckdns라는 무료 도메인서비스를 이용하는 방법을 확인해 보자.

 

Duckdns 무료 도메인(DDNS) 연결

실제 도메인 연결은 국내외 수많은 호스팅 업체가 존재하며 도메인에 따라서 가격도 천차만별이다.물론 유료 호스팅을 사용하면 원하는 도메인을 설정할 수 있으며 당연히 안정성면에서도 뛰

lovelettee01.tistory.com

1.2 리버스 프록시서버(Reverse Proxy Server) 란?

리버스 프록시란? 간단하게 이야기하면 외부인터넷과 연결된 서버로서 모든 요청은 리버스 프록시 서버가 전달받으며 전달받은 정보를 기반으로 내부 네트워크(LAN)상에 존재하는 각각의 서버에 요청하고 응답받은 정보를 다시 클라이언트로 전달하는 중계서버 역할을 한다.

이러한 중계 역할에 NPM이 사용되며 우리가 원하는 기능을 해당 NPM을 통해 편하게 관리하게 되는 것이다.

 

자세한 프록시 서버의 개념에 대해서는 아래링크를 통해 알아보면 된다.

 

프록시 서버(Proxy Server) 개념 정리

1. 프록시 서버(Proxy Server)란?프록시(Proxy)는 '대리'라는 뜻 그대로 클라이언트(사용자)와 서버 사이에 존재하며 둘 사이의 통신의 요청과 응답을 대리하여 수행하는 역할로서 클라이언트와 서버

lovelettee01.tistory.com

2. NPM(Nginx Proxy Manager)이란?

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를 먼저 이야기하는 이유는 사용이 간단하기 때문에 추천하는 용도이긴 하다.

하지만 편한 만큼 실제 설치가 어떤 방식으로 진행되는지는 관심을 가지지 않는 경우 과정은 모르고 설치 시 문제가 발생할 경우 조치도 어렵기 때문에 혹여나 난 하나하나 설치해 보기를 원한다면 아래 링크를 통해 공식 설치 가이드를 통한 설치항목을 참고해 보는 것도 괜찮은 방법이다.

 

Nginx Prorxy Manager 차근차근 수동 설치하기(feat. Proxmox)

💡들어가며사실 NPM(Nginx Proxy Manager) 설치 방법은 이미 너무 다양하며 자동으로 간단하게 설치할 수 있는 스크립트 또한 존재하기 때문에 단순히 NPM만을 설치하려 한다면 굳이 수동으로 설치하

lovelettee01.tistory.com

3.1 Proxmox VE Helper-Scripts를 통한 설치

※ Proxmox VE Helper-Scripts란?(링크)

Proxmox의 사용자가 및 그에 따른 활용도가 늘어나는 만큼 각각의 설치항목을 간단하게 설치하여 사용하기 위하여 대단하신 분들이 만들어 공유하는 간편 설치(?) Github이 존재하는데 이곳에서 제공하는 명령어를 통해 간단하게 설치 가능하다.

해당 사이트는 직관적이라 따로 설명하지 않고 각자 필요에 따라 검색해서 설치하여 사용하면 된다.

3.1.1 사이트 접속 및 확인

VE Helper-Script 사이트에서 Nginx Proxy Manager를 검색해 보자.

접속 후 아래와 같이 기본적인 설명 및 설치방법 기타 설정 방법 등 정보를 확인할 수 있다.

Promox VE Helper-Scripts Nginx Proxy Manager

위 항목 중 빨간색으로 표시한 부분이 우리가 중요하게 확인해야 할 부분으로 설치 스크립트 및 설치 후 로그인 정보를 확인 가능하다.

그럼 설치를 시작해 보자!.

3.1.2 Script를 통한 NPM 설치

본인의 Proxmox Shell에 접속해서 아래 함수를 통해 설치를 진행해 보자.

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/nginxproxymanager.sh)"

Proxmox Shell에서 Script 실행

실행 후 아래와 같이 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 등 자동갱신도 지정할 수 있다. 이 부분은 너무 길어지는 관계로 패스....

인증서 발급 완료 및 갱신

🚨오류사항 발생 시 하단 더 보기 항목 확인

더보기

사실 인증서 발급단계에서의 에러는 너무 다양해서 다 확인할 수 없다.

필요에 따라 이 부분은 각자 확인을 해서 해결해야 할 부분으로 생각된다.

아래는 기본적인 버그에 해당하기 때문에 확인해서 실행해 보면 된다.

 

Duckdns Certbot 커멘드 에러 발생 시 

nginxproxymanager lxc 컨테이너에서 Console에 접속 후 아래 명령어 입력
python3 -m pip install certbot_dns_duckdns
SSL 인증서 발급시 오류

참고 링크 : nginx proxy manager에서 ssl 생성 시 오류

5.3 도메인연결 및 SSL 인증서 적용

진짜 길고 험난했던 과정의 마지막을 달려가고 있다.

이제 도메인을 연결하고 이전에 생성한 SSL인증서를 적용해 보자.

관리콘솔 > Hosts > Proxy Hosts > Add Proxy Host

새로운 Proxy Host정보 생성 및 SSL 적용

위와 같이 새로운 Proxy Host 정보를 생성해 보자.

여기가 내가 하려고 했던 Reverse Proxy 서버로서의 역할을 지정하는 것이다.

npm.lovelettee.duckdns.org 도메인 접속 시 내부의 NPM 웹관리 콘솔(81번 포트)로 연결하는 설정이다.

보통은 Details 부분의 정보만 입력하면 Reverse Proxy로서의 역할을 하는 것이며 SSL탭설정은 SSL적용 시에만 진행해 주면 된다.

등록 완료 후 도메인 영역을 클릭하면 짠!!~ 👏👏👏

드디어 도메인 연결 및 SSL적용이 완료되었다.

📌이제 Reverse Proxy를 통해 연결되기 때문에 포트포워딩으로 활성화했던 81번 포트는 필요가 없어진다. 
포트포워딩 설정에서 삭제해도 정상적으로 연결이 된다.
외부접속 포트인(80, 443)으로 NPM 접속 후 내부에서 다시 분배되는 것이다.

도메인에 SSL적용된 모습

6. 마치며

사실 Proxy Server를 설치한다는 것 자체가 네트워크(도메인, 방화벽, 포트포워딩등) 및 서버에 대한 여러 사전지식을 필요로 한다.

이것도 우선 적용한 것일 뿐 사실상 완벽하진 않다.

공유기에서 포트를 지정해 오픈해 주는 방식은 결국 한 포트에 한 가지 서비스만 연결될 뿐이다.

다음에는 Proxmox 서버를 통해 내부 사설네트워크(VPC)를 구성해 보자.