n8n 셀프 호스팅에 SSL 적용하기: Let’s Encrypt로 10분 만에 완료
n8n을 직접 서버에 설치하고 나면 마주치게 되는 문제 중 하나가 바로 ‘보안 연결(SSL)’입니다. n8n 워크플로우가 민감한 데이터를 다룰 가능성이 높기 때문에, HTTP 상태로 방치하면 브라우저의 ‘안전하지 않음’ 표시가 나타나거나, API 연동 과정에서 보안 인증 문제가 발생할 수 있습니다. 이 글에서는 Docker 기반 n8n 셀프 호스팅 환경에 Let’s Encrypt SSL을 적용하는 방법을 Nginx Proxy Manager(NPM) 중심으로 설명합니다. n8n 셀프 호스팅에 Let’s Encrypt SSL을 적용하는 과정은 충분히 준비된 환경이라면 10분 안팎으로 완료할 수 있습니다. 이미 Docker 환경에서 n8n을 운영 중이라면, 지금 바로 실전 가이드를 확인해 보세요.
– Docker 컨테이너에서 Nginx Proxy Manager(NPM)를 활용하는 것이 가장 간편하고 유지보수에 유리합니다.
– Let’s Encrypt 인증서는 무료이며, 90일마다 자동 갱신 설정이 필요합니다.
– 인증서 발급을 위해 도메인의 DNS 레코드를 먼저 서버 IP로 연결해야 합니다.
– NPM의 웹 UI를 이용하면 복잡한 명령어 없이 몇 번의 클릭만으로 SSL 적용이 가능합니다.
– 방화벽에서 80포트(HTTP)와 443포트(HTTPS)가 열려 있어야 인증서 발급이 정상 작동합니다.
왜 n8n에 SSL이 필수인가요?
n8n은 다양한 업무 자동화를 위해 이메일, 데이터베이스, API 등 여러 외부 서비스와 통신합니다. 이때 인증 토큰이나 비밀번호 같은 민감한 정보가 오갈 수 있으므로, 암호화되지 않은 HTTP 프로토콜을 사용하면 네트워크상에서 정보가 노출될 위험이 커집니다. 특히 셀프 호스팅 환경은 클라우드 서비스에서 기본으로 제공되는 보안망이 없을 수 있기 때문에, 서버 관리자의 역할이 중요합니다. SSL 인증서 적용은 단순한 기능 추가가 아니라, 시스템의 안전성을 보장하는 기본적인 방어막입니다.
SSL 적용 방법 비교: NPM vs certbot 명령어
n8n 셀프 호스팅에 SSL을 적용하는 방법은 크게 두 가지로 나뉩니다. 각각의 장단점을 비교해 보고, 자신의 환경에 맞는 방법을 선택하는 것이 중요합니다.
| 비교 항목 | Nginx Proxy Manager (NPM) | Certbot (CLI 명령어) |
|---|---|---|
| 난이도 | 매우 낮음 (웹 UI) | 보통 (터미널 명령어 숙지 필요) |
| 인증서 갱신 | 자동 (NPM이 내부적으로 처리) | 수동 설정 필요 (cron 등록) |
| 추가 리버스 프록시 설정 | 웹 UI에서 간편하게 관리 | Nginx 설정 파일 직접 편집 |
| 추천 대상 | Docker 환경에 익숙한 대부분의 사용자 | 특정 서버에 Nginx를 이미 직접 관리 중인 사용자 |
위 비교표를 기준으로, 대부분의 Docker 호스팅 환경에서는 Nginx Proxy Manager(NPM)를 사용하는 것이 더 효율적입니다. n8n 하나만 운영하더라도 중앙 집중식 웹 UI에서 리버스 프록시와 SSL 인증서를 관리할 수 있어 유지보수에 유리합니다.
n8n 셀프 호스팅 SSL 적용 실전 가이드
이제 NPM을 활용해 n8n에 SSL을 적용하는 단계를 설명합니다. 아래 과정은 Docker가 설치된 가상 서버에서 n8n이 실행 중이고, 사용할 도메인의 A 레코드를 서버 IP로 연결할 수 있는 상황을 기준으로 합니다.
Step 1. Nginx Proxy Manager 컨테이너 실행
NPM이 n8n 컨테이너를 인식하려면 두 컨테이너가 같은 Docker 네트워크에 있어야 합니다. 아래 명령어는 별도의 네트워크를 만들고 기존 n8n 컨테이너를 연결한 뒤, NPM을 같은 네트워크에서 실행하는 예시입니다. 이미 같은 네트워크에 있다면 network connect 명령은 생략해도 됩니다.
docker network create n8n_proxy
docker network connect n8n_proxy n8n
docker run -d --name npm --network n8n_proxy -p 80:80 -p 443:443 -p 81:81 -v npm_data:/data -v npm_letsencrypt:/etc/letsencrypt --restart=always jc21/nginx-proxy-manager:latest
설치가 완료되면 웹 브라우저에서 http://[서버 IP]:81로 접속합니다. 기본 관리자 계정은 [email protected] / changeme이며, 최초 로그인 후에는 반드시 비밀번호를 변경하세요. 또한 NPM 관리자 포트(81)는 외부에 항상 열어 두기보다, 특정 IP에서만 접근할 수 있도록 제한하는 것을 권장합니다.
Step 2. DNS 레코드 설정 및 Proxy Host 추가
SSL 인증서를 발급받으려면 도메인 주소가 필요합니다. 예를 들어 n8n.yourdomain.com을 사용한다면, 도메인 관리자 페이지에서 해당 도메인의 A 레코드를 서버 IP로 설정하세요. DNS 전파는 환경에 따라 수 분에서 수 시간이 걸릴 수 있으므로, 터미널에서 dig +short n8n.yourdomain.com을 실행해 서버 IP가 응답하는지 확인하면 좋습니다.
DNS 설정이 끝났다면 NPM 관리자 페이지에서 ‘Proxy Hosts’ 탭으로 이동한 뒤 ‘Add Proxy Host’를 클릭합니다.
- Domain Names: n8n.yourdomain.com
- Forward Hostname:
n8n(n8n 컨테이너 이름) - Forward Port:
5678(n8n 기본 포트) - Websockets Support: 활성화 (워크플로우 실행 중 실시간 통신을 위해 필요)
나머지 설정은 기본값으로 두고 저장합니다. 이제 n8n으로 들어오는 트래픽이 NPM을 통해 전달됩니다.
Step 3. Let’s Encrypt 인증서 발급 및 적용
생성한 Proxy Host의 ‘Edit’ 버튼을 클릭하고, ‘SSL’ 탭으로 이동합니다.
- SSL Certificate: “Request a new SSL Certificate” 선택
- Force SSL: 활성화 (HTTP 접속 시 HTTPS로 리다이렉트)
- HTTP/2 Support: 활성화 (성능 개선)
- Email Address for Let’s Encrypt: 인증서 만료 알림을 받을 이메일 주소 입력
- Agree to the Let’s Encrypt Terms of Service: 체크
설정을 저장하면 잠시 후 인증서가 발급됩니다. Let’s Encrypt 인증서는 90일마다 만료되지만, NPM이 자동 갱신을 처리하므로 만료가 임박했을 때 별도로 명령을 실행할 필요는 없습니다. 다만 NPM이 정상적으로 갱신하고 있는지 가끔 확인하는 것을 권장합니다.
Step 4. n8n 접속 및 최종 확인
모든 설정을 마쳤다면 브라우저에서 https://n8n.yourdomain.com으로 접속해 봅니다. 주소창에 자물쇠 아이콘과 안전한 연결 표시가 나타나면 SSL 적용이 완료된 것입니다. 이제 n8n을 통해 외부 서비스와 주고받는 데이터가 암호화되어, HTTP를 사용할 때보다 안전한 운영 환경이 마련됩니다.
⚡ 안정적인 셀프 호스팅 서버 환경을 고려하고 계신가요?
Docker 기반 n8n을 운영할 때는 충분한 메모리와 SSD 성능이 중요합니다. 일부 클라우드 제공업체는 신규 사용자에게 크레딧을 제공하고 있어, 부담 없이 테스트해 볼 수 있습니다.
참고: 이 링크는 제휴 링크이며, 이용 시 운영에 도움이 될 수 있습니다.
SSL 적용 시 자주 발생하는 문제와 해결책
SSL 적용 과정은 대체로 매끄럽지만, 초보자라면 아래와 같은 문제를 만날 수 있습니다. 원인을 미리 파악해 두면 빠르게 대처할 수 있습니다.
- 인증서 발급 실패 (Invalid response from http://…): 도메인의 A 레코드가 서버 IP로 정확히 연결되지 않았거나 DNS 전파가 완료되지 않았을 때 흔히 발생합니다.
dig +short n8n.yourdomain.com으로 서버 IP가 반환되는지 확인하고, NPM 컨테이너가 80번 포트에서 응답할 수 있는 상태인지 점검하세요. - HTTP 접속은 되는데 HTTPS가 연결되지 않는 경우: NPM SSL 탭의 ‘Force SSL’이 활성화되어 있는지 확인하고, 443 포트가 방화벽에서 차단되지 않았는지 확인합니다. UFW를 사용한다면
sudo ufw allow 443/tcp명령어로 포트를 열 수 있습니다. - NPM 관리자 페이지(포트 81)에 접속되지 않는 경우: 서버 공급업체의 방화벽 정책에서 81 포트를 허용했는지 확인하세요. 일부 클라우드 환경은 기본 포트 외 접근을 차단하므로 보안 그룹 또는 방화벽 규칙을 함께 점검해야 합니다.
결론: 이제 안전한 n8n 운영을 시작하세요
Nginx Proxy Manager를 활용한 SSL 적용 방법은 Docker 환경에서 운영되는 n8n 셀프 호스팅에 비교적 안전하고 접근성이 높은 솔루션입니다. 복잡한 명령어를 직접 다루는 Certbot 방식과 달리, 웹 인터페이스에서 직관적으로 설정할 수 있고, 인증서 자동 갱신 기능도 포함되어 있어 장기적으로 안정적인 서비스 운영을 기대할 수 있습니다. 이제 n8n을 안심하고 업무에 활용하면서, 자동화 워크플로우 구축에 집중해 보세요. 이 글이 도움이 되었다면, n8n을 운영하는 동료에게도 공유해 주세요.
