Node.js 에서 NginX로 https 여는 방법

서수·2022년 12월 11일
1

NginX

목록 보기
1/1
post-thumbnail

NginX 구현 방법 소개

이번 시간에는 Node.js에서 https 로 배포하기 위해 NginX를 사용하는 방법을 설명하고자 합니다.
사용하는 건 AWS와 EC2와 GitBash, 도메인회사인 가비아를 사용하려 합니다.

구현 방법

일단 EC2로 가서 서버 인스턴스를 만들어 줍니다. AMI는 Ubuntu를 사용하고 20.04버전을 사용하겠습니다. 공짜로 사용을 하고 싶으면 프리티어 사용 가능 이라고 써져있는 것을 사용해야 일정기간동안 공짜로 사용 할 수 있습니다.

그리고 키페어를 생성해줍니다. 만약 원래 사용하던 것이 있다면 새로운 것을 사용해 줘야 혹시 모를 오류가 나지 않습니다. 나머지 설정은 만져줄 필요가 없고 이제 인스턴스 만들기를 클릭하면 대기중에서 실행중으로 바뀌며 실행하기 시작합니다.

이제 인스턴스에서 조금 내리면 보안 부분에 보안 그룹이 있는데 그것을 클릭 해 준 뒤,
인바운드 규칙을 설정하기 위해 인바운드 규칙 편집을 눌러서 들어가줍니다.

규칙 추가를 해 주면서 80포트와 443 포트를 열어줍니다. 나머지 3306과 27017은 나중에 사용할 수도 있는 MySQL나 Mongoose를 위해 열어준 것입니다. 혹시 다른 포트가 필요하다면 80과 443포트 외에 필요한 포트를 열어주면 됩니다. 소스는 Anywhere-IPv4로 열어주면 됩니다.

그리고 도메인이 있어야 합니다. 도메인에는 www도 같이 열어줘야 https를 사용할 수 있다. 도메인을 적용하는 데에는 시간이 오래 걸릴수 있으니 인스턴스를 만들어 준 즉시 연결시켜주는게 편합니다.

그리고 TTL은 1800으로 열어주고 저장을 해 줍니다.

이제 Git Bash를 열어줍니다. Git Bash에서 내가 산 서버 인스턴스(Linux)로 접속하려면 Ubuntu에서 줬던 퍼블릭 IPv4 주소와 키 페어가 필요합니다.


Git Bash 화면에서 ssh -i <키페어끌어다놓기> ubuntu@<내가 받은 IP 주소> 를 입력하고 엔터를 누르면 무엇인가를 물어보는데 yes를 적으면 접속이 가능해집니다.
이제 NginX를 사용하기 전에 비밀번호를 설정해 줍니다.

$ sudo passwd root

를 치면 비밀번호를 치라고 나오는데 비밀번호를 칠 때 칸이 안넘어가거나 보여지는 글자가 없는데 정상입니다. 다 치고 나면 확인란이 또 뜨는데 똑같이 치고 엔터를 누르면 비밀번호가 설정됩니다.

다음으론 Ubuntu 서버를 업그레이드 해 줍니다. 하기 전에 sudo -s를 상태창에 쳐줘야 관리자 모드를 들어갈 수 있고 설치를 할 수 있으니 까먹지 말고 쳐 줍니다. 만약 관리자 모드가 아니라면 거절 메시지가 뜰 수 있습니다.

$ apt-get upgrade
$ apt-get update

이 두개를 차례대로 치면 업데이트가 됩니다.
그리고 Node.js를 깔아줍니다.

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -  

를 쳐서 설치 한 뒤에

sudo apt-get install -y nodejs 

를 쳐서 Node.js를 깔아줍니다.

그럼 이렇게 성공적으로 깔리는 모습을 볼 수가 있습니다.

이제 본격적으로 NginX를 깔아줍니다.

$ sudo apt-get install nginx 

위에 명령어를 입력하면 NginX가 설치가 됩니다. 다 깔아 준 뒤에

$ systemctl status nginx

를 입력하면 상태 메세지 창이 나오게 됩니다.

이렇게 정상적으로 돌아가는 모습을 볼 수가 있습니다. 나중에 NginX에 문제가 생길 때도 이 상태메시지를 치면 어떤게 문제인지 알 수 있으니 참고하면 됩니다. 그리고 다른 명령어도 NginX가 제대로 돌아가는지 확인을 해줄수 있습니다.

sudo nginx -t

라는 명령어를 쳐보면

이렇게 메세지가 나오는데, 두 줄로 ok와 successful이 나옵니다. 하지만 어떠한 문제가 있을 땐 이 두줄 말고도 오류가 뜨는 부분이 같으니 나중에 문제가 생길 때 확인해 보면 됩니다.

이제 인터넷 창에 인스턴스의 IP주소 뒤에 :3000을 붙혀서 접속을 해보면 ex)172-31-xx-xxx:3000 이렇게 쓰면 Welcome to nginx 가 뜨게 됩니다.

이런 모습이 뜨면 제대로 돌아가고 있다는 뜻입니다. 이제 git bash로 돌아와서 제일 위에 경로로 나간 뒤

$ cd /etc/nginx/sites-available

를 치면 이 디렉토리로 이동하게 됩니다. 여기서

$ sudo vi [example]

를 치면 아무것도 없는 빈 화면이 나오게 되는데 여기서 키보드에 Ins 버튼을 누르고

이 내용을 입력하도록 합니다. 오타가 하나라도 있으면 돌아가지 않으니 주의해서 치도록 해줍니다.
server_name 에 붙는건 자신의 도메인을 넣으면 됩니다. 그리고 ctrl+c 를 누르면 작성이 멈추며 키보드에 : 를 치면 입력하는 칸이 뜨는데 wq 를 쓰고 엔터를 누르면 저장 후 나가게 됩니다.
그리고 Git Bash로 다시 돌아와서

sudo ln -s /etc/nginx/sites-available/[example] /etc/nginx/sites-enabled/

위의 명령어를 입력해줍니다.
그리고 경로가 sites-available 이라면 cd .. 을 여러번 쳐서 제일 바깥으로 나온 뒤

sudo snap install certbot --classic

를 쳐줘서 certbot 을 깔아줍니다.

이런 화면이 뜬다면 다 깔렸다는 뜻입니다.

sudo certbot --nginx 

이제 이 명령어를 입력하면 email을 치는 부분이 나옵니다. 그럼 이메일을 입력 해 준 뒤
아래처럼 문구가 뜨면 노란색 부분처럼 쳐주거나 선택을 해주면 됩니다.

root@ip-172-31-13-158:/# sudo certbot --nginx 

Saving debug log to /var/log/letsencrypt/letsencrypt.log 

Please enter the domain name(s) you would like on your certificate (comma and/or

space separated) (Enter 'c' to cancel): hi-prac.shop www.hi-prac.shop 

 

Certificate not yet due for renewal 

 

You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry. 

(ref: /etc/letsencrypt/renewal/hi-prac.shop.conf) 

 

What would you like to do? 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

1: Attempt to reinstall this existing certificate 

2: Renew & replace the certificate (may be subject to CA rate limits) 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1 

Deploying certificate 

Successfully deployed certificate for hi-prac.shop to /etc/nginx/sites-enabled/default 

Successfully deployed certificate for www.hi-prac.shop to /etc/nginx/sites-enabled/default 

Congratulations! You have successfully enabled HTTPS on https://hi-prac.shop and https://www.hi-prac.shop 

 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

If you like Certbot, please consider supporting our work by: 

 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate 

 * Donating to EFF:                    https://eff.org/donate-le 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

 

root@ip-172-31-13-158:/# 

만약 도메인중 고르는 화면이 나온다면 1 2 두개 다 쳐야 두개가 다 설정이 되니 두개 다 설정해주도록 합니다. 그리고

$ sudo service nginx restart

이 명령어를 실행시키고 nginx를 다시 실행시켜줍니다.
다시 실행시킨 뒤 도메인 주소를 브라우저에 입력 하면 502 Bad Gateway 가 뜹니다. 이럴 경우 제대로 작동이 되고 있는 것입니다. 이제 git clone을 해서 프로젝트를 받아주거나 filezilla 로 파일을 옮겨주면 제대로 작동하는 것을 확인 할 수 있습니다.

리눅스 명렁어
ls : 현재 위치에서 파일이 뭐가 있는지 보여줌
cd .. 상위 디렉토리로 이동
cd 디렉토리명 그 디렉토리로 이동
cd ~ 가장 상위 디렉토리로 이동
sudo -s 관리자 모드로 변경 ( root 뭐시기로 나옴 )
systemctl status nginx 리눅스 상태 메세지 보기
sudo nginx -t nginx 상태 보기
sudo service nginx start nginx 실행
systemctl stop nginx nginx 끄기
sudo service nginx restart 재실행

참고자료

https://velog.io/@yunjin5450/NginX-%EC%82%AC%EC%9A%A9%EB%B2%95

profile
패션디자인과 출신 비전공자가 개발자로 성장하려 만든 노트

0개의 댓글