헤르메스 LIFE

[Server] Apache + Tomcat 연동 본문

Server

[Server] Apache + Tomcat 연동

헤르메스의날개 2010. 9. 17. 13:26
728x90


1. 프로그램 다운로드 ( 현재 2010년 9월 17일)

  Apache 2.2.16 : http://httpd.apache.org/download.cgi#apache22


  Tomcat 6.0.29 : http://tomcat.apache.org/download-60.cgi

  Tomcat Connectors JK 1.2.30 : http://ftp.apache-kr.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.30/
  ※ Binary Releases 를 다운로드 합니다.

  JDK 1.6.0_21 : http://www.oracle.com/technetwork/java/javase/downloads/index.html

2. 설치 - 특별히 어렵지 않으므로 패스 ㅡㅡㅋ

  Apache : 설치 중 Domain, 이메일 등은 임의 작성합니다. (설정변경 가능)
                설치 후 서버가 실행되지 않는다면 httpd.conf의 SERVERNAME 주석을 해제하고,
                80번 Port의 점유 프로세스를 제거 한 후 재시작합니다.
  정상 설치 후 테스트 : 브라우져에서 http://localhost 를 실행하면 아래의 화면이 보입니다.

  Tomcat : 압축을 풉니다.
                실행 : %CATALINA_HOME%\bin\startup.bat
  정상 설치 후 테스트 : 브라우져에서 http://localhost:8080 를 실행하면 아래의 화면이 보입니다.

  JDK : 설치합니다.
          %JAVA_HOME%\bin 을 classpath에 추가합니다.
          환경변수에 JAVA_HOME을 설정합니다.

3. Apache + Tomcat 연동
  3.1 Apache 설정
    3.1.1Httpd.conf 설정

      ServerName 변경합니.

      Installer에서 임의로 설정한 ServerName 서버설정에 맞게 변경한다.

      %APACHE_HOME%\conf\Httpd.conf

#  local 아닌경우 IP Domain Name 입력합니다.

ServerName localhost:80

 

      DirectoryIndex index.jsp 추가합니다.

      %APACHE_HOME%\conf\Httpd.conf

<IfModule dir_module>

    DirectoryIndex index.jsp index.html

</IfModule>

 

      주석을 제거한다.

      %APACHE_HOME%\conf\Httpd.conf

#LoadModule ssl_module modules/mod_ssl.so
LoadModule status_module modules/mod_status.so
LoadModule version_module modules/mod_version.so

#다운받은 mod_jk-1.2.30-httpd-2.2.3.so 파일을 mod_jk.so 이름을 변경한다.
#변경된 mod_jk.so 파일을 %APACHE_HOME%\modules\ 에 넣는다.
LoadModule jk_module modules/mod_jk.so


      mod_jk.conf 추가

#Include를 검색하여 아래 내용을 추가합니다.
Include conf/mod_jk.conf


    3.1.2 mod_jk.conf 생성

 # Worker 파일 위치 지정
JkWorkersFile conf/workers.properties

# Apache와 tomcat연동에서 동적인 페이지만 tomcat에 넘기도록 설정한다.
# URL 매핑파일 지정
JkMountFile conf/uriworkermap.properties

JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkRequestLogFormat "%w %V %T"

<IfModule !mod_jk.c>
LoadModule jk_module modules/mod_jk.so
</IfModule>

<VirtualHost www.autoplus.co.kr>
  ServerName www.autoplus.co.kr
  Alias / "C:\workspace\project\web\"   <-- 아래의 내용과 다릅니다. 주의하세요.!!!

<Directory "C:\workspace\project\web">
  Options Indexes FollowSymLinks
  DirectoryIndex index.html index.htm index.jsp
</Directory>

# JkMount /* worker1
JkMount /*.jsp worker1
JkMount /servlet/* worker1

RewriteEngine on
# RewriteBase   /
RewriteRule   ^/$  /index.html [R,L]
</VirtualHost>


    3.1.3 workers.properties 생성

workers.tomcat_home=[Tomcat HOME의 절대경로]\Tomcat-6.0.29
workers.java_home=C:\jdk1.6.0_21
ps=\

worker.list=worker1, status

worker.worker1.port=8009
worker.worker1.host=www.autoplus.co.kr
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

worker.status.type=status


    3.1.4 uriworkermap.properties 생성

/jkstatus=status
/*.jsp=worker1
/*.action=worker1
/*.do=worker1

 
      옵션 : 하단에 아파치의 상태를 모니터링 할 수 있도록 추가할 수  있습니다.

      %APACHE_HOME%\conf\Httpd.conf

ExtendedStatus On

<Location /server-status>

    SetHandler server-status

    Order Deny,Allow  <- 실행순서

    Deny from all

    Allow from 127.0.0.1 111.111.111.111 <-- 접근허용할 IP

</Location>


모니터링은 url /server-status 붙인다.


  3.2 Tomcat 설정
    3.2.1 Server.xml 수정

        AJP 1.3 Connector on port 8009 확인합니다. (주석으로 묶여 있으면 풀어주세요.)

        %TOMCAT_HOME%\conf\Server.xml

 <!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009"
    enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

        

        Engine defaultHost localhost에서 기본host 변경한다.

        기존의 Host name localhost에서 설정에 맞는 Host name으로 변경하고 필요한 <Host></Host> 추가한다.

        <Resource Resource범위를 공유하지 않도록scope="Unshareable" 속성을 추가한다.

<Engine name="Catalina" defaultHost=" localhost">
      <Host name="localhost"  appBase="[WAS의 WEB Root]"
            unpackWARs="true" autoDeploy="false"
            xmlValidation="false" xmlNamespaceAware="false">
   <Context docBase="="[WAS의 WEB Root]"
            path="/" reloadable="true" antiResourceLocking="false"
            privileged="true" debug="1">
         <Resource name="jdbc/TIMS" auth="Container" scope="Unshareable"
                         type="javax.sql.DataSource"
                         driverClassName="oracle.jdbc.OracleDriver"
                         url="jdbc:oracle:thin:@IP주소:1521:ORA9"
                         username="아이디" password="패스워드" maxActive="20"
                         maxIdle="10" maxWait="-1"/>
   </Context>
      </Host>
</Engin>

 

    3.2.2 Tomcat의 오류
        문제는 Tomcat의 Startup.bat 실행 시 오류가 발생한다는데 있습니다.
        host-manager 폴더와 manager 폴더가 없다는 겁니다.
        Tomcat 5.5 버젼에서는 아래와 같은 오류가 발생하지 않았습니다.
        6.x 버젼으로 버젼업되면서 뭔가가 달라졌다는 얘기인 듯 한데..
        문제만 있지 해결방법은 없더군요.. ㅡㅡ;; (우리의 Naver와 Google에도 OTL...
        제가 영어가 짧아서 못 찾았을 수도 있습니다. ^^;;)

심각: Error starting static Resources
java.lang.IllegalArgumentException: Document base C:\AutoPlus\bin\Tomcat-6.0.29\
host-manager does not exist or is not a readable directory
        at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.
java:142)
        at org.apache.catalina.core.StandardContext.resourcesStart(StandardConte
xt.java:4249)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
418)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:77
1)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)

        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.ja
va:637)
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.j
ava:563)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498
)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:321)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)

        at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445
)
        at org.apache.catalina.core.StandardService.start(StandardService.java:5
19)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710
)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
2010. 9. 27 오후 5:37:31 org.apache.catalina.core.StandardContext start
심각: Error in resourceStart()

 
        일단의 해결방법은 appBase 에 있습니다.
        Tomcat은 appBase를 "webapps"를 기본으로 하고 있습니다.
        정확하게는 Tomcat 6.x버젼부터는 %CATALINA_HOME%\webapps\host-manager 폴더와 manager 폴더를
        찾고 있다는게 맞는것 같습니다. ( 찍었습니다. ㅡㅡㅋ )
 
        문제는 기본으로 되어있는 webapps 폴더를 그대로 놔두면 Apache와 Tomcat의 연동이 원할하지 않다는 겁니다.
        아래의 그림1을 보시면 localhost는 Apache의 index.html 이 실행된 그림입니다.
        그 아래의 그림2는 Tomcat의 index.jsp가 실행된 모습입니다.
        (appBase="webapps" 로 하고 적용한 모습니다. 위의 오류는 발생하지 않습니다.)

                                                                               [그림 1]

                                                                           [그림 2]

        이렇게 되면 안됩니다. OTL
        왜냐하면 전 Tomcat의 WEB ROOT를 변경하고 싶기 때문입니다.
        이런 실행화면은 Server.xml의 docBase를 변경한 의미가 없습니다. 
        (그림2의 모습은 Tomcat webapps 폴더의 ROOT 폴더의 index.jsp가 실행된 모습니다.)

        그래서 꽁수를 생각해 낸것이 appBase에 docBase의 경로를 넣는 것입니다.
        위의 Server.xml 설정에서 appBase="[WAS의 WEB Root]"라고 설정한 이유입니다.
        이렇게 설정하고, [WAS의 WEB Root]폴더아래에 %CATALINA_HOME%\webapps\host-manager 폴더와
        manager 폴더를 [WAS의 WEB Root] 아래에 복사합니다.

        이렇게하고 다시 Apache와 Tomcat을 재시작하면 위의 오류도 나타나지 않습니다.


         또 다른 방법이 제가 잘못한 내용이 있다는걸 발견하신분은 제발 원인 좀 갈켜주세요.
         아마도 Tomcat 6.x의 WEB Root 변경은 이런 방법 아니면 어려울 것 같습니다.
728x90