단일 공용 IP 주소를 가진 서버가 있지만 여러 도메인 또는 서브 도메인을 호스팅해야하는 경우는 어떻게 해야 할까요? 이 시나리오는 초보자에게는 혼란스러울 수 있습니다. 하지만 걱정하지 마세요, 이 튜토리얼이 NGINX 서브 도메인과 여러 도메인을 제공하는 방법을 안내해 드릴 것입니다.
이 튜토리얼에서는 단일 IP 주소를 가진 한 서버에서 효과적으로 NGINX 서브 도메인 또는 여러 도메인을 제공하는 방법을 배우게 될 것입니다!
준비가 되었다면, 시작해 보시죠!
사전 요구 사항
이 튜토리얼은 실습 데모를 제공하지만 많은 사전 요구 사항은 필요하지 않으며, SSH가 활성화된 Ubuntu Server LTS 및 NGINX가 설치된 것으로 가정합니다. 이 튜토리얼의 데모는 Ubuntu Server LTS 20.04.1에서 이루어집니다.
DNS 레코드 설정
NGINX 서브 도메인 또는 여러 도메인을 제공하기 전에 DNS 제어판에서 A 레코드를 추가해야 합니다. A 레코드는 모든 도메인과 서브 도메인을 단일 IP 주소에 바인딩하고 가리켜 웹 브라우저가 웹사이트를 찾을 수 있게 합니다.
1. 좋아하는 웹 브라우저를 실행하고 DNS 제어 패널에 로그인하십시오.
2. 레코드 추가를 클릭하여 A 레코드를 추가하기 시작하십시오. 브라우저가 도메인 및 서브도메인의 DNS 설정을 구성할 페이지로 리디렉션됩니다.

이제 다음과 같이 DNS 설정을 구성하십시오:
유형 필드에서 A 레코드를 선택하십시오.
호스트 필드에는 @를 입력하고, 값 필드에는 서버 IP를 입력하십시오.
TTL 필드에서 원하는 값을 선택한 후, 설정을 저장하려면 확인 버튼을 클릭하십시오.
다른 서브도메인에 대해서도 동일한 과정을 반복하십시오.

최종 DNS 설정 페이지는 아래와 같습니다.

DNS 레코드 제어 패널의 기능과 디자인은 다를 수 있지만, 동일한 원칙이 적용됩니다.
NGINX 도메인 및 서브도메인을 위한 웹 디렉토리 설정
이제 도메인과 서브도메인에 대한 A 레코드를 추가했으므로, 웹 디렉토리를 설정하는 시간입니다. NGINX에는 기본 가상 호스트 파일이 함께 제공되며, /usr/share/nginx/html에 위치한 웹 디렉토리를 서비스하기 위해 구성되어 있습니다.
NGINX 기본 문서 루트(/var/www/html) 안에 각 도메인별로 별도의 웹 디렉토리를 만드십시오.
1. 먼저 터미널을 열고 아래 명령을 실행하여 각 도메인 및 서브도메인에 대한 웹 디렉토리를 생성합니다. 이렇게 하면 각 웹사이트의 파일이 분리되고 정리되며 격리됩니다.
2. 다음으로, chown
명령을 실행하여 첫 번째 단계에서 생성한 각 디렉토리의 소유권을 www-data
사용자와 그룹으로 재귀적으로 (-R
) 변경합니다. 이는 NGINX가 www-data 사용자로 실행되기 때문에 각 디렉토리의 소유권을 www-data 사용자와 그룹으로 변경하는 것입니다.
3. 선호하는 코드 편집기에서 index.html이라는 파일을 만들고, 아래 코드를 index.html 파일에 복사하여 붙여넣은 다음, 파일을 도메인의 기본 웹 디렉토리(/var/www/html/awstutorial.net)) 안에 저장합니다.
아래 HTML 코드는 index.html 파일을 웹 브라우저에서 열 때 “축하합니다! awstutorial.net 웹사이트가 작동 중입니다!”라는 메시지를 표시합니다.
4. 마지막으로, /var/www/html/web1.awstutorial.net 및 /var/www/html/web2.awstutorial.net 디렉토리에도 동일한 index.html을 생성합니다. 그러나 각 index.html의 코드에서 awstutorial.net
을 web1.awstutorial.net
및 web2.awstutorial.net
으로 대체합니다.
NGINX 도메인 및 서브도메인에 대한 가상 호스트 설정
이미 NGINX 웹 서버로 서비스할 도메인 및 서브도메인의 index.html 페이지가 있습니다. 다음 단계는 각 도메인을 위한 NGINX 가상 호스트 구성 파일을 생성하는 것입니다.
1. 선호하는 코드 편집기에서 awstutorial.net이라는 NGINX 가상 호스트 구성 파일을 만들고 해당 파일에 아래의 코드를 복사하여 붙여넣으세요. 파일을 /etc/nginx/sites-available/ 디렉토리에 저장하세요.
아래 코드는 사용자가 도메인에 액세스할 때 서버의 동작을 제어합니다.
2. 다음으로 다음 nginx
명령을 실행하여 NGINX 구성 파일에 구문 오류가 있는지 확인하세요(-t
).
NGINX 구성 파일에 구문 오류가 없는 경우 다음과 같은 출력이 표시됩니다.

3. 아래 명령을 실행하여 심볼릭 링크(ln -s
)를 /etc/nginx/sites-available에서 /etc/nginx/sites-enabled/ 디렉터리로 생성합니다. 이 명령은 awstutorial.net 가상 호스트 구성 파일을 활성화합니다.
sites-available 및 sites-enabled 형식은 NGINX Ubuntu 설치 내에서 표준입니다. 그러나 다른 배포판은 다른 표준을 사용할 수 있습니다.
4. NGINX 가상 호스트 구성 파일을 web1.awstutorial.net 및 web2.awstutorial.net로 이름 지정하려면 단계 1에서 3까지 반복하세요.
각 NGINX 가상 호스트 구성 파일에서 다음 줄을 변경하십시오:
root /var/www/html/awstutorial.net
라인을 각 서브도메인의 웹루트 디렉토리로 바꿉니다(root /var/www/html/web1.awstutorial.net
및root /var/www/html/web2.awstutorial.net
).server_name awstutorial.net
라인을 각 서브도메인의 이름으로 바꿉니다(server_name web1.awstutorial.net
및server_name web2.awstutorial.net
).
5. 이제 가상 호스트 구성 파일을 활성화하기 위해 단계 세에서 수행한 것과 동일한 방법으로 아래 sudo ln
명령을 실행합니다.
6. 아래 systemctl
명령을 실행하여 NGINX (restart nginx
) 서비스를 다시 시작하여 모든 구성 변경 사항을 적용합니다.
7. 마지막으로, 브라우저에서 도메인 및 서브도메인의 URL로 이동하여 웹 사이트가 정상적으로 작동하는지 테스트합니다.
도메인 및 서브도메인이 로드되면 아래와 같은 메시지가 표시됩니다.

NGINX 도메인 및 서브도메인에 HTTPS 설정하기
당신은 HTTP 프로토콜에서 NGINX 도메인 및 서브도메인을 성공적으로 설정하고 테스트했습니다. 그러나 도메인 및 서브도메인의 연결을 보안해야 합니다. 어떻게? Let’s Encrypt SSL과 같은 인증 기관에서 얻는 인증서로.
1. 먼저, 아래 명령을 실행하여 Certbot 소프트웨어 패키지를 설치합니다 (apt-get install certbot
). Certbot을 사용하여 도메인 및 서브도메인에 SSL 인증서를 다운로드할 수 있습니다.
2. 아래의 certbot
명령을 실행하여 도메인(-d awstutorial.net
)에 대한 SSL 인증서(certonly
)를 다운로드하십시오. 이때 약관에 동의합니다(--agree-tos
), 그리고 이메일 주소를 입력합니다(--email
).
이메일을 귀하의 이메일 주소로 대체하십시오.
3. 아래에 표시된대로 NGINX 웹 서버 플러그인 (nginx)을 선택하여 ACME CA와 인증합니다.

NGINX 웹 서버 플러그인을 선택한 후, 도메인(awstutorial.net)의 SSL 인증서 다운로드 진행 상황을 확인할 수 있습니다.
기본적으로, Let’s Encrypt의 SSL 인증서는 /etc/letsencrypt/live/ 디렉토리에 저장됩니다.

4. 나머지 서브도메인(web1.awstutorial.net
및 web2.awstutorial.net
)에 대한 SSL 인증서를 다운로드하려면 단계 2에서 한 것과 같이 각 명령을 실행하십시오.
5. 마지막으로, 아래의 ls
명령을 실행하여 이름에 awstutorial.net
이 포함된 /etc/letsencrypt/live/ 디렉토리에 있는 모든 SSL 인증서를 나열하십시오. 이렇게 하면 SSL 인증서가 존재하는지 확인할 수 있습니다.
아래에서 도메인 및 서브도메인에 대한 SSL 인증서를 확인할 수 있습니다.

NGINX 가상 호스트 구성을 SSL 인증서 사용으로 설정하기
현재 SSL 인증서를 사용할 수 있습니다. 그러나 도메인 및 서브도메인을 보안하는 데 사용하는 방법은 무엇인가요? NGINX 가상 호스트 구성 파일의 server
블록에서 인증서 경로를 정의합니다.
1. 선호하는 코드 편집기에서 /etc/nginx/sites-available/
디렉터리에있는 awstutorial.net NGINX 가상 호스트 구성 파일을 엽니다.
2. 파일의 내용을 아래 코드로 대체하고, 도메인의 SSL 인증서 경로 및 SSL 프로토콜을 정의합니다 (SSL 인증서 경로
아래).
3. 나머지 가상 호스트 구성 파일 (web1.awstutorial.net 및 web2.awstutorial.net)에 대해 동일한 프로세스(단계 1에서 2로)를 반복하세요. 그러나 SSL 인증서의 경로를 하위 도메인의 인증서 경로로 교체하십시오 (SSL 인증서의 경로
아래).
4. 이제 구성 변경 사항을 적용하려면 NGINX 서비스를 다시 시작하는 아래의 systemctl
명령을 다시 실행하십시오.
5. 마지막으로, 웹 브라우저에서 도메인 및 하위 도메인의 URL로 이동하십시오. 이번에는 HTTP 프로토콜 대신 HTTPS를 사용하여 작동 여부를 확인하십시오.
아래에서는 주소 표시 줄에 잠금 아이콘이 표시되는데, 이는 웹 사이트가 SSL 인증서로 안전하다는 것을 나타냅니다.

결론
이 자습서에서는 가상 호스트 구성 파일을 구성하여 NGINX 하위 도메인이나 여러 도메인을 제공하는 방법을 배웠습니다. 또한 가상 호스트 구성 파일에서 정의한 SSL 인증서로 도메인을 보안하는 방법에 대해 다뤄 보았습니다.
이제 왜 이 설정을 프로덕션 환경에서 사용하지 않으려고 합니까, 예를 들어 단일 서버에서 여러 앱을 호스팅하고 저렴한 웹 호스팅을 제공하려고 합니까?