아파치 에서 가상 호스팅 운영하기
(작성이 2001.11.1 질문 .오류는 메일 byun@iwav.co.kr 로 )
가상 호스팅이 무엇인지 이해 할 수 있다.
아피치를 설치 설정 실행을 할 수 있다.
유저의 홈페이지를 만들 수 있다.
네임기반의 가상호스팅을 설정을 할 수 있다.
vhost를 무듈을 포함하여 컴파일을 할 수 있다.
vhost 의 %0의 의미를 이해하고 설정할 수 있다.
가상 호스팅은 한대의 서버에 여려개의 도메인을 세팅을 하여
가상 적으로 여려대의 서버 처럼 만드는 것이다.
ip 의 자원이 많이 없는 상태이기 때문에 한대의 서버에 여려개의 도메인을
세팅을 하는 것은 지금도 많이 사용하고 있지만 점 점더 많이 사용 될 것으로
보인다.
지금 부터 할 내용은 아피치에 있는 가상 호스팅에 대한 내용이며(다른 웹서버에서도
가상 호스팅을 지원을 한다) 가상호스팅은 DNS 에 설정이 되어 있어야 작동을 하기
때문에 DNS 세팅은 되어 있다고 보고 설명을 하겠다.
(dns 설정이 안되 있으면 임시적으로 /etc/hosts에
아래와 같이 추가를 한다음 해도 된다.
192.168.0.1 sansung.net
192.168.0.1
www.sansung.net192.168.0.1 iwav.co.kr
192.168.0.1 www.iwav.co.kr
192.168.0.1 mwav.net
192.168.0.1 www.mwav.net
여기서 설정은 아래의 세 개의 도메인을 예제로 설명을 하겠다.
sansung.net
iwav.co.kr
mwav.net
이 네개의 도메인을 가지고 진행을 하겠다.
우선 메인 DNS 도메인은 sasung.net
가상 호스팅의 종류
--> ip 기반의 가상 호스팅
한대의 서버의 여려개의 ip을 설정하고 이것으로 가상 호스팅을 설정하는 것으로
많이 사용이 안되기 때문에 이곳에서는 다루지 않겠다.
--> 네임 기반의 가상 호스팅
네임서버에서 여려개의 도메인을 설정을 하고 아파치에서 네임 기반의 가상호스팅을 사용하는
것으로 보편적으로 가상 많이 사용 한다.
--> 아파치 모듈 mod_vhost_alias 를 이용한 가상 호스팅
아파치 1.3.7 이후 버전에 사용이 가능것으로 네임 기반의 가상 호스팅 보다 쉽게 가상호스팅을
운영 할 수 있으며 네임 기반의 가상 호스팅과 비숫한다.
네임 기반의 가상 호스팅
아파치를 일반 설치 하기
아피치를 http://apache.kr.net 에서 최신 버전 1.3.22 버전을 다운 받는다.
( 리눅스 설치시 rpm 으로 설치된 아파치가 있을 수 있으니
rpm -qa |grep apache 로 검사하여 지우도록 하자.
tar xvfz 파일
cd 압축이 풀린 디렉토리
./configure
make
make install
이 세개의 명령어로 간단하게 설치 할 수 있을 것이다.
아파치를 기본 설치 하였으면
/usr/local/apache
란 디렉토리에 설치가 된다.
우선 설치가 되었으면 설정을 하고 웹서버를 시작을 해보자.
pico /usr/local/apache/conf/httpd.conf
에디터로 아파치의 설정 파일 httpd.conf 열어보면
900라인에 달하는 내용이 있지만 하나만 수정을 하도록 하자.
#ServerName
이란 것이 주석 처리(#) 이 되어 있을 것이다.
이것을 주석을 지우고 도메인을 입력하도록 하자.
변경후
ServerName sansung.net
저장을 하자.
이제 설정이 되었으니 웹서버를 시작을 해보자
/usr/local/apache/bin/apachetl start
#웹서버 시작
/usr/local/apache/bin/apachetl stop
#웹서버 중지
/usr/local/apache/bin/apachetl restart
#웹서버 재시작
(부팅시 웹서버를 시작하고자 한다면
/etc/rc.d/rc.local 파일 아래에
/usr/local/apche/bin/apchectl start를 추가 하면 된다.
웹서버가 시작 되었으면 브라우져에서 접속을 해보자
여기까지가 웹서버를 설치 설정 시작까지 하였는데
무척 쉽게 따라 할 수 있었을 것이다.
아파치의 설정은 기번 설정도 잘되어 있기 때문에 이 기본적만으로
운영이 가능하다.
하기만 이 상태로 운영하는데 관리의 불편이 따르기 대문에 가상 호슽을
기준으로 기것을 편리하게 운영 할 수 있도록 변경을 해보자.
웹서버 시작 후 첫 화면에 나타나는 파일은
/usr/local/apache/htdocs
에 있는 index.html 이란 문서이다.
이곳에 자신이 만든 웹페이지를 만들어서 올리면 되는데 약간의 불편이 생긴다.
즉 /usr/local/apche/htdocs
의 위치는 root의 위치 이기 때문에 ftp 로 접속해서 이곳에 접근을 할 수 없으며
접근을 한다해도 root 의 소유권 이기 때문에 파일을 없로드 할 수 없다.
아니면 root 의 패스워드를 알려 주고 root 의 ftp 접속을 풀여 줄 수 도 있게지만
이것은 다른 문제가 발생을 할 가능성이 있기 대문에 권장하지 않으며
이런 방법을 추천 한다.
웹만 관리 할 수 유저를 만들 다음 이유저의 홈디렉토리를 웹서버의 메인 디렉토리로
지정을 하는 것이다.
그러면 유저이기 때문에 ftp ,telent 등을 직접 접속을 할 수 있으면 유저 이기 때문에
시스템에 접근을 할 수 없는 장점이 있다.
이것을 아파치의 가상호스팅을 이용해서 구현을 해보자.
1- 유저의 홈페이지를 만들어 보자.
useradd sansung
passwd sansung
sansung이란 유저를 만들고 패스워드를 부여해 보자.
다음 sansung 의 유저로 접속을 해보자.
(유저의 홈디렉토리에서는 root의 권한으로 되도록 작업을 하지 말자.)
su - snausng
유저가 홈페이지 생성을 위해서는 3가지 작업을 해야 한다.
펴미션 조정.
public_html 디렉토리 만들기
index.html 파일 만들기
유저의 홈디렉토리는 기본적으로 /home/sansung
이다.
그런 유저 생성시 유저의 홈디렉토리가 700 펴미션이기 때문에
웹에서 접속을 할 수 없기 때문에
chmod 701 /home/sansung
이렇게 변경을 해야 한다.
(701 펴미션은 웹 접속은 되고 같은 서버에 있는 유저들끼리 서로의 자료를 볼 수 없게
하는 펴미션이다.)
다음
mkdir public_html
다음 public_html 디렉토리 안에 index.html 파일을 만들어야 한다.
이제 웹에서 유저의 홈에 접속을 해보자
http://sansung.net/~sansung
홈페이지가 잘 보인다면 위의 설정이 잘 된 것이다.
네임 기반의 가상 호스팅 설정
지금부터 설정은 아파치 기본 설정에서 메인 디렉토리를
/usr/local/apache/htdocs 인데 이것을
유저의 홈디렉토리인
/home/sansung/public_html 위치로 변경을 하려는 것이다.
이 가상 호스팅 설정은
/usr/local/apache/conf/httpd.conf
설정에서 한다.
httpd.conf 파일을 맨 아래에 보면
NameVirtualHost 192.168.0.1# 이 것을 주석을 제가하고 본인 ip을 입력한다.
# 이 것이 활성화 되어야 가상 호스팅이 작동을 한다.
그 아래에 아래와 같은 내용을 추가 한다.
<VirtualHost 192.168.0.1>
DocumentRoot /home/sansung/public_html
ServerAdmin webmaster@sansung.net
ServerName sansung.net
ServerAlias www.sansung.net sansung.net
ErrorLog logs/sansungnet-error_log
CustomLog logs/sansung.net-access_log common
</VirtualHost>
#DocumentRoot 메일 페이지의 위치를 설정을 한다.
# 꼭 public_html 가 아니어도 상관이 없으니 보통
# cgi-bin 설정등을 그래도 사용할 수 없이 보통 이렇게 사용한다.
#ServerAdmin 관리자의 전자우편 주소로 서버 에러시 나타나는
#관리자의 주소이면 없어도 된다.
#ServerName 도메인 주소
#ServerAlias 도메인 주소를 sansung.net
www.sansung.net 은 다른 주소이기
# 때문에 다른 주소이기 때문에
www.sansung.net을 또다른 가상 호스트 설정이
# 필요하기 때문에 그 것 보다는 ServerAlias (별명)을 통해
#
www.sansung.net 으로 접속을 하는 것을 sansung.net 접속하는 것과 같게 한다.
# ErrorLog 웹서버 관련 에러 로그 없어도 된다.
# CustomLog 웹접속 관련 로그 없어도 되면 별다른 설정이 없으면
#로그는 /usr/local/apache/logs/ 있는 로그 파일에 같이 설정이 된다.
자 이제 설정이 되었으니 웹서버를 제시작 후 확인을 해보자
/usr/local/apche/bin/apachectl restart
웹에서
http://sansung.net http://www.sansung.net
으로 접속을 해보자.
메일 폐이지의 위치가 변경되었을 것이다.
이제부터 도메인을 추가를 해보자
iwav.co.kr
mwav.net
추가를 할 도메인은 2개 이다.
역시 각각의 유저을 만들자.
useradd iwav
useradd mwav
역시 각각의 유저의 홈디렉토리에 public_html을 만들고 index.html 과 펴미션(701)
조정을 해야 한다.
다음 아파치 설정파일 httpd.conf
<VirtualHost 192.168.0.1>
DocumentRoot /home/iwav/public_html
ServerAdmin webmaster@iwav.co.kr
ServerName iwav.co.kr
ServerAlias www.iwav.co.kr iwav.co.kr
</VirtualHost>
<VirtualHost 192.168.0.1>
DocumentRoot /home/mwav/public_html
ServerAdmin webmaster@mwav.co.kr
ServerName iwav.net
ServerAlias www.mwav.net mwav.net
</VirtualHost>
역시 설정을 추가 하였으니 웹서버를 재시작을 해보자.
이제 웹에서 접속을 해보자
http://sansung.net
http://www.iwav.co.kr
http://www.mwav.net
각각의 유저의 홈페이지가 나온다면 정상적으로 작동을 하는 것이다.
mod_vhost_alias를 이용한 가상 호스팅 설정
지금부터 하는 가상 호스팅 설정은 위에 있는 네임 기반의 가상호스팅과 거의 비슷한데 차이 점이 있다면
네임기반의 가상 호스팅은 도메인 추가 될 때마다 일일이 httpd.conf를 설정을 추가해야 하지만
mod_vhost_alias를 이용하면 httpd.conf 설정을 한번만 설정을 하면 되기 때문에 설정이 조금 편해지는
장점이 있다. 물론 결과는 네임 기반의 가상 호스팅과 같다.
mod_vhost_alias 는 인터넷 접속이 헤더에 있는 도메인정보를 특정 디렉토리에 지정을 하는 것으로
네임 기반의 별차이는 나지 않는다.
설치시 준비 사항
아피치를 기본설정를 하면 mod_vhost_alias 가 포함이 되어 있지 않다.
현제 모듈이 포함되 어 있나 확인을 해보자.
/usr/local/apche/bin/httpd -l
http_core.c
mod_mmap_static.c
mod_vhost_alias.c
mod_env.c
mod_log_config.c
mod_log_agent.c
mod_log_referer.c
mod_mime_magic.c
mod_mime.c
mod_vhost_alias를 포함하여 컴파일 하기
./configure --enable-module=all
make
make install
이렇게 --enable-oodule=all 이 옵션이 들어 가야 접속이 된다.
설정 준비
도메인 관리 유저 만들기
여기 유저를 만들이 좀 이상하게 만들 것이다.
이유는 되에서 설명이 나올 것이다.
useradd sansung -d /home/www.sansung.net
useradd iwav -d /home/www.iwav.co.kr
useradd mwav -d /home/www.mwav.net
(물론 여기서도 펴미션 701 관 index.html을 만들어야 하며 public_html를 만들 필요는 없다. )
호스트 네임 정보코드
0 : 전체 호스트 이름
1 :첫번째 부분
2 :두번째 부분
- -1: 마지막 부분
- -2 : 마지막에서 두번째 부분
- 2+ : 두번째 부분과 나머지 뒷부분
- -2+ :마지막에서 두번째 부분과 그 앞부분의 모두
- 1+ 과 -1+ :0과 동일(전체 호스트 이름)
여기서는 0만을 사용하겠다. 0의 의미는 접속하는 도메인의 의미이다.
httpd.conf에 아래 내용을 추가를 하자
-
-
-
- UseCanonicalName Off
- VirtualDocumentRoot /home/%0
여기서 %0의 의미는 접속하는 도메인 이름이다. 즉 사용자가
http://www.sansung.net 으로 접속을
한다면 %0은
www.sansung.net 과 같은 의미이며
www.sansugn.net 으로 접속을 하면
/
home/www.sansung.net 디렉토리에 있는 index,html를 메인 문서를 찾을 것이다.
(유저의 홈디렉토리를 이상하게 만든 이유는 이것 때문이다.)
만약 사용자가
www.iwav.co.kr를 접속을 한다면 역시 /home/www.iwav.co.kr
디렉토리를 찾을 것이다.
이것으로 가상 호스팅의 설정은 끝이다.
모듈기반의 가상 호스팅은 네임시간반의 가상 호스팅보다는 설정이 편하다는 장점이 있다.
그런데 다른 문제가 생길 수 있는데 사용자가
www.sansung.net 도메인이 아니가
sansung.net 으로 접속을 한다면 아마 접속이 안 될 것이다. 왜냐하면 /home/에는 sansung.net
디렉토리가 없기 때문이다. 이때 해결 책은 물론 별도의 디렉토를 만들어도 되겠지만 심벌링크를
사용하면 간단하게 해결 할 수 있다.
home 디렉토리에서
ln -s www.sansung.net sansung.net
이렇게 심벌 링크를 건다면 이 문제는 간단하게 해결이 될 것이다.
기타 vhost 설정 지사자는 더 있다.