펌 😕http://cheolgoon.tistory.com/83
하나의 웹서버에서 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에서는 포트번호를 알아야 접근이 가능합니다.