Nginx Proxy Manager로 도메인 연결하기 — 내부 컨테이너 연결 실습
Nginx Proxy Manager(이하 NPM)을 설치하고 나면 가장 먼저 하게 되는 작업이 있다.
바로 도메인을 연결하고 트래픽을 내부 서비스로 전달하는 것이다.
이번 글에서는 실제로 Flask, Node.js, WordPress 같은 컨테이너를 NPM을 통해 연결하는 방법을 실습 중심으로 정리한다.
목차
Nginx Proxy Manager의 기본 구조 복습
NPM은 외부 요청을 받아 내부 컨테이너로 전달하는 리버스 프록시 서버다.
[사용자 브라우저] → [도메인] → [Nginx Proxy Manager] → [내부 컨테이너:포트]
즉, 외부에서 https://blog.example.com 으로 접속하면,
NPM이 내부 wordpress:8080 컨테이너로 트래픽을 전달한다.
1. Proxy Host 생성
NPM의 관리자 페이지(http://서버IP:81)에서 Proxy Hosts → Add Proxy Host 를 클릭한다.
입력 예시:
| 항목 | 값 |
|---|---|
| Domain Names | blog.example.com |
| Forward Hostname / IP | wordpress |
| Forward Port | 8080 |
| Block Common Exploits | ✅ |
| Websockets Support | ✅ (필요시) |
“Save”를 클릭하면 NPM은 자동으로 Nginx 설정파일을 생성하고 프록시 라우팅을 적용한다.
2. 내부 Docker 네트워크 확인
NPM과 연결할 서비스(예: WordPress)가 같은 Docker 네트워크에 있어야 한다.
docker network ls
nginx_default, bridge, 또는 internal 등 네트워크 이름을 확인하고
두 컨테이너가 같은 네트워크를 공유해야 한다.
만약 다르다면 다음 명령으로 연결 가능하다:
docker network connect internal nginxproxymanager
docker network connect internal wordpress
3. 포트 매핑 구조 확인
Compose를 사용할 경우 다음 구조로 포트 매핑한다.
services:
npm:
image: jc21/nginx-proxy-manager:latest
ports:
- "80:80"
- "81:81"
- "443:443"
networks:
- internal
wordpress:
image: wordpress:latest
expose:
- "8080"
networks:
- internal
networks:
internal:
driver: bridge
이렇게 하면 wordpress 컨테이너는 외부에서 직접 노출되지 않고
NPM이 대신 트래픽을 전달한다.
4. SSL 활성화 (선택)
SSL 탭에서 Request a new SSL Certificate → Let’s Encrypt 를 선택한다.
도메인에 DNS가 제대로 설정되어 있다면 자동 발급된다.
발급 실패 시는 아래 3편에서 다룬다.
5. 정상 동작 테스트
curl -I https://blog.example.com
응답에 200 OK 와 server: nginx 헤더가 보이면 성공이다.
브라우저에서 접속 시 내부 WordPress 컨테이너의 화면이 나타난다.
6. 요약
- Proxy Host를 이용해 도메인을 내부 컨테이너로 연결한다.
- 같은 Docker 네트워크를 사용하는 것이 핵심.
- SSL은 Let’s Encrypt 또는 Cloudflare Origin Cert로 적용 가능.