본문 바로가기
back-front end

Nginx를 이용한 https구현하기(aws ec2 - linux ubuntu-20.04 LTS) -2

by lucian 2022. 9. 17.

이 포스트는 이전 포스트를 이어서 쓴 글입니다.

https://lucian-blog.tistory.com/143

 

Nginx를 이용한 https구현하기(aws ec2 - linux ubuntu-20.04 LTS) -1

https는 http에 보안을 추가한 프로토콜이다. http + Secure = https라 한다. SSL/TLS로 4계층(Transfort)와 5계층(application) 사이에 보안 보안 소켓 계층으로 이 보안층의 SSL/TLS 프로토콜과 HTTP 프로토콜이..

lucian-blog.tistory.com

 

이제 NginX를 깔아본다.

먼저 root로 돌아온다.

cd /

 

다시한번 Nginx 설치하기 전에 서버의 패키지 목록을 업데이트한다.

sudo apt-get update

 

nginx깔기 ( y 키 입력하라고 뜨면 y 엔터~)

sudo apt-get install nginx

nginx설치되면 실행하여 확인할 수 있음

sudo systemctl start nginx
sudo systemctl status nginx

이렇게 active가 뜨면 잘 실행되고 있는 중

 

만약 중지하기 아래 코드를 넣으면 된다.(다시 킬 땐 start 로)

sudo systemctl stop nginx

근데 지금은 중지하기를 하지 않는다!

 

nginx 버전 확인해보자.

sudo dpkg -l nginx

나는 1.18.0 최신버전이다

 

nginx가 설치되었었고 실행되었으면 서버이름을 즉 도메인을 등록해줘야한다.
그래야지 도메인으로 접속할 때 nginx 프록시 서버로 접속이 되기 떄문이다.

nano or vim을 쓰면 되는데 vim은 눈아파서... nano가 훨씬 좋은 것 같다.(nano나 vim은 파일 수정할수 있는 명령어들)

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

ctrl+w 로 server_name을 검색.

server_name _;를

server_name 자신이 산 도메인 주소.com www.자신이 산 도메인 주소.com;

을 넣어준다.

입력을 했으면 ctrl+x 후에 y 엔터를 쳐서 빠져나온다.

잘들어가 있는지 한번더 확인하자.(스펠링한번 잘못쳤다가 30분을 허탕친다..)

 

 

이제 ec2의 방화벽에서 nginx 포트를 열어줘야한다.

방화벽을 활성화 시키고 총 3가지로 80, 443, 22번 포트를 열어줄 것이다.

// 방화벽 활성화 시작
sudo ufw enable
//ufw ssh http 허용(포트 80)
sudo ufw allow http

//ufw ssh https 허용(포트 443)
sudo ufw allow https

//ufw ssh 허용(포트 22)
sudo ufw allow ssh

방화벽 리로드 후 상태보기

sudo ufw reload
sudo ufw status

 

 

이제 진짜 거의 다끝났다.

한번 크롬창에 우리가 썼던 도메인 주소를 쓰거나 ec2의 퍼블릭IP를 주소창에 넣어보자!

당연히 포트번호는 빼고(도메인 주소는 한 10분정도 기달려줘야 뜬다! 가비아의 도메인 시스템과 로딩되는 시간인 듯 하다.)

이런 창이 나오면 잘 진행 중이다.

 

 

이제 인증서를 받을 차례이다.

let's encrypt라는 인증 기관에서 인증서를 받아오는데(무료)

certbot이란 let's Encrypt 인증서를 자동으로 발급 및 갱신 해주는 봇 프로그램을 설치해서 받을 것이다.

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python3-certbot-nginx // ubuntu 20버전부터 python3를 사용, linux 18버전은 기냥 python


// 1. email 입력 : 자신이 주로 쓰는 이메일 주소를 쓰면 된다.
// 2. 동의하기 : a
// 3. 동의하기 : y
// 4. 리다이렉트 설정 : 2 (추후에 수정을 위해 2를 눌러준다.)
sudo certbot --nginx -d 본인이구매한도메인 -d www.본인이구매한도메인

//예시 sudo certbot --nginx -d lch.online -d www.-d lch.online

 

결과 창인

IMPORTANT NOTES:

에서 Congratulations!가 나오면 성공적으로 인증서를 발급받은 것이다!

모자이크 된 부분은 나의 도메인 주소이다~

 

 

이제 인증서까지 받아왔다. fullchain.pem과 privkey.pem도 있고 https로 연결할 준비가 완료되었다.

그러나 아직 nginx서버와 우리의 메인서버는 이어주지 않았기에 /etc/nginx/sites-available/default에서 연결시켜줘야한다.

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

이전에 했던 것처럼 ctrl+w로 server_name을 검색한 후 밑에 있는 location에 추가해보자.

    location / {
        # 밑의 애들이 추가되어야한다.
        proxy_pass http://localhost:5000; #본인 설정한 localhost로 설정(난 5000번포트로했기에)
        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;
        # try_files $uri $uri/ =404;
    }

python3형식이라 주석은 #이다.

아까와 같이 ctrl + w 입력 후 y를 입력하면 나올 수 있다.

밑의 try_files는 주석처리 해주자.....

 

이제 설정되었으니 restart를 해줘야한다.

먼저 테스트를 해보자.

sudo nginx -t

결과로 test is succesful이 나오면 성공한 것이다.

그럼 이제 restart를 실행한다.

sudo service nginx restart

 

자 이렇게 프록시서버(NginX)에서 받아온 https를 암호화/복호화 과정을 거친후 localhost:5000 메인 서비스 서버에게 전달해준다. 

다시 한번 크롬창에서 우리의 도메인을 입력해보자.

짜잔 내 도메인 주소를 입력만 했을 뿐인데 https가 붙어있고 내 메인 서버와 연결되는 것을 볼 수 있다.

 

 

마지막으로 이 인증서의 유효기간은 90일이라 한다.

확인해보자.

sudo certbot certificates

12월 15일에 만료되는 것을 볼 수 있다.

그러나 certbot은 이 인증서 기간을 갱신 시켜 줄 수 있는데, 손수 갱신보단 crontab이라는 스케줄 관리 도구를 사용하여 매월 1일마다 자동으로 갱신시켜 줄 것이다.

 

sudo nano /etc/crontab

마지막 줄에 추가해줄 것이다.
0분 0시 1일 매월 매년 = 0 0 1 * * 갱신한다라는 뜻

0  0  1 * * root certbot -q renew --nginx >> /var/log/letscript.renewal.log 2>&1

그 후 crontab을 restart해주면 매월 1일 0시 0분에 자동으로 갱신시켜준다~

sudo service cron restart

 

댓글