Nginx Proxy Manager
Nginx Proxy Manager는 Nginx
를 기반으로 하는 리버스 프록시 관리 도구에요.
이를 사용하면 복잡한 Nginx 의 사용법을 모르더라도 웹 페이지에서 대부분의 설정을 관리할 수 있게 돼요. 또한 다음 가이드에서 다룰 SSL
설정도 쉽게 할 수 있다는 장점이 있어요.
도메인 설정하기
graph TB;
root-domain["루트 도메인<br>tinyrack.net"]
wildcard-domain["와일드카드 도메인<br>*.tinyrack.net"]
router["공유기<br>공인 IP"]
server["서버"]
root-domain --> router;
wildcard-domain --> router;
router --> server;
리버스 프록시를 사용하려면 먼저 루트 도메인과 와일드카드(*) 도메인에 대한 요청을 모두 동일한 내 공인 IP로 전달해야 해요. 그래야 모든 도메인 요청을 리버스 프록시 서버가 받을 수 있게 되고 정상적으로 동작할 수 있어요.
DuckDNS
DuckDNS
를 사용하는 경우 별다른 설정이 필요하지 않아요. 만약 tinyrack.duckdns.org
와 같은 도메인을 사용하고 있다면 *.tinyrack.duckdns.org
형태의 도메인 요청도 자동으로 같은 IP 주소를 향하게 돼요.
Cloudflare
Cloudflare
나 다른 유료 도메인 서비스를 사용하고 있는 경우, 루트 도메인과 와일드카드(*) 도메인에 대한 DNS 정보를 모두 생성해야 해요.
설정이 완료된 모습은 위와 같아요. 레코드가 두개 생성되어 있어야 한다는 점을 기억해 주세요.
공유기 설정하기
graph TB;
internet["인터넷"]
subgraph router["공유기"];
router-80["80"];
router-443["443"];
end;
subgraph server["서버"];
server-80["80"];
server-443["443"];
end;
internet --> router-80;
internet --> router-443;
router-80 --> server-80;
router-443 --> server-443;
다음은 공유기 설정에서 80
번과 443
번 포트를 서버로 포워딩 해주세요. 이 방법을 잘 모르겠다면 먼저 포트 포워딩 가이드를 참고해 주세요. 네트워크를 그림으로 그렸을 때 위와 같은 구조를 가져야 해요.
iptime
공유기를 사용하는 경우 설정이 완료된 모습은 위와 같아요.
설치하기
설치 이전에 apt
로 nignx
를 설치하셨다면 다음의 명령어를 통해 반드시 제거해 주세요.
sudo apt remove nginx
만약 도커로 구동된 nginx
가 있다면 다음의 명령어를 참고해 컨테이너를 삭제해 주세요.
docker ps # 컨테이너 이름 확인
docker stop NGINX_컨테이너_이름
docker rm NGINX_컨테이너_이름
그리고 ufw
방화벽을 사용중이라면 다음의 명령어를 통해 80
, 81
, 443
포트의 접속을 허용해 주세요.
sudo ufw allow 80/tcp
sudo ufw allow 81/tcp
sudo ufw allow 443/tcp
이제 Nginx Proxy Manager
를 설치할 차례에요. 설치는 이전에 다뤘던 도커 컴포즈
를 통해 쉽게 할 수 있어요. 원하는 곳에 docker-compose.yml
파일을 생성 후 다음을 입력해 주세요.
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
network_mode: host
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
여기서 network_mode: host
는 컨테이너가 격리된 네트워크 환경을 가지지 않고 호스트의 네트워크 환경을 그대로 사용한다는 것을 의미해요. 그래서 포트 포워딩 없이도 호스트의 포트에서 동작할 수 있게 돼요.
작성을 완료하면 다음의 명령어를 통해 컨테이너를 배포해 주세요.
docker compose up -d
이후 브라우저를 열고 http://내_도메인
으로 접근해 보세요.
정상적으로 동작한다면 이와 같은 화면이 나타나요. 이번에는 연결한 다른 도메인으로도 접속을 시도해 보세요.
tinyrack.net
이라는 주소를 사용한다면 some-service.tinyrack.net
과 같은 도메인도 동일한 화면으로 접속할 수 있어야 해요. 잘 동작한다면 이제 nginx-proxy-manager
가 모든 도메인에 대한 요청을 처리할 수 있다는 의미에요.
이번에는 브라우저에서 http://서버의_사설_IP:81
주소로 접속해 보세요. 81
번 포트는 공유기에서 포트 포워딩 하지 않았기 때문에 사설 IP를 통해서만 접속할 수 있어요.
그러면 이번에는 nginx-proxy-manager
의 관리 화면으로 진입하게 돼요.
초기 계정의 이메일은 admin@example.com
이고 비밀번호는 changeme
에요. 이를 사용해 로그인 해 주세요.
최초 로그인 시 계정 정보를 변경하라는 안내가 나타나요. 원하는 이름과 이메일 주소를 입력해 주세요.
다음은 현재 비밀번호와 변경할 비밀번호를 차례로 입력한 후 Save
버튼을 눌러 주세요.
중간 점검
graph TB;
root-domain["루트 도메인<br>tinyrack.net"]
wildcard-domain["와일드카드 도메인<br>*.tinyrack.net"]
internet["인터넷"]
subgraph router["공유기"];
router-80["80"];
router-443["443"];
end;
subgraph server["서버"];
subgraph npm["Nginx Proxy Manager"];
server-80["80<br>웹 서버"];
server-443["443<br>웹 서버"];
server-81["81<br>관리 페이지"];
end;
end;
root-domain --> internet;
wildcard-domain --> internet;
internet --> router-80;
internet --> router-443;
router-80 --> server-80;
router-443 --> server-443;
지금까지 우리가 한 작업을 그림으로 그려보면 위와 같아요. 문제가 생긴 경우 현재 네트워크 구성을 그림으로 그려보며 어디에서 문제가 발생한 것인지 진단해야 해요.
관리 페이지는 공유기에서 포트 포워딩 되지 않았기 때문에 인터넷에서는 접속할 수 없는 상태에요. 보통 이러한 중요한 것들은 외부에 노출하지 않는 것이 보안상 권장돼요.
설정하기
도메인이 잘 동작한다면 이제 서비스를 연결해 볼 차례에요.
우선 할당할 서비스가 하나 필요하니 다음의 명령어를 통해 Memos
컨테이너를 실행해 주세요.
docker run \
-d \
--name memos \
-p 5230:5230 \
-v ~/.memos/:/var/opt/memos \
neosmemo/memos:stable
그런 다음 우선 브라우저에서 http://사설_IP:5230
으로 서비스에 잘 접속되는지 확인해 주세요.
잘 접속된다면 Nginx Proxy Manager
의 관리 콘솔에서 Hosts - Proxy Hosts
메뉴에 들어가 주세요.
이곳에서는 Nginx
로 네트워크 요청이 들어왔을 때, 어느 서버로 트래픽을 전달할 것인지 지정할 수 있어요.
오른쪽 상단의 Add Proxy Host
를 클릭해 주세요.
그리고 나온 팝업에서 다음의 사항을 참고해 입력해 주세요.
Domain Names
: 서비스에 할당하고 싶은 도메인 주소- 원하는 도메인 주소를 넣어 주세요.
Forward Hostname / IP
: 통신을 전달할 서비스의 주소127.0.0.1
을 입력해 주세요.
Schema
: 서비스가 사용하는 프로토콜Memos
는http
를 사용하니 이를 선택해 주세요.
Forward Port
: 통신을 전달할 서비스의 포트Memos
의 포트인 5230을 넣어주세요.
여기서 127.0.0.1
이란 주소는 컴퓨터 자신의 주소를 의미해요. Nginx Proxy Manager
와 Memos
가 한 컴퓨터에 같이 있기 때문에 자기 자신의 주소를 지정해야 해요.
입력을 완료했다면 Save
버튼을 눌러 주세요.
설정을 완료한 모습은 위와 같아요. 이제 할당한 도메인으로 접속해 보세요.
Memos
서비스로 잘 들어가 진다면 성공이에요!
축하드려요 이제 서브도메인으로 마음껏 여러 서비스를 배포할 수 있게 됐어요. 사용하고 있는 다른 서비스가 있다면 같은 방법으로 서브 도메인을 할당해 보세요.