본문 바로가기
Server

AWS 서버 구축하기(3) / Domain, HTTPS, Sub Domain, Redirection 적용

by 멍진 2022. 4. 21.

도메인 주소 연결하기

지금까지는 IP주소를 통해 접속했지만, 이제 도메인 주소를 구입한 후 연결해 줄 것이다.

가비아 라는 사이트에서 도메인을 구입했다.

.shop 도메인은 할인이 적용되어 550원에 구매할 수 있다. woodyserver.shop 으로 구매했다.

=> 구매할때 오타가 나서 woodysever가 되었다...... 어쩔수 없지 뭐

DNS정보의 관리 페이지에 들어가서 DNS 레코드를 추가해 주었다.

  • 타입: A (DNS의 레코드 중 하나로 웹서버의 IPv4의 주소를 매칭할 때 사용한다.)
  • 호스트: www
  • 값: 만든 AWS의 인스턴스 ip

 

설정 후, www.도메인 이름으로 접속을 해보니 내가 만든 서버가 잘 떴다😄

www.woodysever.shop
www.woodysever.shop/phpinfo.php
www.woodysever.shop/phpmyadmin/phpinfo.php


 

HTTPS 연결하기

지금까지 구축한 서버의 보안을 위해 Let's encrypt를 이용해 HTTPS를 적용 해 볼 것이다. 

  • HTTP 란?
    클라이언트와 서버 양쪽에서 통신할 수 있도록 하는 기본 통신 프로토콜이다. 앞서 인바운드 규칙 설정을 통해 HTTP 프로토콜의 포트인 80번 포트로 접속하도록 설정을 해놓았다. HTTP는 브라우저와 서버 사이에서 정보를 평문으로 전송하므로 정보가 전달되는 네트워크에서 전송되는 정보를 제 3자가 엿볼 수가 있다.
  • HTTPS 란?
    이처럼 제 3자가 엿보는 것을 예방하기 위해 클라이언트와 서버가 먼저 암호화 통신 채널을 설정한 다음 평문 HTTP 메시지를 전송함으로써 정보 유출을 막는 HTTPS가 등장했다. 암호화 채널은 SSL(TLS) 프로토콜을 사용해서 만든다.
  • Let's encrypt 란?
    Let's Encrypt는 무료의 TLS/SSL 인증서를 쉽게 가져오고 설치할 수 있는 방법을 제공하는 CA(인증 기관)으로, 웹 서버에서 암호화된 HTTPS를 무료로 이용할 수 있다. 이러한 방법은 사용자에게 Certbot라는 소프트웨어를 제공함으로써 구현한다.

certbot 설치

$ sudo apt update
$ sudo apt upgrade
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt install python3-certbot-nginx

Let's encrypt에서 제공하는 certbot을 설치 하였다.

먼저, certbot 설치를 위한 저장소를 추가하고 그 다음 python3로 설치를 진행해주었다. 

$ sudo vi /etc/nginx/sites-available/default

HTTPS를 적용 할 도메인 설정

nginx 기본 설정 파일에 들어가서 server_name 옆에  https를 적용하고 싶은 도메인을 적어주었다.

$ sudo service nginx restart
$ sudo ufw status

변경사항을 적용해주기 위해 nginx를 재시작 한다.

HTTPS 적용을 할때는 Ubuntu의 방화벽인 ufw에서 https 허용 설정을 해주어야 하는데, 내가 만든 aws서버는 ufw 방화벽이 비활성화 상태이기 때문에 따로 해주지 않아도 된다.

이전과 마찬가지로 HTTPS도 인스턴스에 보안규칙을 추가해주어서 https 443포트를 허용해 준다.

SSL 인증서

원하는 도메인을 지정해서 nginx플러그인을 통해 SSL 인증서를 취득 할 것이다.

$ sudo certbot --nginx -d www.woodysever.shop

인증서 취득 과정에서 https redirect (http to https) 을 설정할 것이냐 물어보는 질문에서 2를 선택해주면 redirect가 적용된다.

ssl 인증서 발급 성공

https://www.woodysever.shop 으로 접속했을때, 주소 앞쪽에 자물쇠 모양으로 보안표시가 되어있는 것을 확인할 수 있다.

http to https redirection 옵션을 선택해 주었기 때문에 http://www.woodysever.shop 으로 접속해도, 자동으로 https로 변환되고 자물쇠도 표시된다.

 

ssltest사이트에 들어가서도 https 보안적용이 되었는지 확인해 볼 수 있다.

 


Sub Domain 적용하기

만든 도메인 앞에 dev, prod 두가지로 서브 도메인을 붙여보도록 하겠다.

서브 도메인이란?

주가 되는 도메인의 하위 도메인이다. 예를 들어 네이버 블로그에 접속하면 blog.naver.com, 네이버 검색엔진을 사용하면 search.naver.com 처럼 주 도메인 앞부분에 추가로 붙는 부속품이 되는 도메인을 말한다.

가비아 DNS 레코드 수정

먼저, 가비아 DNS 레코드에 CNAME 두가지를 추가해준다.

woodysever.shop.(도메인 뒤에 꼭 .을 붙여야한다!)

서브 도메인 정적파일 생성

/var/www/html 에 dev와 prod 이름으로 두가지 디렉토리를 만들어 주고, 각각 서브도메인에 보여질 index.html 파일을 작성해주었다.

Nginx 설정

/etc/nginx/sites-available 디렉토리로 들어가서 defaults 파일에 서브도메인 설정을 추가해주었다. 사실은 defauts 파일 말고 서브도메인 설정 파일을 따로 만들어주는 것이 더 좋다. 오류 수정을 하다가 다시 설정하게 돼서 일단 defaults 파일에 추가한 내용이다.

server {
	listen 80;
    listen [::]:80;	# 80번 포트의 요청을 받겠다
    
    root /var/www/html/화면에 보여줄 파일이 담긴 디렉토리;
    
    index 보여줄 파일 index.htm index.nginx-debian.html;
    server_name 사이트의 도메인 주소
    location / {
    	try_files $uri $uri/ =404;
    }
    return 301 https:// 도메인 주소$request_uri;  #https 리다이렉트

defaults에 추가하지 않고 따로 파일을 만들어 준다면 심볼릭 링크를 연결해주는 과정이 필요하다.

$ ln -s etc/nginx/sites-available/dev etc/nginx/sites-enabled
$ ln -s etc/nginx/sites-available/prod etc/nginx/sites-enabled

SSL 인증서 발급

$ sudo certbot --nginx -d dev.woodysever.shop
$ sudo certbot --nginx -d prod.woodysever.shop

도메인에서 해줬던 것처럼 리다이렉션 옵션을 선택해서 ssl 인증서까지 발급받고 나면, 아까 설정해줬던 파일에 자동으로 수정이 발생한다.

$ sudo service nginx restart

nginx를 재시작 하고 서브도메인으로 접속해보면!

내가 만들었던 index.html이 보여지는 것을 확인할 수 있다. https 리다이렉션까지 잘 적용돼서 자물쇠 표시가 뜬당🔒


IP to Domain Redirection 적용

주소창에 IP를 입력해도 Domain으로 자동 변경되도록 redirection을 적용해 보겠다.

설정파일에 다음과 같이 서버 코드블럭을 추가해주면, ip(3.38.58.170)로 접속해도 자동 Domain 변환 되는 것을 확인할 수 있다.


서브도메인 페이지 꾸미기

 

댓글