4. 4. Name Based Virtual Hosting 실례
- 참고<1> - IP address 하나로 Virtual Hosting을 할때의 설정
Server에 IP address가 하나 밖에 없고 그 IP address에 여려 Domain을 CNAME record
를 이용하여 Virtual Hosting을 하고자 할때 주의 할점이 하나 있다. 아래의 예를 참고하자.
Hanterm - cat /etc/httpd/conf/httpd.conf |
[ 틀린 예제 ]
[root@bbuwoo /etc]$ cat /etc/httpd/conf/httpd.conf
port 80
.
.
중략
.
.
ServerName oops.kr.net
.
.
중략
.
.
#<VirtualHost host.some_domain.com>
#ServerAdmin webmaster@host.some_domain.com
#DocumentRoot /www/docs/host.some_domain.com
#ServerName host.some_domain.com
#ErrorLog logs/host.some_domain.com-error_log
#TransferLog logs/host.some_domain.com-access_log
#</VirtualHost>
# 여기서 부터가 Virtual Host 설정 부분임
NameVirtualHost 210.124.6.213 <- 이 부분을 주의
<VirtualHost 210.124.6.213>
ServerAdmin www@www.oops.kr.net
DocumentRoot /home/httpd/www
ServerName www.oops.kr.net
ErrorLog logs/www.error_log
TransferLog logs/www.access_log
</VirtualHost>
<VirtualHost 210.124.6.213>
ServerAdmin bbuwoo@bbuwoo.oops.kr.net
DocumentRoot /home/httpd/bbuwoo
ServerName bbuwoo.oops.kr.net
ErrorLog logs/bbuwoo.error_log
TransferLog logs/bbuwoo.access_log
</VirtualHost>
[root@bbuwoo /etc]$
|
Virtual Hosst 문서에는 그냥 NameVirtualHost IPaddress 만 적용시켜 주면 되는 것
처럼 되어 있지만 실제로는 적용이 안된다. 꼭 NameVirtualHost IPassress 위로
기본 home directory를 위와 같이 지정해 줘야 한다.
Virtual Host 문서중 2개의 IP address를 이용해서 하나는 기본으로 잡고 다른 하나의
IP address로 VirtualHosting을 할때 이렇게 하도록 설정을 하라고 되어 있다.
이것은 아마도 Name-Based VirtualHost 문서를 참고하다 보면
기본 홈디렉은 어차피 httpd.conf에서 ServerName과 port, 그리고
access.conf의 DocumentRoot 지시자에 의해서 설정이 적용이 된다고
되어 있기 때문에 설정을 안해도 되는 것처럼 말하는데 실제로 test를 해 본 결과 그렇지
못하다. 그러므로 실제로는 아래와 같이 기본 Home Directory를 지정을 해 줘야 한다.
이 방법이 맞다고는 장담을 못하겠다. 다만 나의 경험담 일 뿐이다.
Hanterm - cat /etc/httpd/conf/httpd.conf |
[ 옳은 예제 ]
[root@bbuwoo /etc]$ cat /etc/httpd/conf/httpd.conf
port 80
.
.
중략
.
.
ServerName oops.kr.net
.
.
중략
.
.
#<VirtualHost host.some_domain.com>
#ServerAdmin webmaster@host.some_domain.com
#DocumentRoot /www/docs/host.some_domain.com
#ServerName host.some_domain.com
#ErrorLog logs/host.some_domain.com-error_log
#TransferLog logs/host.some_domain.com-access_log
#</VirtualHost>
# 여기서 부터가 Virtual Host 설정 부분임
<VirtualHost 210.124.6.213> ┓
DocumentRoot /home/httpd/html ┃ 여기처럼 기본 Home
ServerName oops.kr.net ┃Directory를 지정해
</VirtualHost> ┛줘야 한다.
NameVirtualHost 210.124.6.213 <- 이 부분을 주의
<VirtualHost 210.124.6.213>
ServerAdmin www@www.oops.kr.net
DocumentRoot /home/httpd/www
ServerName www.oops.kr.net
ErrorLog logs/www.error_log
TransferLog logs/www.access_log
</VirtualHost>
<VirtualHost 210.124.6.213>
ServerAdmin bbuwoo@bbuwoo.oops.kr.net
DocumentRoot /home/httpd/bbuwoo
ServerName bbuwoo.oops.kr.net
ErrorLog logs/bbuwoo.error_log
TransferLog logs/bbuwoo.access_log
</VirtualHost>
[root@bbuwoo /etc]$
|
위의 예제에서 기본 directory를 지정하는 곳에서 보면 아래의 VirtualHost들과는 달리
몇몇 지시자가 빠져 있다. 이것은 기본적으로 httpd.conf와 srm.conf에서 적용 되는 것이니
빠져도 상관이 없다. 다만 이해할수가 없는 것은 위에서 설정된 것들 역시 httpd.conf와
srm.conf에 다 있는 것임에도 불구하고 error가 발생하는 것은 어쩐지 이해할 수가 없다.
- 참고<2> - IP address 여러개로 Virtual Hosting을 할때의 설정
상황을 한번 가정해 보도록 하자. 일단 IP address가 2개가 있다고 하자. 그리고 하나는 기본
home directory를 access한다고 하고 다른 하나로 2개를 virtualhosting을 한다고 가정하도록
하겠다.
210.124.6.213 oops.kr.net
210.124.6.214 www.oops.kr.net, bbuwoo.oops.kr.net
이것도 역시 위와 동일하게 생각을 해야 한다. 일단 기본 home directory는 두번째 ip address와
떨어져 있으므로 참고<1>와 같이 기본 home directory를
virtualhost로 지정을 해줄 필요는 없다.
하지만 210.124.6.214에서는 역시 여러개가 virtual hosting이 되어야 함으로 210.124.24.214에
alias되어 있는 domain 중 임의의 하나를 참고<1>에서
처럼과 같이 210.124.6.214의 기본 Directory로 잡아 주어야 한다. 즉 아래와 같이 하면 되겠다.
Hanterm - cat /etc/httpd/conf/httpd.conf |
[root@bbuwoo /etc]$ cat /etc/httpd/conf/httpd.conf
port 80
.
.
중략
.
.
ServerName oops.kr.net
.
.
중략
.
.
#<VirtualHost host.some_domain.com>
#ServerAdmin webmaster@host.some_domain.com
#DocumentRoot /www/docs/host.some_domain.com
#ServerName host.some_domain.com
#ErrorLog logs/host.some_domain.com-error_log
#TransferLog logs/host.some_domain.com-access_log
#</VirtualHost>
# 여기서 부터가 Virtual Host 설정 부분임
# 210.124.6.213에 대한 virtual host 설정은 생략되어 있다.
# 210.124.6.214에 대한 기본 Directory로 지정.
<VirtualHost 210.124.6.214>
ServerAdmin www@www.oops.kr.net
DocumentRoot /home/httpd/www
ServerName www.oops.kr.net
ErrorLog logs/www.error_log
TransferLog logs/www.access_log
</VirtualHost>
NameVirtualHost 210.124.6.214 <- 이 부분을 주의
<VirtualHost 210.124.6.214>
ServerAdmin bbuwoo@bbuwoo.oops.kr.net
DocumentRoot /home/httpd/bbuwoo
ServerName bbuwoo.oops.kr.net
ErrorLog logs/bbuwoo.error_log
TransferLog logs/bbuwoo.access_log
</VirtualHost>
[root@bbuwoo /etc]$
|
만약 210.124.6.214에 2개 이상의 Domain이 alias되어 있다면 하나를 위에서 처럼
기본 Home Directory로 지정을 하고 나머지는 NameVirtualHoas IP address
아래로 쭈욱 나열하면 된다.
- 참고<3> - 하나의 IP address 에 여러개의 독립 Domain을 설정
이번은 조금 다른 상황을 가정해 보도록 하겠다. 각각 다른 Domain을 가지고 있으나 IP
address는 하나 밖에 없다. 즉 여태까지는 하나의 도메인에 서브도메인을 이용해서
설정을 했으나 이번에는 완전히 다른 도메인을 부여하려고 한다.
일단은 name server의 설정만 제대로 한다면 위의 방법과 별 다를것이 없다.
하지만 문제가 되는 것은 NameVirtualHost 지시자가 생긴것 때문에 ServerName
지시자의 역할이 굉장히 중요해 졌고 이 때문에 독립 도메인의 경우에는 아래와 같이
2중으로 VirtualHost 설정을 해 줘야 했다.
Hanterm - cat /etc/httpd/conf/httpd.conf |
[root@bbuwoo /etc]$ cat /etc/httpd/conf/httpd.conf
port 80
.
.
중략
.
.
ServerName oops.kr.net
.
.
중략
.
.
#<VirtualHost host.some_domain.com>
#ServerAdmin webmaster@host.some_domain.com
#DocumentRoot /www/docs/host.some_domain.com
#ServerName host.some_domain.com
#ErrorLog logs/host.some_domain.com-error_log
#TransferLog logs/host.some_domain.com-access_log
#</VirtualHost>
# 여기서 부터가 Virtual Host 설정 부분임
# 210.124.6.214에 대한 기본 Directory로 지정.
<VirtualHost 210.124.6.214>
ServerAdmin www@www.oops.kr.net
DocumentRoot /home/httpd/www
ServerName www.oops.kr.net
ErrorLog logs/www.error_log
TransferLog logs/www.access_log
</VirtualHost>
NameVirtualHost 210.124.6.214 <- 이 부분을 주의
<VirtualHost 210.124.6.214>
ServerAdmin admin@bbuwoo.com
DocumentRoot /home/httpd/bbuwoo
ServerName bbuwoo.com <- 아래와 비교한다.
ErrorLog logs/bbuwoo.error_log
TransferLog logs/bbuwoo.access_log
</VirtualHost>
<VirtualHost 210.124.6.214>
ServerAdmin admin@bbuwoo.com
DocumentRoot /home/httpd/bbuwoo
ServerName www.bbuwoo.com <- 2중으로 설치
ErrorLog logs/bbuwoo.error_log
TransferLog logs/bbuwoo.access_log
</VirtualHost>
[root@bbuwoo /etc]$
|
위와 같이 bbuwoo.com과 www.bbuwoo.com을 둘다 접속을 하게 하기 위해서
똑같은 설정을 두번이나 해주고 있다. 좀 노가다를 하면 되지 하고 생각할수도 있겠으나
만약 virtual hosting 설정이 아주 많아 진다면 httpd.conf의 한줄이라도 더 들어가면
그만큼 읽어 들이는데 시간이 오래 걸리게 된다는 것을 명심하자.
이 것을 해결 하기 위해서 ServerAllias라는 지시자를 이용할수
있다. 아래를 참고하자.
Hanterm - cat /etc/httpd/conf/httpd.conf |
[root@bbuwoo /etc]$ cat /etc/httpd/conf/httpd.conf
port 80
.
.
중략
.
.
ServerName oops.kr.net
.
.
중략
.
.
#<VirtualHost host.some_domain.com>
#ServerAdmin webmaster@host.some_domain.com
#DocumentRoot /www/docs/host.some_domain.com
#ServerName host.some_domain.com
#ErrorLog logs/host.some_domain.com-error_log
#TransferLog logs/host.some_domain.com-access_log
#</VirtualHost>
# 여기서 부터가 Virtual Host 설정 부분임
# 210.124.6.214에 대한 기본 Directory로 지정.
<VirtualHost 210.124.6.214>
ServerAdmin www@www.oops.kr.net
DocumentRoot /home/httpd/www
ServerName www.oops.kr.net
ErrorLog logs/www.error_log
TransferLog logs/www.access_log
</VirtualHost>
NameVirtualHost 210.124.6.214 <- 이 부분을 주의
<VirtualHost 210.124.6.214>
ServerAdmin admin@bbuwoo.com
DocumentRoot /home/httpd/bbuwoo
ServerName bbuwoo.com
ServerAlias *.bbuwoo.com bbuwoo.com <- 이렇게 지정
ErrorLog logs/bbuwoo.error_log
TransferLog logs/bbuwoo.access_log
</VirtualHost>
[root@bbuwoo /etc]$
|
위와 같이 ServerAlias 지시자를 이용하면 간단하게
몇줄을 줄일수가 있다. 만약 여러분의 host에서 엄청난 수의 virtual hosting을
하고 있다면 몇줄을 줄이는 것이 아니라 굉장히 많은수의 line을 줄일수 있을 것이다.
그만큼 demon의 과부하 역시 막을수 있을 것이다.
>> 이전 : Name Based Vritual Hosting (2)
|