서버/AWS (Amazon Web Services)

[AWS의 기본 08] EC2 인스턴스에 도메인 연결 (Route53)

날개 2014. 7. 29. 23:37

지난 회에서는 AWS의 Elastic IP(이하 EIP)를 통해 고정 IP 주소를 획득하는 방법을 알아 보았습니다.


그러나 실제로 숫자로 이루어진 IP 주소로 접속하는 사람은 거의 없을 것입니다.


대부분은 사람이 기억하기 쉽고, 또한 IP 주소가 바뀌더라도 매핑만 바꾸어 주어 접속할 수 있도록 도메인 이름을 사용할 것입니다.


이번 포스팅에서는 EC2 인스턴스에 본인 소유의 도메인을 연결해 봅니다.


미리 여기에 사용할 자신의 도메인은 가지고 있어야 한다는 점을 미리 알려 드립니다.




[8] EC2 인스턴스에 도메인 연결 (Route53)



AWS에서 도메인을 연결하기 위해 사용하는 도메인 설정 서비스는 Route 53 이라고 부릅니다. Route 53은 일반적인 도메인 설정에 더해서 편리한 기능들을 제공합니다.


일반적으로 웹서비스를 받을때 도메인 설정은 무료로 제공되지만, Route 53의 경우는 저렴하지만 유료 서비스라는 점을 기억해야 합니다. (조건에 따라 면제되기도 하는 것 같습니다.)


하지만, 여러가지 이유로 도메인 설정 서비스는 본인 서버를 제공하는 곳의 서비스를 받는게 유리합니다. 더군다나 AWS의 장점중 하나인 로드 밸런싱 서비스를 받기 위해서는 Route 53을 이용할 수 밖에 없는것 같습니다.


그럼 시작해 보겠습니다.


먼저 AWS 관리자 콘솔로 접속합니다.


'Route 53' 을 클릭합니다.

[Create Hosted Zone] 을 클릭합니다.

우측 호스트 존을 생성하는 부분에서 Domain Name에 본인 소유의 도메인(예를들어 example.com과 같은 형태)을 입력하고 [Create]를 클릭합니다.


Route 53이 도메인 이름을 근거로 호스트 존을 생성합니다.


호스트 존을 선택하고, [Go to Record Sets] 을 클릭합니다.

레코드 중에 NS 레코드가 보입니다. Value에 네임서버 리스트가 나와 있습니다. 클릭하면 우측에 Edit Recoed Set 영역에도 Value: 항목에 네임서버 리스트가 나타납니다.


이제 본인의 도메인을 등록한 서비스에 접속하여 네임서버를 위에 나열된 네임서버로 바꾸어 줍니다.


아래는 예를 들어 제가 사용하는 도메인 서비스 업체의 도메인 관리에서 네임서버를 바꾸는 과정을 예시로 보여줍니다. (따라서 본인이 사용하는 도메인 서비스 업체에 따라 다르게 나타납니다. 본인이 도메인 등록한 웹사이트에서 적절히 적용해 봅시다.)

<출처 : http://hosting.kr>

<출처 : http://hosting.kr>

<출처 : http://hosting.kr>

위와 같이 네임서버를 변경하였습니다.


다시 AWS의 Route 53 서비스로 돌아가서 A레코드를 설정하겠습니다.


다시 Route 53 입니다. 해당 호스트 존에서 Recoed를 추가 하겠습니다. [Create Record Set] 버튼을 클릭하고, 오른쪽 Create Record Set 영역을 채웁니다.

  • Name : 서브 도메인 네임을 입력합니다. 이번 예제에서는 루트 도메인을 사용하기 위해 비워 두겠습니다. 비우면 example.com 과 같은 형태로 접속하게 됩니다.
  • Type : A레코드를 생성하기 위해 'A - IPv5 address' 를 선택합니다.
  • Alias : 'No' 를 선택합니다.
  • TTL : 도메인 이름 캐싱 시간을 정합니다. 그대로 둡니다.
  • Value : 여기에 Elastic IP (고정IP)을 입력합니다.

[Create]를 클릭합니다.

A레코드가 추가 되었습니다. A레코드를 간단히 설명하면 도메인 이름을 IP 주소로 연결해 주는 것이라고 보면 이해가 쉽습니다.


이제 실제 웹브라우저에서 IP주소가 아닌 연결한 도메인 이름으로 접속해 봅니다. (주의 : 위 설정대로라면, 도메인이 example.com 이라면, example.com 으로 입력해야 합니다. www.example.com 과 같이 도메인 이름 앞에 서브도메인 이름을 입력하면, 아직 도메인 설정을 하지 않아서 접속이 되지 않습니다.)

드디어 도메인으로 연결이 되었습니다. 참고로, 도메인 설정(위에서는 A 레코드 설정)한 것이 반영되는데는 시간이 걸립니다. 바로는 적용이 안되기 때문에 바로 접속되지는 않을 겁니다.


제 경우 짧게는 10여분에서 길게는 20분 이상 걸리더군요.


이제는 서브 도메인을 설정해 보겠습니다.


위 예에서는 도메인이 example.com 이라면, example.com으로만 접속이 되고 www가 앞에 붙으면 접속이 되지 않습니다.


이번에는 www를 앞에 붙였을때 접속이 되도록 하겠는데, NGINX를 통해 example.com과는 다른 웹페이지를 보여지도록 해 보겠습니다. (아파치 웹서버의 가상호스트 기능과 같다고 보면 됩니다.)


먼저, Route 53화면에서 계속해서 레코드를 추가해 봅니다.


이번에는 CNAME 레코드를 추가해 보겠습니다. (A레코드를 입력해도 됩니다만 이번에는 CNAME을 사용하는 방법을 살펴봅니다.)


역시 이번에도 [Create Recoed Sets]를 클릭합니다.


  • Name : 이번에는 서브도메인명으로 'www'를 입력합니다.
  • Type : 'CNAME - Canonical name'을 선택합니다.
  • Value : 이번에는 IP가 아니라 A레코드에 사용한 루트 도메인 이름을 입력합니다. (예: example.com)
[Create]를 클릭합니다.

CNAME은 쉽게 이해하자면 도메인이름을 도메인이름으로 연결하는 것이라고 생각하면 되겠습니다. 예를 들어 www.example.com 을 example.com 으로 연결해주는것이죠.

이제 도메인 설정은 되었고, 실제 서버에서 작업을 해줘야겠죠?

먼저, '/var/www/www' 디렉터리를 만듭니다.

$ cd /
$ cd var
/var$ sudo mkdir www
/var$ cd www
/var/www$ sudo mkdir www
/var/www$ cd www
/var/www/www$

'/var/www/www' 디렉터리에 index.html 파일을 만듭니다. 내용은 아래와 같이 간단히 입력합니다.

준비 되었으면, 이제 NGINX를 설정합니다.


먼저 만일을 대비해 '/etc/nginx/'디렉터리의 nginx.conf 파일을 원본을 복사하여 사본을 만들어 둡니다.


 /etc/nginx$ sudo cp nginx.conf nginx.conf.ori


아파치 웹서버와 비슷한 방식으로 관리하기 위해 '/etc/nginx/' 하위 디렉터리로 'sites-enabled'디렉터리와 'sites-available' 디렉터리를 만듭니다.


 /etc/nginx$ sudo mkdir sites-enabled

 /etc/nginx$ sudo mkdir sites-available


이제 'nginx.conf' 파일을 열어 아래의 내용을 http 블럭 맨 아래 추가합니다.


include /etc/nginx/sites-enabled/*.conf;

이렇게 하면 조금 전에 만든 'sites-enabled' 디렉터리의 모든 .conf 파일들을 NGINX가 시작될 때 읽어들여 설정에 반영하게 됩니다.


이제 조금 전에 만든 'sites-available' 디렉터리에 'www' 서브 도메인을 연결할 서버 설정 파일을 만듭니다.


여기서는 example.conf 라는 파일로 만들었다고 가정합니다.


server {


    listen       80;

    server_name  www.example.com;


    #charset utf-8;


    #access_log  /var/log/nginx/log/www.example.access.log;


    location / {

        root   /var/www/www;

        index  index.html index.htm;

    }



    # redirect server error pages to the static page /50x.html

    #

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root   /usr/share/nginx/html;

    }

}

새로 만든 'example.conf' 파일을 'sites-enabled' 디렉터리에 심볼릭 링크를 만들어줍니다.


$ cd /etc/nginx/sites-enabled

/etc/nginx/sites-enabled$ sudo ln -s /etc/nginx/sites-avaliable/example.conf example.conf

이제 위 화면과 같이 NGINX의 설정을 재로딩 합니다.


$ sudo service nginx reload


이제 서브도메인을 포함한 도메인으로 웹브라우저로 접속해 봅니다.


예를 들어 'example.com'이 도메인이면, 주소창에 'www.example.com' 을 입력합니다.

새로 분기한 '/var/www/www/index.html' 파일이 잘 나오는걸 확인할 수 있습니다.


이번 포스팅은 여기까지 입니다.


다음 포스팅에서는 많이들 사용하는 node.js 앞에 NGINX가 프록시 역할을 하도록 설정해 보도록 하겠습니다.




(1) 이 포스팅은 2014.7.29 기준으로 작성되었습니다. 웹서비스는 서비스 제공 업체에 의해 언제든지 변경될 수 있습니다.

(2) 여기서 사용한 스크린 캡쳐 이미지들의 출처는 따로 표기되지 않으면, http://aws.amazon.com 웹사이트 입니다.

(3) 터미널 화면의 캡쳐 이미지와 웹 브라우저 접속의 예제는 글쓴이의 PC 화면 입니다.