2008년 09월 02일
데비안 4.0 Apache 2.2 + Tomcat 5.5 연동... proxy_ajp, proxy_balancer
이번에 투입된 프로젝트의 환경이 Apache2(WebServer) - Tomcat 5.5(WebAppServer) 환경이라서 호기심이 생겨 Debian 4.0(etch)에 Apache2-Tomcat 환경을 구축해 보았다. Apache와 Tomcat을 연동하는 방법에는 Apache의 jk, jk2 모듈을 쓰는 방법등이 있는데, jk2는 개발이 중단되었다는 소식이 들렸다. 그래서 가장 마지막에 나온 방법으로 보이는 mod_proxy_ajp와 mod_rewrite 이용한 방법으로 셋팅해 보았다.
제대로 설정이 되었는지는 모르겠지만, 아래 환경은 .jsp만 Tomcat으로 처리하고 나머지 파일은 Apache가 처리할 수 있도록 하는 설정이다. rewrite 모듈로 확장자를 구분해서 .jsp 파일만 AJP(Apache-Jserv-Protocol)를 통해서(proxy_ajp) Tomcat으로 보낸다. 정리하고 보니 그리 어렵지 않은데, 셋팅하는데 5~6시간 정도 걸렸다.
Apache 설정은 이골이 날 정도로 해봤었지만, 제대로 된 Tomcat의 설정은 이번이 처음이라 꽤 애먹었다. 언제나 그렇듯 Debian에서 제공하는 기본 패키지를 사용했고, 되도록이면 간단하게 딱 예제가 돌아갈 수 있을 정도의 최소한의 셋팅을 했다. 이후에 필요한 셋팅은 각자가 알아서 하면 될 것 같다.
아래의 영상은 1대의 Apache 서버와 3대의 Tomcat 서버를 연동해서 테스트 하는 영상이다. 처음에 2대의 Tomcat 서버 가동 중인 상태로 시작해서, 서버들을 껐다가 켰다가 하는 장면들이 나온다.(사운드는 없다)
위 영상 파일 다운로드 : AT.swf
--- 2008. 09. 03 14:00 사용자 계정에 Tomcat 적용법 추가
--- 2008. 09. 03 20:00 proxy_balancer 모듈을 이용한 Apache 서버 1대와 Tomcat 서버 여러대의 연동법 추가
--- 2008. 09. 03 21:50 시연 동영상 추가
제대로 설정이 되었는지는 모르겠지만, 아래 환경은 .jsp만 Tomcat으로 처리하고 나머지 파일은 Apache가 처리할 수 있도록 하는 설정이다. rewrite 모듈로 확장자를 구분해서 .jsp 파일만 AJP(Apache-Jserv-Protocol)를 통해서(proxy_ajp) Tomcat으로 보낸다. 정리하고 보니 그리 어렵지 않은데, 셋팅하는데 5~6시간 정도 걸렸다.
Apache 설정은 이골이 날 정도로 해봤었지만, 제대로 된 Tomcat의 설정은 이번이 처음이라 꽤 애먹었다. 언제나 그렇듯 Debian에서 제공하는 기본 패키지를 사용했고, 되도록이면 간단하게 딱 예제가 돌아갈 수 있을 정도의 최소한의 셋팅을 했다. 이후에 필요한 셋팅은 각자가 알아서 하면 될 것 같다.
아래의 영상은 1대의 Apache 서버와 3대의 Tomcat 서버를 연동해서 테스트 하는 영상이다. 처음에 2대의 Tomcat 서버 가동 중인 상태로 시작해서, 서버들을 껐다가 켰다가 하는 장면들이 나온다.(사운드는 없다)
위 영상 파일 다운로드 : AT.swf
- sun-java 설치 및 기본 실행 jvm 및 java 컴파일러 설정
- Apache 2.2.x 및 Tomcat 5.5 설치
- Rewrite 모듈과 함께 proxy, proxy_ajp, proxy_balancer, userdir 모듈 활성화
- Apache 설정 : proxy, proxy_ajp, proxy_balancer 모듈 관련, /etc/apache2/sites-enabled/000-default 파일 편집
- Apache 설정 : userdir 모듈 관련, /etc/apache2/mods-enabled/userdir.conf 수정
- Tomcat 설정 : /var/lib/tomcat5.5/conf/Catalina/localhost/ROOT.xml 수정
- Tomcat 설정 : 사용자 계정(userdir 모듈 관련)과 관련, /var/lib/tomcat5.5/conf/server.xml 수정
- jsp 실행을 위해 필요할 시 WEB-INF 폴더를 추가 후, web.xml 생성
- 아래의 테스트 예제를 /var/www/hello_world.jsp로 생성
- 예제 실행 전에 모든 설정을 적용하기 위해, Apache 및 Tomcat 재실행
- http://호스트명/hello_world.jsp로 접속했을 때, 아래와 같이 'Hello, World!!'가 뜨면 성공
sudo apt-get install sun-java5-bin※ update-alternatives –-config 명령으로 java 환경 재설정
sudo update-alternatives --config java
sudo update-alternatives --config javac
- $ sudo update-alternatives --config java
There are 2 alternatives which provide `java'.
Selection Alternative
-----------------------------------------------
*+ 1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
2 /usr/bin/gij-wrapper-4.1
Press enter to keep the default[*], or type selection number: 1
Using `/usr/lib/jvm/java-1.5.0-sun/jre/bin/java' to provide `java'.
$ sudo update-alternatives --config javac
There are 2 alternatives which provide `javac'.
Selection Alternative
-----------------------------------------------
* 1 /usr/lib/jvm/java-1.5.0-sun/bin/javac
+ 2 /usr/bin/ecj-bootstrap
Press enter to keep the default[*], or type selection number: 1
Using `/usr/lib/jvm/java-1.5.0-sun/bin/javac' to provide `javac'.
$ _
sudo apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps apache2.2-common apache2-utils
cd /etc/apache2/mods-enabled※ proxy.load 없이 proxy_ajp.load만 링크를 걸 경우, Apache가 실행되지 않는다. userdir 모듈은 각 사용자 계정에서도 jsp를 사용할 수 있도록 하기 위해 설정한다. proxy_balancer는 Apache에서 jsp 요청을 다수의 Tomcat 서버에 분산하는데 사용한다.
ln -s ../mods-enabled/rewrite.load
ln -s ../mods-available/proxy.load
ln -s ../mods-available/proxy_ajp.load
ln -s ../mods-available/proxy_balancer.load
ln -s ../mods-available/userdir.load
ln -s ../mods-available/userdir.conf
NameVirtualHost *※ Rewrite의 설정은 맨 아래 참고자료에 있는 사이트에서 가져온 것이다. proxy_balancer 추가로 RewriteRule의 주소가 ajp:// 에서 balancer://로 바뀐 것에 주목
<VirtualHost *>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
## mod_proxy_balancer
## 필요한 만큼 BalancerMember를 추가하면 자동으로 분산 요청
## 아래 주소는 단지 예시일 뿐
##
<Proxy balancer://tomcat_cluster>
BalancerMember ajp://server1.com:8009
BalancerMember ajp://server2.com:8009
BalancerMember ajp://server3.com:8009
</Proxy>
<Directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddDefaultCharset euc-kr
php_value default_charset euc-kr
## jsp 파일도 index 파일로 추가
##
DirectoryIndex index.jsp
## Rewrite를 이용해서 jsp 파일을 proxy_ajp로 Tomcat으로 넘기기
##
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .jsp
RewriteRule (.*) balancer://tomcat_cluster/$1 [P]
</Directory>
...... (생략)
</VirtualHost>
<IfModule mod_userdir.c>※ %{REQUEST_URI}를 이용해서 /~계정명/ 을 가져옴. 여기서도 ajp:// 대신 balancer:// 를 사용할 경우, 4.의 설정과 동일한 분산 서버로 요청함
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
## 사용자 계정의 jsp를 Tomcat으로 넘겨줌
##
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .jsp
RewriteRule (.*) ajp://localhost:8009%{REQUEST_URI} [P]
</Directory>
</IfModule>
<!--※ 몇시간 삽질을 하면서 ROOT.xml은 URL의 /를 뜻한다는 것을 알았고, /var/lib/tomcat5.5/conf/Catalina/localhost 디렉토리의 각각의 파일은 서로 다른 URL에 대한 설정을 담고 있다는 것을 알았다. (http://호스트명:8180/manager/html 페이지에 들어가보면 Tomcat에 관한 상태를 쉽게 확인할 수 있다)
Context configuration file for the Tomcat Web App Root
-->
<Context path="/" docBase="/var/www/"
debug="0" privileged="true" allowLinking="true">
</Context>
...... (생략)※ <Host>와 </Host> 사이에 <Listener ~~ /> 부분을 추가, Tomcat에서 'http://호스트명:8180/~사용자계정/' 을 사용 할 수 있도록 설정
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
</Host>
...... (생략)
아래에 나올 간단한 'hello_world.jsp' 예제에서는 WEB-INF나 web.xml 생성이 필요 없었으나,※ 실제로 jsp프로그래밍을 한다면 WEB-INF/web.xml은 필수일 것이라고 생각된다.
실제 운영할 때는 필요할 것으로 보임.
<%@ page contentType="text/html; Charset=EUC-KR" %>※ 사용자 계정에서 테스트 하기 위해서는 /home/사용자계정/public_html/hello_world.jsp로 저장하고 테스트한다.
<%
out.println("Hello, World!!");
%>
/etc/init.d/apache2 restart
/etc/init.d/tomcat5.5 restart
Hello, World!!※ 사용자 계정의 경우, 'http://호스트명/~사용자계정명/hello_world.jsp'로 접속했을 때 'Hello, World!!'가 뜨면 성공이다.
--- 2008. 09. 03 14:00 사용자 계정에 Tomcat 적용법 추가
--- 2008. 09. 03 20:00 proxy_balancer 모듈을 이용한 Apache 서버 1대와 Tomcat 서버 여러대의 연동법 추가
--- 2008. 09. 03 21:50 시연 동영상 추가
# by | 2008/09/02 22:15 | :: C space :: 컴퓨터 | 트랙백 | 덧글(4)













☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
하아 전 요새 회사일 적응하느라 정신없어요 ㅠ.ㅠ