이번엔 앞서 배포한 IP 주소에 가비아에서 구매한 도메인을 연결해 볼 차례다.
약간의 조사를 거친 결과, 도메인에 배포된 IP 주소를 연결하는 방법에는 크게 두가지가 있다.
나는 이미 aws EC2에 내 프로젝트를 배포해놓은 상태라 1번 방식을 채택하는게 더 간편할 것이라 판단되긴 했지만, 서브도메인 중 하나가 이미 프레이머로 배포된 서비스에 연결되어 있는 이슈로 인해 2번 방식을 채택하기로 했다.
sudo apt update
sudo apt install nginx
우선 각 앱(서비스)에 대한 서버 블록을 만들어주는데,
이를 위해 /etc/nginx/sites-available/
디렉토리에 설정 파일을 만든다.
sudo vi 파일명
파일을 생성하고, 생성한 파일에 다음의 내용을 입력해준다.
server {
listen 80;
listen [::]:80;
server_name 도메인;
location / {
proxy_pass http://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;
}
}
이때 도메인
과 포트번호
에 올바른 값을 기입하도록 유의해야 한다.
심볼릭 링크를 만들어 설정을 활성화한다.
쉽게 말해 /etc/nginx/sites-available
과 /etc/nginx/sites-enabled
를 연결시켜주는 작업이다.
sudo ln -s /etc/nginx/sites-available/파일명 /etc/nginx/sites-enabled/
Nginx 설정 테스트 및 재시작
sudo nginx -t
sudo systemctl restart nginx
도메인을 구매한 가비아의 DNS 관리 페이지에서, 설정하고자 하는 도메인을 EC2 인스턴스의 공인 IP로 설정해준다.
나는 무료 SSL 인증서를 위해 Let's Encrypt를 사용했다.
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d 도메인
위의 명령어는 인증서를 발급하고 Nginx 설정을 자동으로 수정하여 HTTPS를 활성화한다.
설정 후에는 Nginx 설정 확인 및 재시작한다.
sudo nginx -t
sudo systemctl restart nginx
여기까지 완료 했으면 이제 연결된 도메인으로 배포한 앱에 안전하게 접속할 수 있다.
EC2 보안 그룹에서 80번(HTTP)과 443번(HTTPS) 포트가 열려있는지 확인할 것
Let's Encrypt 인증서는 90일마다 갱신해야 하므로 자동 갱신을 위해 아래의 명령어로 cron job을 설정할 것
sudo certbot renew --dry-run