이전 포스팅 에 이어서 이번 포스팅에서는 Route53 을 이용해서 도메인을 생성하고 Nginx 를 이용해서 proxy 설정을 해보겠습니다.

Elastic IP

EC2 에서 Instance를 생성하면 Instance 마다 매핑되는 IP 주소가 있습니다. 생성된 Instance 에서 Public IP 를 확인하면 되는데, 이 것의 문제는 할당된 주소가 쉽게 바뀐다는 것입니다. Instace를 중지하거나 시작할 때마다 변경되어 개발할때 복잡해집니다.
이 때문에 Elastic IP 를 할당해 주어야 합니다.

image
EC2 에서 Elastic IP를 쉽게 생성할 수 있습니다. AWS에서는 Elastic IP는 계정 당 1개는 무료로 제공해 줍니다.
하지만 Elastic IP를 생성하고 이를 Instance에 연결하지 않고 방치하면 요금이 청구될 수 있습니다!

image
생성한 후에 자신의 instance에 연결해주면 완료입니다!

Route 53


image
AWS의 Route 53 에서 자신의 도메인을 쉽고 간단하게 생성할 수 있습니다. 물론 일정량의 금액을 매년 지불해야 합니다. 또한 도메인 별로 가격도 다릅니다!

image
도메인을 생성한 후에 record를 생성하여 방금 위에서 만든 Elastic IP를 연결해 주시면 됩니다.
여기서 record는 www.하나하고 기본적인 도메인 하나씩 만들어 주시면 됩니다
이후 다시 콘솔에 연결해서 다음 명령어로 실행해 보시면 도메인으로 사이트 접속이 가능해집니다.

$ python3 [파일 명]


하지만 아직 프록시 설정을 안했기 때문에 포트번호 (Flask 기준 :5000) 를 붙여주셔야 접속할 수 있습니다.
지금부터 Nginx 를 이용해서 프록시 설정을 해보겠습니다.

Nginx

Nginx 는 웹 서버 소프트웨어로 리버스 프록시 기능을 제공해 줍니다.
유저 -> Nginx -> 웹 서버 로 구성해서 사용자의 요청을 Nginx가 대신 웹서버로 전달해 줍니다

image
리버스 프록시를 설정해주면 포트번호를 숨길 수 있습니다.
어려워 보이지만 매우 간단합니다. 설치후에 파일만 수정해 주면 됩니다.
1. Nginx 설치

$ sudo apt install nginx


이후 마찬가지로 올바르게 설치되었는지 확인해줍니다.

$ nginx -version


2. Nginx 프록시 설정

$ cd /etc/nginx
$ ls


다음 명령어를 입력하여 설치된 Nginx 경로로 가서 파일 구성을 확인해 줍니다.

image
이중 저희는 sites-availabledefault 파일을 수정해줄겁니다.
Ubuntu 에서는 nano 명령어로 텍스트 파일을 편집할 수 있습니다. 여기서 다음 nano의 핵심 명령어를 기억해 줍시다.

Ctrl + O : 저장 (파일 명 수정으로 다른이름 저장 가능)
Ctrl + X : 나가기
이제 default파일에 들어가서 다음과 같이 안에 내용 모두 지우고 다음과 같이 입력해 줍니다.

server {
  listen 80;
  listen[::]:80;

  server_name ko-web.com www.ko-web.com;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://127.0.0.1:5000;
  }
}


다음을 입력한 후에 올바르게 입력했는지 확인해 줍니다.

$ sudo nginx -t


image
다음과 같이 출력되었다면 거의 다왔습니다. 다음 명령어를 입력해서 Nginx를 재시작 해줍니다.

$ sudo service nginx restart


이제 포트번호 없이 잘 접속되면 성공입니다!
하지만 아직 Https를 설정하지 않아 보안성 문제가 뜨고 있습니다. 이를 Ngix의 certbot으로 Https 인증서를 받아보겠습니다.

Certbot

웹에서 정보를 교환하기 위해 사용하는 프로토콜인 Http 는 암호화가 되지 않은 상태의 데이터가 전송되어 보안이 취약하다는 문제점이 있습니다. 반면에 Https 프로토콜은 SSL/TLS 를 사용해 데이터를 암호화 후 전송하기 때문에 이런 문제점을 해결해줍니다.
하지만 이 프로토콜을 사용하려면 SSL/TLS 인증서를 발급받아야 하는데 Let’s Encrypt 를 이용하면 무료로 발급받을 수 있습니다.
그리고 Certbot 이 인증서를 발급받기 위한 도구로 사용된다. 인증서는 도메인 소유자가 도메인 소유권을 증명하면 발급이 됩니다.

1. Certbot 설치

다음 명령어로 설치해줍니다.

$ sudo apt install certbot
$ sudo apt install python3-certbot-nginx


2. 인증서 발급

다음 명령어로 Nginx 플러그인으로 인증서를 생성합니다.

$ sudo cerbot --nginx -d [도메인 이름] -d www.[도메인 이름]


처음 등록을 하면 certbot이 이메일 주소를 입력하고 서비스 약관을 동의하는 것을 포함한 메세지가 뜹니다.
입력 후 다음과 같이 출력되면 완료입니다.

Congratulations! You have successfully enabled https://example.com and https://www.example.com 

-------------------------------------------------------------------------------------
IMPORTANT NOTES: 

Congratulations! Your certificate and chain have been saved at: 
/etc/letsencrypt/live/example.com/fullchain.pem 
Your key file has been saved at: 
/etc/letsencrypt/live/example.com//privkey.pem
Your cert will expire on 2024-11-02.


참고로 인증서는 90일 후에 만료되어 만료될 경우 재신청해야 합니다.

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


들어가서 확인해 보면 내부 파일이 바껴있는 것을 확인할 수 있습니다.
이렇게 Https 까지 완료되었습니다! 이렇게 저의 서버 구동은 완료가 되었습니다.
진행하면서 작성한 것이 아닌 완성한 후 리마인딩하면서 작성한 글이여서 빠진 부분이 있을 수 있습니다.
수정해야 하는 부분과 궁금한 점이 있다면 메일 보내주시면 감사하겠습니다!