1. 개요
OMV5에 docker를 이용하여 NextCloud, WordPress, Transmission, LetsEncrypt 등 다양한 어플리케이션을 설치한 바 있다. 아래 그림은 docker에 설치된 컨테이너 리스트이다.
현재 상태를 그림으로 도식화해 보면 아래와 같다. 인터넷에 공유기가 연결되어 있고, 공유기 아래 OMV가 설치된 라즈베리파이 머신이 연결되어 있는 상태이다. 그리고, OMV안에 여러 컨테이너가 가상 내부 네트워크로 구성되어 연결되어 있다. 그리고 각각의 컨테이너에 접속하기 위한 포트는 OMV에 각기 다른 포트로 매핑(포트 포워딩) 되어 있는 상태이다.
현재 구조로도 각각의 어플리케이션에 접속하여 사용은 가능하지만 여러 문제점? 불편함?이 존재한다. 생각나는 불편함은 다음과 같다.
- 각 어플리케이션 접속시 각각의 프로토콜 및 포트를 설정하여 주어야 한다.
예를 들면 NextCloud에 접속하기 위해서는 https://접속IP:1443으로, Transmission에 접속하기 위해서는 http://접속IP:9091로 접속해야 한다. - 외부 네트워크에서 내부로 접속할 경우, 공유기에서 어플리케이션 별로 포트 포워딩 설정을 해 주어야 한다.
또한, 어플리케이션이 증가할때마다 이 작업이 추가된다. - SSL 인증서 적용을 위해서는 복잡한 수작업을 필요로 한다.
LetsEncrypt 컨테이너를 이용해 SSL 인증서를 발급 받았지만, NextCloud에 적용하기 위해서는 또다른 별도 설정이 필요하다.
이러한 불편함을 해소할 방법이 없는 것인가? NginX에서는 이런 상황 해결을 위해 Reverse Proxy라는 기능을 제공한다.
Reverse Proxy는 하나의 NginX 서버가 대표로 외부 접속을 보두 받아주고, 필요시 내부에 위치한 다른 서버에 접속에 그 결과를 응답해 주는 기능이다.
위 네트워크 구조에서 LetsEncrypt를 Reverse Proxy로 설정할 경우, 아래 그림처럼 구성할 수 있다.
이처럼 구성하면 LetsEncrypt에 설치된 SSL인증서로 대표 교신하므로, 다른 어플리케이션에서 SSL 설정을 별도로 해줄 필요가 없을뿐만 아니라, 어플리케이션별로 별도 접속 방법(프로토콜, 포트)을 고민하지 않아도 된다. 또한, 공유기 설정에서도 443 및 80 포트 정도만 포워딩해 주면 된다.
물론, 각각의 어플리케이션 접속을 구별해 주기 위해, 서버별 별도의 도메인(cloud.~~~~.com, wordpress.~~~~.com 등)을 부여하여야 한다.
2. NginX Reverse Proxy 설정
2-1. LetsEncrypt 기본 설정 살펴보기
만일 https://blog.codesarang.com/33에서 설명한 것처럼 LetsEncrypt 컨테이너를 설정해 줬다면, 아래처럼 윈도우즈 탐색기를 이용하여 LetsEncrypt 설정 폴더에 접근할 수 있을 것이다.
docker에서 letsencrypt SSL 인증서 발급받기
Let's Encrypt SSL 인증서를 발급받기 위해서 라즈베리파이 호스트 머신에 직접 certbot을 설치하고 수작업으로 인증서를 받을 수도 있다. 물론 certbot도 자동화된 도구이며, apt 명령으로 간단히 설치가
blog.codesarang.com
아래 "site-confs" 폴더에는 NginX 환경 설정 파일(default)이 저장되어 있고, "proxy-confs"에는 Reverse Proxy 설정 샘플 파일들이 저장되어 있다.
아래는 "site-confs" 폴더 아래 저장된 "default" 파일이다. 위쪽 설정을 살펴보면 80포트(http)로 접속할 경우 모두 https로 강제 리다이렉트 하도록 설정되어 있다.
또한, 아래쪽 설정 파일을 살펴보면 Reverse Proxy 설정을 로딩하기 위해 "/config/nginx/proxy-confs/*.subdomain.conf" 파일을 불러오도록 설정되어 있다. 즉, Reverse Proxy 설정 파일을 "proxy-confs" 폴더 아래 ".subdomain.conf" 확장자로 저장하면 된다는 의미이다.
2-2. Reverse Proxy 준비
이제, 자신이 보유하고 있는 도메인 관리 페이지에 접속하여 아래처럼 A레코드를 추가하도록 한다. 예를 들어 NextCloud 접속을 위한 cloud.~~~.com이라든지, Transmission 접속을 위한 down.~~~.com과 같이 말이다.
도메인 등록이 완료된 후 특정 도메인(여기서는 cloud.~~~.com)으로 접속하면 아래처럼 LetsEncrypt 컨테이너에 설정된 디폴트 웹 페이지로 접속된다.
2-3. Reverse Proxy 설정 및 적용하기
이제, "proxy-confs" 폴더에 아래 그림과 같은 파일을 생성하여 저장하도록 한다. 여러 샘플 파일(*.subdomain.conf.sample) 중에 아무거나 골라 아래 그림처럼 수정해 주면 된다. 여기서는 cloud.codesarang.com.subdomain.conf 로 저장하기는 했으나 다른 파일명이어도 상관 없다. 단지 확장자가 "subdomain.conf"로 끝나도록 저장해 줘야 적용이 되니 주의하도록 한다.
저장을 완료 하였으면, 다시 컨테이너 리스트로 가서 LetsEncrypt 컨테이너를 재시작 하도록 한다.
이제, 아래 도메인으로 재접속하면 아까와는 달리 NextCloud 로그인 화면에 접속된 것을 확인할 수 있다. 또한, SSL 인증 오류도 발생하지 않고 https로 정상 접속 되는 것을 확인할 수 있다.
아래는 Transmission 접속을 위한 설정 정보도 참고로 추가한다.
'라즈베리파이' 카테고리의 다른 글
OMV5(OpenMediaVault 5)에 워드프레스(WordPress) 설치하기 (0) | 2020.06.17 |
---|---|
OMV5에서 Portainer 최신 버전으로 업데이트 하기 (0) | 2020.06.17 |
NextCloud에서 Internal Server Error 발생시 해결 방법 (0) | 2020.06.09 |
docker에서 letsencrypt SSL 인증서 발급받기 (6) | 2020.06.04 |
NextCloud에서 untrusted domain 오류 발생시 해결 방법 (0) | 2020.06.02 |