데비안 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
  1. sun-java 설치 및 기본 실행 jvm 및 java 컴파일러 설정
  2. sudo apt-get install sun-java5-bin
    sudo update-alternatives --config java
    sudo update-alternatives --config javac
    ※ update-alternatives –-config 명령으로 java 환경 재설정
      $ 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'.
      $ _


  3. Apache 2.2.x 및 Tomcat 5.5 설치
  4. sudo apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps apache2.2-common apache2-utils

  5. Rewrite 모듈과 함께 proxy, proxy_ajp, proxy_balancer, userdir 모듈 활성화
  6. cd /etc/apache2/mods-enabled
    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
    ※ proxy.load 없이 proxy_ajp.load만 링크를 걸 경우, Apache가 실행되지 않는다. userdir 모듈은 각 사용자 계정에서도 jsp를 사용할 수 있도록 하기 위해 설정한다. proxy_balancer는 Apache에서 jsp 요청을 다수의 Tomcat 서버에 분산하는데 사용한다.

  7. Apache 설정 : proxy, proxy_ajp, proxy_balancer 모듈 관련, /etc/apache2/sites-enabled/000-default 파일 편집
  8. NameVirtualHost *
    <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>
    ※ Rewrite의 설정은 맨 아래 참고자료에 있는 사이트에서 가져온 것이다. proxy_balancer 추가로 RewriteRule의 주소가 ajp:// 에서 balancer://로 바뀐 것에 주목

  9. Apache 설정 : userdir 모듈 관련, /etc/apache2/mods-enabled/userdir.conf 수정
  10. <IfModule mod_userdir.c>
            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>

    ※ %{REQUEST_URI}를 이용해서 /~계정명/ 을 가져옴. 여기서도 ajp:// 대신 balancer:// 를 사용할 경우, 4.의 설정과 동일한 분산 서버로 요청함

  11. Tomcat 설정 : /var/lib/tomcat5.5/conf/Catalina/localhost/ROOT.xml 수정
  12. <!--
        Context configuration file for the Tomcat Web App Root
    -->
    <Context path="/" docBase="/var/www/"
       debug="0" privileged="true" allowLinking="true">
    </Context>
    ※ 몇시간 삽질을 하면서 ROOT.xml은 URL의 /를 뜻한다는 것을 알았고, /var/lib/tomcat5.5/conf/Catalina/localhost 디렉토리의 각각의 파일은 서로 다른 URL에 대한 설정을 담고 있다는 것을 알았다. (http://호스트명:8180/manager/html 페이지에 들어가보면 Tomcat에 관한 상태를 쉽게 확인할 수 있다)

  13. Tomcat 설정 : 사용자 계정(userdir 모듈 관련)과 관련, /var/lib/tomcat5.5/conf/server.xml 수정
  14.     ...... (생략)

    <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>

        ...... (생략)
    ※ <Host>와 </Host> 사이에 <Listener ~~ /> 부분을 추가, Tomcat에서 'http://호스트명:8180/~사용자계정/' 을 사용 할 수 있도록 설정

  15. jsp 실행을 위해 필요할 시 WEB-INF 폴더를 추가 후, web.xml 생성
  16. 아래에 나올 간단한 'hello_world.jsp' 예제에서는 WEB-INF나 web.xml 생성이 필요 없었으나,
    실제 운영할 때는 필요할 것으로 보임.
    ※ 실제로 jsp프로그래밍을 한다면 WEB-INF/web.xml은 필수일 것이라고 생각된다.

  17. 아래의 테스트 예제를 /var/www/hello_world.jsp로 생성
  18. <%@ page contentType="text/html; Charset=EUC-KR" %>
    <%
    out.println("Hello, World!!");
    %>
    ※ 사용자 계정에서 테스트 하기 위해서는 /home/사용자계정/public_html/hello_world.jsp로 저장하고 테스트한다.

  19. 예제 실행 전에 모든 설정을 적용하기 위해, Apache 및 Tomcat 재실행
  20. /etc/init.d/apache2 restart
    /etc/init.d/tomcat5.5 restart

  21. http://호스트명/hello_world.jsp로 접속했을 때, 아래와 같이 'Hello, World!!'가 뜨면 성공
  22. 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 sakuragi | 2008/09/02 22:15 | :: C space :: 컴퓨터 | 트랙백 | 덧글(4)

트랙백 주소 : http://sakuragis.egloos.com/tb/4590029
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 환상경 at 2008/09/02 22:53
잼난걸 하시네요 =_=
하아 전 요새 회사일 적응하느라 정신없어요 ㅠ.ㅠ
Commented by sakuragi at 2008/09/03 14:17
사용자 계정(userdir) 부분 추가한다고 오늘 오전 내내 삽질 했네요.
Commented by wayne at 2008/09/27 15:48
안녕하세요.. 저도 설정하려고 하는데 1번부터 막히네요.. 윈도우에서 설치할때 나오는건가요?
Commented by sakuragi at 2008/09/28 17:52
제목에도 있듯이 데비안 리눅스에서 설정하는 방법입니다.

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶

:+: sakuragi's Steam :+: