너무나도 간단한 node.js+nginx에 ssl(let's Encrypt) https를 달아보자!!
일단 aws에 접속을 해서 ec2 인스턴스를 생성한다.
생성하는 방법은 너무나도 간단하기 때문에 설명은 skip.
sudo apt update
자 생성을 했으면
node와 npm을 설치한다.
//맞는 node js 버전을 설치를 한다. (최신 버전은 될 수 있으면 피한다. Use recommended version for most Users. Version 16 is the Recommended for most users at the moment.)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install nodejs
//버전 체크
node --version
그리고 git에 있는 작업하고 있는 repository를 clone
git clone yourWhateverTheProjectis.git
그리고 clone 한 repository에 cd를한다.
cd toYourProject
//npm 설치
npm i
//그리고 실행(whatever your start command. Start command 없으면 error남...)
npm start
//정상적으로 돌아가면
ctrl+c
그리고 PM2 process 메니저를 사용해서 서버를 계속 돌린다.
//pm2설치
sudo npm i pm2 -g
//설치 완료 후 (app.js 또는 시작하는 파일이름)
pm2 start app.js
//pm2의 다른 명령어
//현재 running하고 있는 명령어
pm2 show app
//status를 볼수 있는 명령어
pm2 status
//pm2 재시작
pm2 restart app
//pm2 정지
pm2 stop app
//pm2 로그
pm2 logs
//pm2 로그 삭제
pm2 flush
//ubuntu 접속시 reboot되는 명령어
pm2 startup ubuntu
//명령어에는 sudo 를 사용한다.
그다음 ufw firewall을 설정한다.
ufw: 우분투의 기본적인 방화벽.
//ufw 활용
sudo ufw enable
//ufw status 확인
sudo ufw status
//ufw ssh 허용(Port 22)
sudo ufw allow ssh
//ufw ssh http 허용(Port 80)
sudo ufw allow http
//ufw https 허용 (Port 44)
sudo ufw allow https
제일 중요!
Node.js의 버퍼 오버플로우 취약점을 예방하기 위해서는 nginx를 프록시 서버로 앞단에 놓고 Node.js를 뒤쪽에 놓아야 한다.
그래서 nginx 를 설치를 해보자!
sudo apt install nginx
//설치를 했으면 nginx directory로 이동
//vi || vim|| nano를 하던 상관없다. 개인적으로 nano를 사용하는것이 편한거 같다.
sudo nano /etc/nginx/sites-available/default
default폴더로 가면 지렁이같은 영어가 엄청써져 있다... 쫄지 말자
server_name 본이이구매한도메인 www.본인이구매한도메인
location / {
proxy_pass http://localhost:5000; #본인 설정한 localhost로 설정.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
그다음 설정을 완료 했으면 저장을 한다.
//nginx 설정한 것을 checking 한다
sudo nginx -t
//문제가 없으면
sudo service nginx restart
이렇게 하면 완료 했다. node.js의 버퍼 오버플로우의 취약점을 예방하기 위해 프록시 서버 변경.
마지막으로
udo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
sudo certbot --nginx -d 본인이구매한도메인 -d www.본인이구매한도메인
# 90일동안만 무료이니깐 만료되기 전에 연장을 해준다.
certbot renew --dry-run
그리고 aws 인스턴스 들어가서 443포트 추가
그리고 www.본인이구매한도메인 으로 접속하면 완료
안녕하세요! 글 잘 봤습니다. 노드나 ec2 모두 왕초보인데 http로 접속은 잘되는데 https는 위의 글을 빠짐없이 따라해도 안되네요. ㅜㅜ node 파일에서 http.createServer 이부분도 다 https로 바꿔주면 될까요.?? app.js 코드 참고 할 곳이 있을지요...