서버 IP가 하나뿐인데 여러 개의 웹사이트를 운영하고 싶으신가요? 이 글에서는 가상 호스트(Virtual Host)의 개념과 Ubuntu Linux 환경에서 Apache를 이용해 가상 호스트를 설정하는 방법을 단계별로 자세히 설명합니다.
가상 호스트란 무엇인가?
하나의 IP 주소로 여러 웹사이트를 호스팅하는 방법은 크게 두 가지입니다. 첫 번째는 각 사이트를 서브도메인으로 구성하는 방식이고, 두 번째는 Apache의 가상 호스트 기능을 활용해 하나의 머신과 하나의 웹 서버에서 여러 도메인을 동시에 서비스하는 방식입니다.
실제로 대부분의 공유 호스팅 업체들이 바로 이 가상 호스트 방식을 사용하고 있습니다. 또한 가상 호스트는 로컬 개발 환경을 구축할 때도 매우 유용합니다. 예를 들어, 실제 도메인을 구매하지 않고도 개발용 테스트 도메인을 여러 개 만들어 로컬에서 사이트를 테스트할 수 있습니다.
실습 목표
이번 가이드에서는 로컬 머신에 두 개의 가상 호스트인 calvin.dev와 hobbes.dev를 설정해 보겠습니다. 두 사이트는 파일시스템의 서로 다른 위치를 가리키며, 각각 다른 콘텐츠를 제공하게 됩니다.
1단계: Apache 설치 및 확인
먼저 Apache와 관련 지원 패키지를 설치합니다. 터미널에서 아래 명령어를 실행하세요.
# sudo apt-get install apache2-utils apache2-common
이미 해당 패키지가 설치되어 있다면 시스템이 알려줄 것입니다. 설치가 완료되면 Apache가 정상적으로 작동하는지 확인합니다. 웹 브라우저를 열고 https://localhost에 접속했을 때 Apache 웹 서버가 실행 중이라는 안내 페이지가 보이면 성공입니다. 만약 페이지가 나타나지 않는다면, Apache 설치 관련 자료를 검색해 문제를 해결한 후 진행하세요.
2단계: 전체 작업 흐름 이해하기
가상 호스트 설정은 다음 순서로 진행됩니다.
1. Apache에 새로운 가상 호스트 두 개를 설정 파일로 등록합니다.
2. 각 가상 호스트의 문서 루트(DocumentRoot) 디렉터리를 생성합니다.
3. 시스템의 /etc/hosts 파일에 도메인 항목을 추가합니다.
4. 각 루트 디렉터리에 어떤 도메인인지 식별할 수 있는 간단한 테스트 파일을 만듭니다.
5. 마지막으로 브라우저에서 접속해 정상 작동 여부를 테스트합니다.
3단계: 가상 호스트 설정 파일 작성
웹 서버가 준비되었으면 이제 본격적인 설정에 들어갑니다. 선호하는 텍스트 편집기(vim 등)로 /etc/apache2/sites-available/vhosts.conf라는 새 파일을 생성하고 아래 내용을 입력합니다.
<VirtualHost *:80>
ServerName calvin.dev
ServerAlias www.calvin.dev
DocumentRoot /var/www/calvin.dev
</VirtualHost><VirtualHost *:80>
ServerName hobbes.dev
ServerAlias www.hobbes.dev
DocumentRoot /var/www/hobbes.dev
</VirtualHost>
파일을 저장합니다. 이 설정은 80번 포트로 들어오는 요청 중 calvin.dev와 hobbes.dev 도메인에 해당하는 요청을 각각 지정된 디렉터리로 연결하겠다는 의미입니다.
4단계: 문서 루트 디렉터리 생성
설정 파일에 명시된 두 개의 디렉터리를 생성합니다.
# sudo mkdir /var/www/calvin.dev
# sudo mkdir /var/www/hobbes.dev
5단계: hosts 파일에 도메인 등록
텍스트 편집기로 /etc/hosts 파일을 열고 맨 끝에 다음 두 줄을 추가합니다.
127.0.0.1 calvin.dev
127.0.0.1 hobbes.dev
이렇게 하면 브라우저에서 해당 도메인으로 접속할 때 로컬 머신(127.0.0.1)으로 연결됩니다.
6단계: 가상 호스트 설정 활성화
작성한 vhosts.conf 설정을 Apache에서 사용하도록 활성화합니다. sites-enabled 디렉터리로 이동해 심볼릭 링크를 생성합니다.
# sudo cd /etc/apache2/sites-enabled/
# ln -s ../sites-available/vhosts.conf
7단계: Apache 재시작 및 테스트 파일 생성
거의 다 왔습니다. 변경된 설정을 적용하기 위해 Apache를 재시작합니다.
# sudo /etc/init.d/apache2 restart
그다음 각 사이트를 구분할 수 있는 간단한 테스트 파일을 생성합니다.
# echo "Hi I'm Calvin" > /var/www/calvin.dev/index.html
# echo "Hi I'm Hobbes" > /var/www/hobbes.dev/index.html
8단계: 결과 확인
이제 마법 같은 순간입니다. 웹 브라우저를 열고 https://calvin.dev에 접속하면 "Hi I'm Calvin"이라는 메시지가, https://hobbes.dev에 접속하면 "Hi I'm Hobbes"라는 메시지가 표시되어야 합니다.
마무리 및 응용 팁
축하합니다! 이제 정상적으로 작동하는 가상 호스트 환경이 완성되었습니다. 같은 방식으로 원하는 만큼 가상 호스트를 계속 추가할 수 있습니다.
만약 로컬이 아닌 원격 서버에 적용하고 싶다면, vhosts.conf 파일의 *:80 부분을 해당 서버의 실제 IP 주소(예: 10.2.10.6:80)로 변경하면 됩니다. 이를 통해 하나의 서버에서 여러 도메인 기반 웹사이트를 효율적으로 운영할 수 있습니다.