아파치 VirtualHost 설정은 AWS나 가상서버호스팅 같은 걸 쓰는 분들이 하나의 서버에 여러 개의 도메인 네임이나 서브 도메인을 넣고 싶을 때 쓰는 설정이다. 즉 abc.com이란 도메인과 bcd.co.kr이란 도메인을 하나의 서버에 넣고 싶다거나, 혹은 abc.com의 서브 도메인인 a.abc.com hello.abc.com 같은 도메인을 추가하고 싶은 사람들이 사용하는 것이다. 내게 관리자 권한이 있을 때만 쓸 수 있는 것(내가 서버를 운영할 때, 서버호스팅을 할 때, 혹은 AWS EC2같은 IaaS를 쓸 때 정도)이니 웹호스팅으로 작업하는 디자이너분들께는 쓸모가 없는 정보일지도 모르겠다.
만약 서버에 아파치를 설치했다면, 특히 우분투 같은 리눅스에 설치했다면 대체로 최상위 디렉토리인 / 아래 etc 아래 apache2라는 디렉토리 안에 설정파일들이 들어가게 된다. 즉 /etc/apache2 아래로 가면 설정 파일들이 들어가 있다. 또, 기본 사이트 디렉토리는 /var/www/html/ 아래에 설치되어 있는 게 보통이다. 이 디렉토리를 변경하고 싶다면 VirtualHost 설정과 함께 서버 디렉토리를 바꾸어 주는 게 보통이다. 자 일단 설정 파일이 있는 곳으로 이동해보자.
cd /etc/apache2
여기서 apache2.conf 를 열어보자. vi에디터로 열어보려고 한다. sudo는 관리자 권한으로 열어보겠다는 뜻이니 안열리면 root 권한이 없는 것이니 root 권한을 얻어오자.
sudo vi apache2.conf
뭔가 잔뜩 나올텐데, 화살표 아래키를 누르거나 page down 키를 눌러서 아래쪽을 살펴보자. putty같은 걸 쓴다면 코발트블루 파란색 글씨들은 주석이니 넘겨도 좋고, 그냥 terminal을 써서 열었다면 #으로 주석처리 된 내용을 스킵해가면서 설정내용을 보자. Timeout, KeepAlive 같은 게 나온다면 제대로 연 것이니 계속 내리면 된다. 쭉 내리다보면 Directory 태그가 나오는데, 그 안에 허가범위에 대한 내용이 들어있는 걸 볼 수 있다. 이 내용의 디렉토리 위치를 내가 원하는 디렉토리로 바꾸어 준다. 알파벳 i 키를 누르면 입력이 가능하고, esc키를 누르면 편집 기능을 꺼지고 보기만 가능해진다.
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
만약 내가 원하는 폴더가 /home/html/ 이다 싶으면 위의 빨간 글씨를 /home/html/로 바꿔주면 된다.
<Directory /home/html/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
이렇게 수정했다면 esc 키를 눌러 편집 기능을 멈추고,
:wq!
이렇게 타이핑 하고 엔터를 치면 저장 후 vi 에디터가 꺼진다. 여기까지 써 놓으니 이걸 왜 내가 튜토리얼처럼 작성하고 있나 싶다. 디자이너에게는 너무 어렵고, 개발자에게는 너무 쉬운 내용이라 이런 애매한 난이도로 작성해도 되나 싶다… 물론 다 내 맘이지만.
이제 다시 apache2 폴더로 가서 sites-enabled로 들어가보자.
cd /etc/apache2/sites-enabled/
여기에 있는 파일은 내 사이트의 위치를 정확히 지정하는 내용을 내포하고 있다. 가상 사이트를 여러 개 두고 싶다면 여기에 있는 내용을 교정하면 된다. 리스트를 보기 위해 ls를 누르고 엔터를 친다. 처음 만나는 파일은 000-default.conf 와 default-ssl.conf일텐데 ssl은 https 서버 디렉토리 위치 등을 담당하는 파일이니 아직은 건드릴 필요가 없고, 000-default.conf만 보면 된다.
sudo vi 000-default.conf
안에 내용이 제법 많을텐데 아래 내용만 기억하면 된다. 먼저 ServerAdmin은 서버의 관리자고, ServerName 은 내가 지정할 서버의 도메인네임이고, DocumentRoot은 내 서버의 디렉토리 위치를 의미한다. 그 아래 에러 로그는 딱히 신경쓰지 않아도 되고, 지워도 큰 문제는 없다.
<VirtualHost *:80>
ServerAdmin 이름@test.com
ServerName helloworld.com
DocumentRoot /home/html/www
ErrorLog “|/usr/bin/rotatelogs ${APACHE_LOG_DIR}/error.log.%Y-%m-%d_%H 3600 +540” # 매시간마다 에러로그파일을 변경
ErrorLog “|/usr/bin/rotatelogs ${APACHE_LOG_DIR}/access.log.%Y-%m-%d_%H 3600 +540” # 매시간마다 접근로그파일을 변경
</VirtualHost>
만약 내가 서버 안에 사이트를 세 개 운영하고 싶고, 해당 서버의 이름이 하나는 helloworld.com 다른 하나는 goodjob.co.kr, 마지막 하나는 blog.helloworld.com 이라고 치면, 다른 것들 다 지우고 이렇게만 써도 두개의 사이트를 운영할 수 있다. 아 물론 DocumentRoot은 각기 다른 위치를 지정해주어야 다른 디렉토리에 다른 사이트를 매핑할 수 있다.
<VirtualHost *:80>
ServerName helloworld.com
DocumentRoot /home/html/www
</VirtualHost>
<VirtualHost *:80>
ServerName blog.helloworld.com
DocumentRoot /home/html/blog
</VirtualHost>
<VirtualHost *:80>
ServerName goodjob.co.kr
DocumentRoot /home/html/goodjob
</VirtualHost>
자 이제 아파치를 재시동 하기 위해서 아래 코드를 쳐주면 끝.
systemctl restart apache2
아, 물론 위에 쓴 디렉토리가 없으면 에러나고, 호스팅 업체에서 제공하는 도메인네임서버를 도메인 산 곳에 등록하지 않아도 작동을 안한다. 이 이외의 에러가 난다면 본인의 팔자라 생각하고 웹 서버 운영은 관두기 바란다.