◎ No, 298
◎ 이름:김현호 (falllove@ducc.or.kr)
◎ 2001/12/2(일) 02:59
◎ 조회: 1534 회
dev.zip (4KB, DN:80)
[TIP]Apache1.3.22+Tomcat4.0.1연동 가상호스팅
질답에 올린 내용입니다 첨부에 vh1.local.com vh2.local.com으로 서비스할 웹애플리케이션?? 을 올렸으니 참고하세요.
Servlet을 처음에 로딩하는 이유는 제가 전에 테스트시 가상호스트수만큼 웹애플리케이션이 로딩되던 문제를 확인하기 위해서였습니다.
아래방법대로 하나씩 따라해보세요~ 질문은 질답란에 올려주시면 발견즉시 && 대답이 가능하면 답글남기겠습니다.
Apache 1.3.22 + Tomcat 4.0.1 Virtual Hosting
그동안 그렇게 고민하고.. 여기저기 이건 안된다. WebAppModule의 버그다! 라고까지
외쳐오던 시간이 부끄럽게 드디어 성공했습니다.
여러분도 저처럼 많은 시간을 삽질?하지마시고 한번에 성공하시기 바랍니다.
우선 테스트는 Apache 1.3.22 + Tomcat 4.0.1 을 이용한 버추얼 호스팅을 위해서
톰캣만으로 버추얼 호스팅과 아파치와 연동하여 버추얼호스팅을 해봤습니다.
가상호스트로 사용할 호스트 네임은 vh1.local.com 과 vh2.local.com입니다.
MS Windows 2000사용자는 C:\WINNT\system32\drivers\etc안의 hosts란 파일을
MS Windows 9x(ME)사용자는 C:\Windows 의 hosts란 파일을
linux 사용자는 /etc/hosts 란 파일을 열어보시면
#
# 주석이 어쩌구
127.0.0.1 local localhost localhost.localhost
이런 비슷한 내용이 보이실겁니다.
127.0.0.1 localhost vh1.local.com vh2.local.com
이라고 수정하신후 저장합니다.
9x사용자는 리부팅 필수이고 2000사용자나 리눅스계열은 브라우저만 다시시작하시면
됩니다. 윈도의 경우 hosts.sam 이란 파일이 있으면 지우세요.
그 다음 폴더를 만들겠습니다.
`dev
`vh1
`ROOT
`WEB-INF
`classes
`xx
`vh2
`ROOT
`WEB-INF
`classes
눈치가 빠르신분은 아시겠지만 dev란 것은 제가 사용하는 개발루트이고
vh1.local.com을 위한 vh1이 있고 root를 위한 ROOT란 폴더와 context 테스트를 위한
xx 란 폴더가 있습니다.
vh2.local.com을 위한 vh2와 ROOT등이 있습니다.
/dev/vh1/ROOT/WEB-INF/web.xml 파일을 만들겠습니다.
아래 내용을 복사해서 붙입니다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>_Run1st</servlet-name>
<servlet-class>_Run1st</servlet-class>
<init-param>
<param-name>Param1</param-name>
<param-value>Value1</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
/dev/vh2/ROOT/WEB-INF/web.xml 파일도 위처럼 같은내용을 붙여서 만드세요.
다음에 /dev/vh1/ROOT/WEB-INF/classes/_Run1st.java 를 만드세요.
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class _Run1st extends GenericServlet {
public String getServletInfo() {
return "_Run1st.java v0.1 2001-10-28 Copyrightⓒ 2001 by Hyunho Kim.";
}
public _Run1st() {
;
} // end of constructor
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("init of vh2_run1st");
} // end of init(ServletConfig config)
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
;
} //
}
역시 붙인다음 컴파일합니다.
/dev/vh2/ROOT/WEB-INF/classes/_Run1st.java 도 같은 방식으로 만들어서 컴파일합니다.
vh1과 vh2에 모두 _Run1st.class 가 만들어졌나요?
잘 만드셨으면 다음의 위치에
/dev/vh1/ROOT
/dev/vh1/xx
/dev/vh2/ROOT
각각 index.jsp를 만드세요.
별 내용은 필요없고 그냥 난 vh1.local.com의 누구다~!! 이런식의 내용만 있으면 됩니다.
어디까지나 테스트..
전 페이지가 캐싱된건지 확인하기위해 그냥 폼 두었습니다. 폼 서브밋하면 index.jsp다시
열리면서 전달된 내용출력하도록..
그럼 톰캣의 설정을 변경하겠습니다.
$CATALINA_HOME/conf/server.xml의 내용입니다. 테스트이므로 주석을 모두 지웠으며
Logger도 Engine안에 하나로 물려놨습니다. 내용이 궁금하신 분은 질답란에 올리시거나
다른 강좌를 참고하시거나.. 저한테 멜로 문의하세요^^(실은 저도 잘 모른답니다)
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Service name="Test for Tomcat-Apache">
<Connector className="org.apache.catalina.connector.http.HttpConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" connectionTimeout="60000"/>
<Connector className="org.apache.catalina.connector.warp.WarpConnector"
port="8008" minProcessors="5" maxProcessors="75"
enableLookups="true"
acceptCount="10" debug="0"/>
<Engine name="Test" defaultHost="vh1.local.com" debug="0">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="catalina_log." suffix=".txt"
timestamp="true"/>
<Realm className="org.apache.catalina.realm.MemoryRealm" />
<Host name="vh1.local.com" debug="0" appBase="/dev/vh1" unpackWARs="true">
<Context path="/xx" docBase="xx" debug="0" />
</Host>
<Host name="vh2.local.com" debug="0" appBase="/dev/vh2" unpackWARs="true">
</Host>
</Engine>
</Service>
</Server>
위처럼 변경하셨나요?
전부 지우고 위 내용을 복사해서 붙이세요.
이건 테스트니까요^^;
appBase 부분을 윈도우 사용자는
c:\dev\vh1
c:\dev\vh2
이런식으로 고치면 되겠습니다. 그냥 c:/dev/vh1 c:/dev/vh2 이렇게 하셔도 무방합니다.
수정하셨으면 $CATALINA_HOME/bin/startup.sh (-.bat)을 실행하세요..
Starting service Test for Tomcat-Apache
Apache Tomcat/4.0.1
init of vh1_run1st
init of vh2_run1st
이라고 잘 나오나요?
유닉스계열의 님들은 $CATALINA_HOME/logs/stdout.txt인가? 이 파일을 참고하세요.
System.out 이 이쪽으로 로그됩니다.
가상호스팅을 위한 두개의 호스트가 준비되었습니다.
브라우저를 띄우시고
http://vh1.local.com:8080
http://vh1.local.com:8080/xx
http://vh2.local.com:8080
쳐보세요.
/dev/vh1/ROOT
/dev/vh1/xx
/dev/vh2/ROOT
이 위치에 만들었던 파일이 잘 나오나요?
잘 안나오면 위에서부터 다시 확인해보세요!
http://localhost:8080이라고 쳐서 나온다면 위에서 hosts파일을 설정 잘 했는지 확인
하시고 윈 9x님들은 리부팅!!
잘 나오면 이넘들을 아파치랑 붙이기!를 하겠습니다.
위에서 톰캣의 server.xml을 저처럼 바꾸셨나요? 잘 보시면 아파치와 연동을 위한
커넥터도 같이 선언했습니다. 안하신분은 커넥터를 추가하고 톰캣 다시 실행하세요.
/path/to/apache/conf/httpd.conf를 열어보세요!!
[...]
#LoadModule unique_id_module libexec/mod_unique_id.so
#LoadModule dav_module libexec/libdav.so
#LoadModule ssl_module libexec/libssl.so
LoadModule webapp_module libexec/mod_webapp.so
[...]
ClearModuleList
[...]
#AddModule mod_unique_id.c
#AddModule mod_dav.c
#AddModule mod_ssl.c
AddModule mod_webapp.c
[...]
위에서 추가하는 두줄 아시죠?
LoadModule webapp_module libexec/mod_webapp.so
AddModule mod_webapp.c
암데나 써도 되지만 그래도 줄세워서 이쁘게 붙이세요.
그리고
ServerName vh1.local.com
으로 수정하세요. 잊을뻔^^;
아래로 죽 가면..
NameVirtualHost *
이넘 주석 제거하고
WebAppConnection vh warp vh1.local.com:8008
<VirtualHost *>
ServerName vh1.local.com
DocumentRoot /www/docs/dummy-host.example.com
WebAppDeploy ROOT vh /
WebAppDeploy xx vh /xx
</VirtualHost>
<VirtualHost *>
ServerName vh2.local.com
DocumentRoot /www/docs/dummy-host.example.com
WebAppDeploy ROOT vh /
</VirtualHost>
이 내용을 붙입니다. 기존의 VirtualHost의 주석처리된 부분은 그냥 두고 이거만
붙이세요.
내용을 설명하자면..
WebAppConnection vh warp vh1.local.com:8008
warp란 공급자가 제공한 웹애플리케이션을 vh1.local.com:8008로 연결하고 이 연결
이름은 vh입니다. 이정도입니다^^;
다음 VirtualHost를 선업합니다. vh1.local.com과 vh2.local.com 이렇게 두개 설정
했습니다.
WebAppConnection vh1 warp vh1.local.com:8008
WebAppConnection vh2 warp vh2.local.com:8008
<VirtualHost *>
ServerName vh1.local.com
DocumentRoot /dev/vh1/ROOT
WebAppDeploy ROOT vh1 /
WebAppDeploy xx vh1 /xx
</VirtualHost>
<VirtualHost *>
ServerName vh2.local.com
DocumentRoot /dev/vh2/ROOT
WebAppDeploy ROOT vh2 /
</VirtualHost>
이렇게 해도 됩니다만.. 이럴 필요는 없네요.. 톰캣에서 자동으로 호스트 이름을
구분하거든요.
여하튼 이렇게 다 설정했으면 톰캣띄우고 아파치 띄우고 -톰캣이 뜨기 전에 아파치
띄우거나 순서바뀌면.. 에러납니다.
http://vh1.local.com
http://vh1.local.com/xx
http://vh2.local.com
자 이렇게 접속해보세요. 잘 보이나요?
드디어 성공했군여^^;
하지만.. 역시 퍼포먼스면에서.. 가능하면 WebApplication을 Root로 서비스하지말고..
일부 context로 서비스해야할 필요성이 느껴지네요.. 음.. 그냥 웹로직같은거
쓰고싶은데..ㅠㅜ
HP-AS 사용법 한글로 나온데 아시는 분 아니면 써보신분.. 사용법좀 알려주세요~~
이넘이 공개되었으니까.. 이걸 써보고 싶은데....쩝..ㅠㅜ
여튼.. 여러분들 톰캣과 아파치의 연동중 버추얼 호스팅하는 법에 대해서 이해가
가셨는지요? 아직 저도 여러가지 경우에 대해서 테스트중입니다.
이론 어서 자야겠네요... 흠...
으쌰으쌰!! 드디어 하나 해결~~
님덜 즐프하세요!!
울트라처버 12/18[16:15]
http://vh1.local.com/xx 이게......마지막에 '/'가 들어가는게 맞는거아닌가..즐프하셔여..
초보 12/29[05:16]
왜 가상 호스트를 사용하지여?
김현호 () 12/30[01:44]
/여?? /는 없어도.. /(ROOT)로 시작하는 모든 URL을 톰캣이 받으므로
잘 됩니다~~
그리고 왜 가상호스트를 사용하냐녀?? ㅡ.ㅡ+ 뭐.. 지나보심 알겁니다~
anony 01/06[09:35]
Thanks
이름 메일
내용
Copyright ⓒ 2000 JSP School Technologies, Inc. All rights reserved
Copyright(c) 2000 technote inc