DevOps/AWS

EC2에서 NginX로 https 적용해보기

2023. 3. 16. 23:19
목차
  1. 처음 할 일
  2. 필요한 패키지 설치하기
  3. 인증서 발급받기
  4. 인증서 사용하여 배포하기
728x90
반응형

항해 99 미니 프로젝트 진행 중 프런트 분들이 강의대로 하다 보니 versel이란 것을 사용하여 프런트 웹페이지 배포를 하셨는데 이게 하필 https만 지원하여 http로만 배포해 본 백엔드가 난처한 상황이 나오고, 결국 배포를 하지 못한 조가 나오는 참사가 벌어졌었다.. 이후 클론 프로젝트 진행하며 썼던 글을 다시 정리해보려고 한다.

(이전 글 보러가기)

 

처음 할 일

  • SSL 인증서를 무료로 발급해 주는 Let’s Encrypt를 사용할 계획
  • Let’s Encyrpt는 Certbot 사용을 권장
  • 시작하기 전에 ec2 인스턴스 보안탭에서 443번 포트를 IPv4로 열어 주어야 합니다.
  • 그리고 포트포워딩을 위해 아래 명령어를 먼저 입력 후 진행
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3000

맨 마지막에 들어가는 3000은 진행 중인 프로젝트의 포트번호를 넣어준다. (포트포워딩 알아보기)

 

필요한 패키지 설치하기

sudo apt-get update

sudo apt-get install software-properties-common

sudo add-apt-repository universe

sudo add-apt-repository ppa:certbot/certbot

sudo apt-get update

sudo apt-get install certbot

 

인증서 발급받기

sudo certbot certonly --manual -d '*.도메인주소' -d 도메인주소 --preferred-challenges dns

입력하고 나면 인증받을 이메일을 입력하라는 문구가 나오고, 입력하고나면 아래와 비슷한 화면이 나온다.

DNS인증하는 과정이므로 위에 쓰여있는 Press Enter to Continue는. DNS 인증 후 해준다.

 

필자는 가비아로 도메인을 등록하여 가비아로 설명한다.

마이 가비아 → 관리 → DNS정보 → 도메인 연결 → 설정 버튼을 누른 뒤 레코드 수정버튼 클릭

위와 같이 DNS 설정 완료 후 설정 시간을 조금 기다린 후 엔터를 눌러 진행합니다. (총 2회 진행)

/etc/letsencrypt/live/도메인주소/fullchain.pem
/etc/letsencrypt/live/도메인주소/privkey.pem
/etc/letsencrypt/live/도메인주소/cert.pem

정상적으로 발급이 완료되었다면 위 경로에 인증서가 생성됩니다.

 

인증서 사용하여 배포하기

const fs      = require('fs');
const HTTPS   = require('https');
const port    = 3000;

// 운영 환경일때만 적용
if(process.env.NODE_ENV == "production"){
  try {
    const option = {
      ca: fs.readFileSync('/etc/letsencrypt/live/{myurl}/fullchain.pem'),
      key: fs.readFileSync('/etc/letsencrypt/live/{myurl}/privkey.pem'),
      cert: fs.readFileSync('/etc/letsencrypt/live/{myurl}/cert.pem')
    };

    HTTPS.createServer(option, app).listen(port, () => {
      console.log('HTTPS 서버가 실행되었습니다. 포트 :: ' + port);
    });
  } catch (error) {
    console.log('HTTPS 서버가 실행되지 않습니다.');
    console.log(error);
  }
}else{
  app.listen(port, () => {
    console.log('HTTP 서버가 실행되었습니다. 포트 :: ' + port);
  });
}

키파일은 관리자 권한으로 되어있으므로 서버 실행 시 관리자 권한으로 실행시켜 준다.

sudo node app.js

 

728x90
반응형

'DevOps > AWS' 카테고리의 다른 글

AWS CodeDeploy를 Node.js환경에서 Github Actions에서 사용하기!  (0) 2023.03.18
How to Ubuntu Portforwarding ?  (0) 2023.03.16
AWS 배포하기  (0) 2022.10.01
  1. 처음 할 일
  2. 필요한 패키지 설치하기
  3. 인증서 발급받기
  4. 인증서 사용하여 배포하기
'DevOps/AWS' 카테고리의 다른 글
  • AWS CodeDeploy를 Node.js환경에서 Github Actions에서 사용하기!
  • How to Ubuntu Portforwarding ?
  • AWS 배포하기
JangKroed
JangKroed
JangKroed
JangKroed
JangKroed
전체
오늘
어제
  • FindAllPost() (139)
    • 항해99 (40)
      • TIL (19)
      • WIL (13)
      • 공부 (7)
    • 개발일지 (70)
      • 스파르타 게임개발 종합반 (1)
      • Error (5)
      • TIL (64)
    • Language (16)
      • Javascript (7)
      • Node.js (5)
      • TypeScript (0)
      • Nest.js (0)
      • Unity (4)
    • DataBase (3)
      • MySQL (2)
      • MongoDB (1)
    • DevOps (4)
      • AWS (4)
      • Docker (0)
    • Tools (5)
      • VScode (1)
      • Git (1)
      • libraries (3)
    • 끄적끄적 (1)
      • 메모 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

깃허브

공지사항

인기 글

태그

최근 댓글

최근 글

반응형
250x250
hELLO · Designed By 정상우.
JangKroed
EC2에서 NginX로 https 적용해보기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.