nginx + https 적용

broccoli·2021년 5월 14일
0

deployment

목록 보기
3/3
post-thumbnail

nginx를 앞에두고 next 웹서버를 뒤에두게끔 설정을 해보자.

  • 환경: ubuntu20.04

1. nginx 설치

sudo apt-get update
sudo apt-get install nginx
  • 설치후에 server_name을 등록해주자.
cd /

// 설정파일위치찾기
find . -name nginx.conf //./etc/nginx/nginx.conf

// nginx설정파일 위치로 이동
sudo vi /etc/nginx/nginx.conf
// /etc/nginx/nginx.conf
http {
...

  server {
    # 서버 도메인을 작성해주자. 그럼 let's encript가 알아서 해당 도메인을 찾아서 설정을 도와준다.
    server_name api.broccolidb.com; 
    
    # reverse proxy를 위한 설정. nginx의 root를 localhost:3065포트로 지정함.
    # proxy_redirect, proxy_set_header 의 대한 설정의 개념은 아직 잘 모르겠음. reverse proxy에는 proxy_pass만 있으면 됨.
    location / {
      proxy_set_header HOST $host;
      proxy_pass http://127.0.0.1:3065;
      proxy_redirect off;
    }
  }
}

2. let's encript

let's encript는 크롬브라우저에 등록된 기관인증서를 무료로 발금해준다.

아래 예제는 하나의 서버인스턴스에 하나의 웹서버로 하나의 인증서만 발급되면 된다는 상황임.
만약 하나의 서버인스턴스에 두개이상의 웹서버가 존재해서 두개이상의 인증서가 발급이 필요한 경우는 좀 다름.

* 인증서는 route53에서 txt레코드 설정이 필요하다고 함. 나중에 시도해보고 추가로 작성할 예정
일반적으로 certbot은 80포트를 통해서 인증서를 받지만 2번째 웹서버는 80번 포트로 받지 못하고 dns로 인증서를 받아야 한다.

* 도메인으로 인증서를 받으면, www.abc.com, api.abc.com ...등 모든 서브도메인도 다 인증서를 받은것이 됨.

2-1. 설치할 서버로 ssh접속을 한다.

2-2. snapd를 설치한다.

이곳에 가면 현재 접속한 서버가 snapd의 설치여부를 알 수 있는데, ubuntu20.04는 이미 설치가 되어있으므로 다음단계로 넘어간다.

  • 명령어로도 snapd의 설치여부를 확인할 수 있다.
dpkg --list | grep snapd

2-3. snapd 최신으로 업데이트

sudo snap install core; sudo snap refresh core

2-4. 이미 certbot-auto, certbot os packages가 있다면 삭제하기

과거에는 apt-get으로 certbot을 설치했기 때문에 이때 설치를 진행했다면 아래같은 명령어로 삭제한다.

// apt-get으로 설치시
sudo apt-get remove certbot, sudo dnf remove certbot
  • 만약 snapd로 설치한 certbot을 삭제하려한다면
// snap으로 설치시
sudo snap remove certbot

2-5. certbot 설치

//설치
sudo snap install --classic certbot

//설치 확인
snap list | grep certbot

2-6. certbot 링크만들기

sudo ln -s /snap/bin/certbot /usr/bin/certbot

link 가 걸린것을 확인 할 수 있다.

  • link 제거는 sudo rm /usr/bin/certbot

2-7. 인증서설치 및 구동 방식설정하기

nginx에 할것이기 때문에 예제대로 진행함

sudo certbot --nginx

  • 이메일을 적어주면 갱신시(3개월후)에 메일이 옴.

  • 진행 마지막 단계에 보면 https를 원하는 도메인이 자동으로 후보리스트에 올라온것을 확인 할 수 있는데 api.broccolidb.com 이것은 nginx.confserver_name을 등록해줬기 때문이다.

완료후에 다시 nginx.conf로 이동해보면 아래처럼 certbotnginx설정을 작성한것을 확인 할 수 있다. 띄어쓰기는 좀 안맞음;;

// /etc/nginx/nginx.conf
http {
...
    server {
      ...
      listen 443 ssl; # managed by Certbot
      ...
    }
    server {
      if ($host = api.broccolidb.com) {
       return 301 https://$host$request_uri;
      } # managed by Certbot
      server_name api.broccolidb.com;
      listen 80;
      return 404; # managed by Certbot
    }
}

2-8. 인증서 갱신

// /snap
certbot renew

참고링크

profile
🌃브로콜리한 개발자🌟

0개의 댓글