728x90

발단

이전에는 CloudFront를 사용하여 https 처리를 했다.

https://springdream0406.tistory.com/241

 

배포 cookie 문제

소셜 로그인을 위해, jwt로 만든 refreshToken을 cookie에 담아서 주고받는 기능이 있는 프로젝트를, Front는 Netlify에, Back은 AWS EC2에 배포를 했다.문제1. EC2 https처음 만난 문제는 Back인 EC2의 https 변경이

springdream0406.tistory.com

 

하지만, CloudFront를 사용할 경우 캐시문제로 인해 Swagger가 바로 반영되지 않아서 배포 후, 캐시를 지우는 작업이 추가되어야 했었다.

또한, EC2에 접속하기 위해 CloudFront를 거치게 되다보니 이게 이용량이 증가하게되면 그만큼 요금이 발생한다고 어디서 봤던 기억이 있다.

이러한 이유들과 더불어 Nginx로 쉽게 https 처리를 할 수 있다는걸 알게 되어서 이번 기회에 적용하게 되었다.


방법

우선 EC2에 접속한다.

- Nginx 설치

# 패키지 업데이트
sudo apt update

# Nginx 설치
sudo apt install nginx -y

# 만약 EC2에서 돌아가는 프로그램이 80 or 443 포트를 사용중이라면 프로그램을 중지하자.
# Nginx 시작 및 부팅 시 자동 실행 설정
sudo systemctl start nginx
sudo systemctl enable nginx

# Nginx 확인
# EC2의 퍼블릭 IP로 접속하여 Nginx 기본 페이지가 표시되는지 확인

 

- Https 설정

EC2의 보안 설정에서 인바운드의 https(443)를 열어주지 않았다면 열어주자

sudo nano /etc/nginx/sites-available/default

위 명령어로 nginx 설정 파일 열어 내용을 수정해준다.

 

server_name 에 도메인 주소를 넣어주고,

location

 proxy_pass http://localhost:3000; # 백엔드 주소

를 넣어주면 된다.

 

내용이 주석 포함해서 길게 달려있다보니 보기 불편하고 헷갈린다면 control + k 단축키로 한줄씩 빠르게 전부 삭제해주고, 아래의 코드를 넣어준다.

server {
    listen 80;
    server_name 도메인주소;

    location / {
        proxy_pass http://localhost:3000;
    }
}

위 코드에서 본인이 구매한 도메인 주소를 도메인주소 부분에 적어주고,
나는 nest를 3000번 포트로 돌렸기 때문에 location 부분에 http://localhost:3000 를 적어주었다.

control + o 하고 enter 해서 저장 후, control + x 로 나온다

# Nginx 설정 파일 테스트
sudo nginx -t

# Nginx 재시작
sudo systemctl reload nginx

이상 없나 테스트 해보고 재시작 해주자.

# Let's Encrypt를 사용하는 certbot 설치, 실행
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx

첫번째 질문은 email 설정을 하라는거다. 이메일 주소를 입력

두번째 질문은 약관 동의 이므로 y를 입력

세번째 질문은 Let's Encrypt와 Certbot을 개발한 비영리 단체인 **Electronic Frontier Foundation (EFF)**에서 사용자에게 이메일 주소를 공유할지 묻는 내용으로 n을 입력해도 상관없음

네번째 질문은 https 도메인 설정으로, 앞서 작성해놓은 도메인 주소가 목록에 뜨게 된다. 목록에 있는 도메인의 선택 번호인 1 을 입력

 

이렇게 하면 Encrypt를 사용한 https 처리가 끝난다.

앞서 80 or 443 포트를 사용해서 꺼둔게 있다면 nginx 설정에 적어두었던 포트번호에 맞게 변경해서 실행해주자.


참고 명령어들

# SSL 인증서 자동 갱신 테스트
sudo certbot renew --dry-run

# 자동 갱신 확인
# 다음 실행 시간, 타이머 이름, 관련 서비스
sudo systemctl list-timers | grep certbot


# Nginx 삭제
sudo apt remove --purge nginx -y
sudo rm -rf /etc/nginx

# certbot 삭제
sudo apt remove certbot python3-certbot-nginx -y
sudo rm -rf /etc/letsencrypt
sudo rm -rf /var/log/letsencrypt

 

+ Recent posts