SW 개발

홈서버 - nginx proxy manger 사용팁 모음

. . . 2022. 1. 11. 09:53
반응형

nginx proxy manger 설치

docker-compose 를 이용하여 쉽게 설치가 가능하다.

다음과 같이 docker-compose.yml 를 작성하고 docker-compose up -d 로 실행하자

version: '3'
services:
  nginx-proxy-d:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-d
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
networks:
    default:
      name: myserver-base-net
      driver: bridge

꼭 필요한과정은 network 설정을 이름을 지정해서 만들자. (필자는 myserver-base-net 란이름의 bridge 로만들었다.)

  • 네트워크이름을 지정해서 만들면 다른 docker 에서 위의 네트워크 브릿지에 접근네트워크를 만들수있으며, 컨테이너 이름으로 바로 네트워크 접근이 가능하다. (설정관련해서는 다시설명예정)

위와같이 설치할경우 81 번포트로 관리페이지에 접근하여 설정할수있다.

  • 초기 설정
    • Email: admin@example.com
    • Password: changeme

메인화면

SSL 인증서발급

ssl 인증서 자동발급

nginx proxy manger 는 ssl 인증서를 자동발급해준다.

add ssl certificate 버튼을 누른후 Let's Encrypt 를 눌러서 인증서를 자동발급받자. (필요한부분들을 적당히 채워넣는다.)

let's encrypt 설정화면

ssl 인증서발급문제 : iptime.org 발급불가

결론적으로 말하면 nginx proxy manager 에서 let's encrypt 를 통한 ssl 인증서는 iptime.org ddns 로는 자동발급 할수없다.

  • 구글검색해보면 여러가지 이유가 나온다.

iptime.org 말고 https://www.duckdns.org/ 을 이용하여 ssl 를 발급 받도록하자.

인터넷의 여러가지 ssl 인증서 발급과 관련한 포스팅이 많은데 nginx proxy manger 이용하면 그냥 한큐에 설정이 가능하다. 여러가지 기능이 부족할지는 모르겠지만 개인적인 용도에서는 충분한듯.

발급완료화면

정상적으로 발급이 완료되면 다음과같이 인증서를 확인할 수있다.

발급받은인증서

https 적용하기 (SSL 인증서 적용)

host 화면에서 SSL 탭을 선택하면 발급받은 위에서 발급받은 인증서 리스트가보인다.

인증서 적용

원하는인증서를 선택하면, 인증서적용이 완료된다.

Proxy host 설정

비전문가적인 입장에서보면 일종의 포트포워딩같은? 느낌이었다.

domain 의 하위 주소를 내가원하는 ip(혹은컨테이너)의 port 와 매핑을시켜주면 된다.

메인설정

일단 메인쪽은 웹서버용 도커를 하나띄우고, 해당도커를 연결해준다.

docker 환경을 이용한 custom location

다른 하위 docker 들은 다음과 같이 설정한다.

custom location 설정

  • location : 하위 주소 (mydomain.duckdns.org/phpmyadmin 으로 접속)
  • forward ip : 도커주소
  • forward port : 서비스 포트

위와같이 설정한다. 특정서비스에 따라서는 추가설정이 필요한경우도 있으며, 추가 룰은 따로 위와같이 작성해준다.

docker network 설정관련

nginx proxy manager 를 사용할경우 연결된 하위 ip 접근을 위해서 ip 번호를 직접작성해줘야한다. 하지만 docker 의경우 매번 ip확인을 하여 작성하는것이 번거롭기때문에 docker container 이름으로 작성하는것이 좋다.

이때 필요한것이 각 컨테이너의 네트워크를 하나로 묶는 것이 중요하다.

networks:
    default:
      name: myserver-base-net
      driver: bridge

위와같이 bridge 인터페이스를 하나 만든후에는 다른 컨테이너들에서는 다음과같이 join 시키면된다.

networks:
    default:
      name: myserver-base-net
      external: true

위와같이 작성할경우 이미 제작된 컨테이너는 myserver-base-net 인터페이스에 join 하게된다. 이후에 myserver-base-net 로 묶인 컨테이너들은 컨테이너의 이름으로 통신이 가능하다.

즉, 다음과 같이 통신이 가능하다.

ping phpmyadmin-d

관련 지식

docker network 설정만 적당히 한 후, Forward ip 부분에 docker container 이름만 작성하면 크게 문제될것이 없다. 또한 각 docker 에서는 대부분 reverse proxy 부분을 설정할수있도록 옵션을 따로 놔둔다.

nginx 를 직접설정할경우는 설정에 관련한 기반지식들이 많아야하지만 nginx proxy manger 를 사용할경우 몇번의 클릭으로 모든 설정이 가능하며 https, reverse proxy 설정을 직관적으로 쉽게 바로 적용가능하다.

반응형