본문 바로가기



02. nginx서브도메인 등록하고 여러개의 사이트 생성하기



지난 포스트 0.1에서 도메인과 IP를 연결하하고 우분투에서 SSL/TLS인증서를 발급받습니다.

이제 root와 별개로 서브사이트를 만들어 보겠습니다.

도메인이 mysite.kr이라고 가정하면 test.mysite.kr로 접속가능한 서브사이트를 세팅해 보도록 하겠습니다.

 

1. WWW접속 설정

www 서브도메인과 루트 도메인(www 없는 경우) 모두를 사용하려면, 가비아의 DNS 설정에서 두 개의 A 레코드를 추가하면 됩니다.

 

첫 번째 A 레코드:

  • 타입: A
  • 호스트명: @
  • IP주소: 177.177.777.777

두 번째 A 레코드:

  • 타입: A
  • 호스트명: www
  • IP주소: 177.177.777.777

이렇게 설정하면, http://www.test.kr와 test.kr 모두 우분투 서버의 IP 주소인 177.177.777.777로 연결됩니다. 

 

2. 서브도메인에 대한 인증서추가

 

기존에 발급받은 인증서를 사용하고 있으시다면, 추가로 서브 도메인에 대한 인증서를 발급받는 것은 상대적으로 간단합니다.
Certbot을 이용하여 test.alphonse.kr에 대한 인증서를 발급받는 명령어는 아래와 같습니다.

sudo certbot --nginx -d test.alphonse.kr

이 명령은 test.alphonse.kr에 대한 인증서를 발급받고, Nginx 설정을 자동으로 업데이트합니다. 인증서가 발급되면, fullchain.pem과 privkey.pem 파일이 /etc/letsencrypt/live/test.alphonse.kr/ 디렉터리에 생성됩니다.

이후 Nginx 설정에서 이 파일들을 참조하도록 설정해야 합니다.

ssl_certificate /etc/letsencrypt/live/test.alphonse.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/test.alphonse.kr/privkey.pem;

이렇게 설정한 후, Nginx를 재시작하면 SSL 인증서가 적용됩니다.

sudo service nginx restart

인증서는 90일마다 갱신해야 하는데, 이 갱신 작업은 Certbot이 자동으로 수행해줍니다. 따라서 별도로 작업을 수행하실 필요는 없습니다.

3. 디렉터리생성

디렉터리를 생성하고 처음으로 보여질 index.html파일을 생성합니다.

sudo mkdir /var/www/html/test

 

4. 설정파일 수정 

기존 root사이트 설정 하위에 sub사이트 test.alphonse.kr에 대한 설정을 추가합니다.

[ 설정파일생성 - 저장]
sudo vi /etc/nginx/sites-available/default

server {
    listen 80;
    server_name alphonse.kr www.alphonse.kr;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name alphonse.kr www.alphonse.kr;

    ssl_certificate /etc/letsencrypt/live/alphonse.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/alphonse.kr/privkey.pem;

    root /var/www/html/alphonse;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

server {
    listen 80;
    server_name test.alphonse.kr;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name test.alphonse.kr;

    ssl_certificate /etc/letsencrypt/live/test.alphonse.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test.alphonse.kr/privkey.pem;

    root /var/www/html/test;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

이 설정은 test.alphonse.kr 라는 도메인으로 접속하면 /var/www/html/test 디렉터리를 root로 설정하고, index.html 파일을 첫 페이지로 보여주게 합니다.

 

 

3. 마지막으로, Nginx를 재시작하여 변경사항을 적용합니다:

sudo service nginx restart

 

도메인 네임 시스템(DNS)의 변경은 즉시 일어나지 않습니다. 이는 DNS 서버 간에 정보를 전파하는 데 시간이 필요하기 때문입니다.

서브 도메인의 경우, 변경 사항이 전체 인터넷에 적용되는 데 일반적으로 24시간에서 최대 48시간이 소요될 수 있습니다. 이러한 시간을 'DNS 전파 시간'이라고 부르며, 이는 ISP, 지역, DNS 설정 등 여러 요인에 따라 달라질 수 있습니다.

따라서 test.site.kr 같은 서브 도메인을 설정한 후에는 최소 24시간 기다렸다가 도메인이 제대로 적용되었는지 확인하는 것이 좋습니다. 그러나 이 시간은 가이드라인일 뿐, 더 빠르게 적용되기도 하며, 더 오래 걸릴 수도 있습니다.

다만, 이 변경 사항이 적용되기를 기다리는 동안에도 웹사이트는 여전히 이전 DNS 설정을 사용하여 접근할 수 있습니다.