하나의 웹서버에서 2개 이상의 여러 개의 웹서버를 운영하는 것을 virtual host라고 합니다.
virtual
host는 복수의 홈페이지를 하나의 서버에서 운영하므로 서버의 비용절감에 큰 효과가 있습니다.
대부분의 호스팅업체에서
사용하는 각기 다른 회사의 홈페이지의 운영방법이라고 생각하시면
됩니다. virtual host는 컴퓨터만 한 대이지 ip와 domain도
다르기 때문에 외부에서는 같은
호스트에서 운영되는 사실을 알 수 없습니다. 호스팅업체에서 웹서버를 운영하는 방법에는
4가지가 있는데
다음과 같습니다.
분 류 |
설 명
|
Name Based Virtual host
|
도메인네임 기반 가상 호스트 |
IP Based Virtual host
|
IP 주소 기반 가상 호스트 |
Port Based Virtual
host |
포트 기반 가상 호스트 |
Default Virtual host
|
디폴트 가상호스트
| |
위에서 각각의 경우는
Name Base |
하나의 ip에 여러 개의 도메인을
부여하여 각각 다른 호스트로 운용 |
IP Base |
가상 호스트 각각에 다른 IP 주소를 부여해서 운용
|
Port Base |
하나의 동일한 호스트에 포트만 다르게 지정해서 운용
|
Default |
위의 세가지에 해당사항이 없는 경우 기본으로 응답하는 호스트
| |
3가지 중 가장 많이 쓰이는 것은 하나의 ip 에 여러 개의 도메인을 부여하는 방법으로, 초기에는
ip base
방식이 많이 쓰였지만 요즘은 ip 주소의 부족으로 거의 사용되지 않는다고 합니다. 아래는 알짜
리눅스의
httpd.conf 파일의 가상호스트 부분에 대한 설명을 옮긴 것인데 참고하시기 바랍니다.
##################################################################
###
섹션 3: 가상 호스트
#
# VirtualHost: 여러분의 리눅스 박스에 여러 개의 도메인/호스트이름을
# 관리하고 싶다면
각각에 대하여 VirtualHost 컨테이너를 설정한다.
# 가상 호스트를 설정하기에 앞서 자세한 설명을
#
<URL:http://www.apache.org/docs/vhosts/>에 들러 읽어보기 바란다.
# 가상 호스트 설정 내용을
점검해보기 위해서는 아파치를 실행할 때
# 명령행 옵션으로 '-S'를 사용한다.
#
# 이름 기반의 가상 호스트를 사용하려면 사용할
IP 주소 (최소 1 개,
# 그리고 포트 번호)를 정의해주어야 한다.
#
# 경고 : 아파치 1.2.x 버전에서만 가상 호스트
기능을 사용해 온 관리자들은
# 아파치 1.3.x 버전에서 NameVirtualHost 지시자로 IP 주소를
#
해주어야만 가상 호스트가 제대로 동작한다는 사실을 꼭 알아야 한다!!!
# 1.2 버전을 쓰다 1.3 버전으로
와서 가상 호스트가 동작하지 않는
# 문제의 99% 는 바로 NameVirtualHost 설정에
있다.
#
#
#NameVirtualHost
12.34.56.78:80
#NameVirtualHost 12.34.56.78
#
# 가상 호스트 예제:
# 거의 모든
아파치 지시자가 VirtualHost 컨테이너에 올 수 있다.
#
#<VirtualHost
ip.address.of.host.some_domain.com>
# ServerAdmin
webmaster@host.some_domain.com
# DocumentRoot
/www/docs/host.some_domain.com
# ServerName host.some_domain.com
#
CustomLog logs/host.some_domain.com-access_log common
# ErrorLog
logs/host.some_domain.com-error_log
#</VirtualHost>
#<VirtualHost
_default_:*>
#</VirtualHost> |
그럼 하나, 하나 예를 들어서 설명하겠습니다..
단 각각의 경우에서
다큐먼트 파일의 위치는 임의로 한 것임을 알립니다.
1. Name base virtual host 의
예제입니다.
하나의 ip 192.168.1.1에 alpha.linux.org, bravo.llinux.org
2개의 호스트를 운영할 경우.
<VirtualHost 192.168.1.1>
| ServerAdmin | root@alpha.linux.org | ServerName |
alpha.linux.org
| DocumentRoot |
/home/alpha/public_html
| ScriptAlias | /cgi-bin
/home/alpha/wwwhome/cgi-bin | CustomLog | logs/alpha.linux.org-access_log
common | ErrorLog |
logs/alpha.linux.org-accss-errog_log
| </VirtualHost> | |
<VirtualHost 192.168.1.1>
| ServerAdmin | root@alpha.linux.org | ServerName |
bravo.linux.org
| DocumentRoot |
/home/bravo/public_html
| ScriptAlias | /cgi-bin
/home/bravo/wwwhome/cgi-bin | CustomLog | logs/bravo.linux.org-access_log
common | ErrorLog |
logs/bravo.linux.org-accss-errog_log
| </VirtualHost> | | |
2. IP base virtual host 의 예제
ip 192.168.1.1 , 192.168.1.2 , 192.168.1.3
3개의 주소사용할 때.
port 80
ServerName alpha.linux.org
DocumentRoot /usr/local/apache/htdocs
<< 주 호스트 alpha 192.168.1.1 의 설정
<VirtualHost 192.168.1.1> | ServerAdmin | root@alpha.linux.org | ServerName |
alpha.linux.org
| DocumentRoot |
/home/alpha/public_html
| ScriptAlias | /cgi-bin
/home/alpha/wwwhome/cgi-bin | CustomLog | logs/alpha.linux.org-access_log
common | ErrorLog |
logs/alpha.linux.org-accss-errog_log
| </VirtualHost> | |
<VirtualHost 192.168.1.2> | ServerAdmin | root@alpha.linux.org | ServerName |
bravo.linux.org
| DocumentRoot |
/home/bravo/public_html
| ScriptAlias | /cgi-bin
/home/bravo/wwwhome/cgi-bin | CustomLog | logs/bravo.linux.org-access_log
common | ErrorLog |
logs/bravo.linux.org-accss-errog_log
| </VirtualHost> | |
<VirtualHost 192.168.1.3> | ServerAdmin | root@alpha.linux.org | ServerName |
charlie.linux.org
| DocumentRoot |
/home/charlie/public_html
| ScriptAlias | /cgi-bin
/home/charlie/wwwhome/cgi-bin | CustomLog | logs/charlie.linux.org-access_log
common | ErrorLog |
logs/charlie.linux.org-accss-errog_log
| </VirtualHost> | |
|
3. Port base virtual host 의 예제
Listen 80
ServerName alpha.linux.org
DocumentRoot /usr/local/apache/htdocs
<< 주 호스트 alpha 192.168.1.1 의 설정
Listen 8080
<< 사용할
포트번호
Listen 8081
<VirtualHost 192.168.1.2 :8080> | ServerAdmin | root@alpha.linux.org | ServerName |
alpha.linux.org
| DocumentRoot |
/home/alpha/public_html
| ScriptAlias | /cgi-bin
/home/alpha/wwwhome/cgi-bin | CustomLog | logs/alpha.linux.org-access_log
common | ErrorLog |
logs/alpha.linux.org-accss-errog_log
| </VirtualHost> | |
<VirtualHost 192.168.1.2 :8081> | ServerAdmin | root@alpha.linux.org | ServerName |
bravo.linux.org
| DocumentRoot |
/home/bravo/public_html
| ScriptAlias | /cgi-bin
/home/bravo/wwwhome/cgi-bin | CustomLog | logs/bravo.linux.org-access_log
common | ErrorLog |
logs/bravo.linux.org-accss-errog_log
| </VirtualHost> | | |
4. Default virtual host 의 예제
<VirtualHost _default_:*> | ServerAdmin
| root@alpha.linux.org | ServerName |
bravo.linux.org
| DocumentRoot |
/home/bravo/public_html
| ScriptAlias | /cgi-bin
/home/bravo/wwwhome/cgi-bin | CustomLog | logs/bravo.linux.org-access_log
common | ErrorLog |
logs/bravo.linux.org-accss-errog_log
| </VirtualHost> | | |
상기 예제에서 CustomLog, ErrorLog 와 TransferLog, 등
log 파일은 꼭 필요로 하거나 원하는 경우에
만 설정하는 것이 좋습니다. 한 서버에 많은 도메인이 있을 경우 전부 log 파일을 주게
되면 너무 많은
파일이 열리게 되어 cgi 나 apache 서버의 오작동을 불러올 수 있으므로 주의를 필요로 합니다. 하지만
웹로그분석을 할 경우에는 로그를 로테이트하거나 지우면 안 되겠지요.
그럼 실제 예를 들어보지요. 제가 관리하던 서버의 아파치 설정 부분입니다.
이 경우는 요즘
거의 대부분의 웹호스팅에 쓰이는 Name base virtual host 의
예제입니다.
전부는 보여드릴 수 없고 일부를 보여드립니다.
그리고 실제 도메인인 관계로 xxx처리한 것을 이해하시기 바랍니다.
우선 아파치 설정파일을 열어서 다음과 같이 virtual host 부분을 작석하거나
적당하게 수정합니다.
[root@tradexxxx /root]# vi
/usr/local/apache/conf/httpd.conf
#NameVirtualHost 211.174.60.28
##
Section 3: Virtual Hosts #
####################################################
# hosting group #
####################################################
####
acexxxx.co.kr ################################ | ServerAdmin | webmaster@xxxventure.com
| ServerName
| www.acexxxx.co.kr | DocumentRoot | /home/hosting/acexxxx/wwwhome
| ScriptAlias | /cgi-bin
/home/hosting/acexxxx/wwwhome/cgi-bin | CustomLog
| logs/acexxxx.co.kr-access_log common
| # ErrorLog
| logs/host.some_domain.com-error_log
|
####
celexxx.co.kr ################################## | ServerAdmin | webmaster@xxxventure.com
| ServerName | www.celexxx.co.kr | DocumentRoot | /home/hosting/celexxx/wwwhome
| ScriptAlias | /cgi-bin
/home/hosting/celexxx/wwwhome/cgi-bin | CustomLog | logs/celexxx.co.kr-access_log common
| #
ErrorLog | logs/host.some_domain.com-error_log
|
####
suanxx.com #################################### | ServerAdmin | webmaster@xxxventure.com
| ServerName | www.suanxx.com | DocumentRoot | /home/hosting/suanxx/wwwhome
| ScriptAlias | /cgi-bin
/home/hosting/suanxx/wwwhome/cgi-bin | CustomLog | logs/suanxx.com-access_log common
| #
ErrorLog | logs/host.some_domain.com-error_log
|
####
imyxxx.com #################################### | ServerAdmin | webmaster@xxxventure.com
| ServerName | www.imyxxx.com | DocumentRoot | /home/hosting/imyxxx/wwwhome
| ScriptAlias | /cgi-bin
/home/hosting/imyxxx/wwwhome/cgi-bin | CustomLog | logs/imyxxx.com-access_log common
| #
ErrorLog | logs/host.some_domain.com-error_log
|
|
이런 식으로 설정을 한 후에 httpd.conf 파일을 저장하고 아파치를 재실행 시킵니다.
[root@traderoad
/root]# /usr/local/apache/bin/apachectl stop
/usr/local/apache/bin/apachectl
stop: httpd stopped
[root@traderoad /root]# /usr/local/apache/bin/apachectl
start
/usr/local/apache/bin/apachectl start: httpd started
|
물론 dns 세팅도 제대로 되어어야 겠지요. 이상에서 예제를 통해 설정방법을 알아보았습니다.
Name Base virtual host 에서는
상위의 네임서버에 도메인이 등록되어야 사용할 수 있고,
IP Base virtual host 에서는 하나의 랜카드에 두 개 이상의 ip
주소를 부여하기 위해 ip alias를
사용하야 하며, Port base virtual host에서는 포트번호를 알아야 접근이 가능합니다.