flowerspring

Windows에서 mod_jk모듈을 통한 Apache와 Tomcat 연동에 대해서 적어본다.

기본적으로 Apache와 Tomcat 이 설치가 되어 있다는 과정하에 설명하도록 하겠다.
Apache 버전은 2.2, Tomcat버전은 5.5 설치파일이 아닌 압축 버전으로 설치를 하였다.

mod_jk 모듈은 다운받아서 Apache 폴더 하위에 있는 modules폴더에 넣는다.

톰캣부분은 따로 설정한 부분이 없다.
다만 아파치만 설정을 하면 되는데 httpd.conf 파일을 열어서 mod_jk 모듈을 추가해준다.

httpd.conf
LoadModule jk_module     modules/mod_jk-1.2.27-httpd-2.2.10.so

128 라인 정도에 모듈 마지막 즈음이 될듯하니 거기에 추가해주면 될것이다.

httpd.conf
<IfModule mod_jk.c> 
     JkWorkersFile conf/workers.properties 
     JkLogFile logs/mod_jk.log 
     JkLogLevel    info 
     JkMountFile   conf/uriworkermap.properties
</IfModule>

httpd.conf 제일 하단부분에 다음과 같은 부분을 추가해준다.

아래와 같은 파을을  Apache/conf 폴더에 생성한다.

workers.properties
uriworkermap.properties

workers.properties
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

uriworkermap.properties
/*.do=worker1
/*.jsp=worker1

해당 파일안에 위 내용을 넣어준후에 테스트를 해본다.

정적인 파일은 아파치 해당 폴더에 D:\WAS\Apache2.2\htdocs (각자 설치에 따라 다름)
동적인 파일은 톰캣 ROOT 폴더에  D:\WAS\tomcat-5.5\webapps\ROOT (각자 설치에 따라 다름)
옮긴 후에 테스트를 해본다.

http://localhost:80/index.html
http://localhost:8080/index.jsp



2009-11-11 추가

다수의 도메인 연결 방법

위에 경우는 하나의 도메인과 하나의 톰캣과의 연동법을 설명한 것이다. 하지만 위와 같은 경우가 아닌 하나의 아파치에 여려대의 tomcat을 사용하는 경우가 있을것이고 여러개의 도메인을 연결해서 사용해야 하는 경우도 있다. 아래 부분은 그 부분에 대해서 설명을 한다.
위에 내용과 연결되지 않으니 아파치 톰캣이 설치 되어 있다면 위에 부분은 건너 뛰고 아래 부분 부터 적응을 하면 된다.

mod_jk-1.2.28-httpd-2.2.3.so 모듈을 modules 디렉터리로 복사를 했다면 httpd.conf 파일을 열고 다음 부분을 추가해준다. 제일 마지막 라인에 추가해주면 된다.

일단 해당 apahce 설치 폴더는 D:\SERVER\Apache2.2 에 설치를 했다.

httpd.conf
#
# Use name-based virtual hosting.
#
# 해당 아이피
NameVirtualHost 210.112.167.232 
# jk_module 추가
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so
# workers.properties 파일 추가
JkWorkersFile "D:\SERVER\Apache2.2\conf\workers.properties"
# virtualhost 설정 추가
include "conf/vhosts/*.conf"

위와 같이 수정을 해 줬다면 workers.properties 파일을 생성해준 다음 아래 부분을 복사해서 붙여 넣는다.

workers.properties
# the list of workers
# 톰캣 경로
#workers.tomcat_home=D:\WAS\tomcat-6.0.20 //
# jdk 경로
#workers.java_home=C:\Java\jdk1.6.0_16

ps=\
worker.list=dev,dev2

#test.domain.pe.kr
worker.dev.host=test.domain.pe.kr
worker.dev.port=8009
worker.dev.lbfactor=1
worker.dev.type=ajp13

#test2.domain.pe.kr
worker.dev2.host=test2.domain.pe.kr
worker.dev2.port=8010
worker.dev2.lbfactor=1
worker.dev2.type=ajp13

# loadbalancer 설정
#worker.loadbalancer.type=lb
#worker.loadbalancer.balanced_workers=dev, dev2
#worker.inprocess.type=jni
#worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar
#worker.inprocess.cmd_line=start
#worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout
#worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stde

위에 내용에서 라인 앞줄에 #이 되어 있는 부분은 여기에서는 필요 하지 않으니 신경을 쓸 필요가 없다.이 과정까지 완료 되었다면 이제 도메인에 대한 설정을 해주면 된다. 

httpd.conf 파일에 include "conf/vhosts/*.conf" 라인을 입력 했었다.
conf/vhosts 폴더에 .conf 확장자로 된 모든 파일을 읽어 들이라고 정의를 했으니 해당 파일을 생성해 보자

지금은 vhosts  폴더가 없기 때문에 conf 하위에 vhosts 폴더를 하나 생성해 준다.
그리고  vhosts  아래에 해당 도메인명.conf  파일을 생성해 준후 아래 내용을 복사해서 붙여 넣는다. 해당 부분은 각자 사용자에 따라서 다르기 때문에 경로나 아이피는 적당하게 수정해준다.

test.domain.pe.kr.conf
<VirtualHost 210.112.167.232:80>
    ServerName test.domain.pe.kr   
DocumentRoot D:\webapps\test.domain.pe.kr
    
    ErrorLog logs/dev-error.log
    CustomLog logs/dev.log common
<Directory "D:\webapps\test.domain.pe.kr">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None
    #
    # Controls who can get stuff from this server.
    #
#    Order allow,deny
#    Allow from all
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>
# 아파치로 접근 하는 거중 확장자가 ok 만  톰캣으로 하고
# 나머지는 아파치 즉  workers.properties 의 이름 worker.list=sample 로 보낸다.
    JkMount /*.jsp  dev
    JkMount /*.do  dev
    JkMount /servlet/*  dev
</VirtualHost>


 위에 파일을 생성을 했다면 test2.domain.pe.kr에 대한 파일도 위와 같은 방법으로 하나 생성해준다.

여기까지 작업이 되었다면 아파치에 대한 설정은 끝났다. 이제 톰캣만 설정하면 되는데 톰캣이 설치 되었다면 해당 도메인에 지정된 톰캣 폴더/conf/에서 server.xml 파일을 수정해준다.

지금 현재의 필자의 경로는
D:\WAS\tomcat-6.0.20_test\conf,
D:\WAS\tomcat-6.0.20_test2\conf
로 되어 있다. 각각 해당 폴더를 열고 server.xml 파일을 열어서 다음 부분을 수정해준다. 

D:\WAS\tomcat-6.0.20_test\conf\server.xml

해당 부분은 수정할것이 없다. 기본적으로 톰캣은 8080 포트를 쓰지만 여러개의 톰캣을 사용하려면 이부분이 수정이 되어야 된다.

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

그리고 다음 라인도 찾아 보자. 하지만 이 부분도 여기서는 수정해줄 필요가 없다.
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
</Host>

이부분도 찾아보자  이 부분은 기본적으로 톰캣 폴더가 ROOT로 되어 있다.
하지만 아파치의 경로는 현재 D:\webapps\test.domain.pe.kr으로 되어 있다.
이럴 경우 정적 리소스의 경우는 D:\webapps\test.domain.pe.kr에 저장이 되고
jsp, class의 경우는 D:\WAS\tomcat-6.0.20_test\webapps\ROOT에 저장을 해줘야 한다. 이렇게 분리하는것도 다른건 아니지만 그게 귀찮다면 아래 부분을 추가해준다.

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="D:\webapps\test.domain.pe.kr" path="" reloadable="false"/>
</Host>

이렇게 되면 같은 폴더를 사용하게 된다.

이제는 D:\WAS\tomcat-6.0.20_test2\conf\server.xml를 수정하도록 하자
위에 파일과 다를것이 없으므로 변경 부분만 강조를 하도록 하겠다.

D:\WAS\tomcat-6.0.20_test2\conf\server.xml
<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="D:\webapps\test2.domain.pe.kr" path="" reloadable="false"/>
</Host>

위와 같이 적용이 되었다면 완료가 되었다..

적용된 도메인은 2개가 된다.

아파치
http://test.domain.pe.kr
http://test2.domain.pe.kr

톰캣
http://test.domain.pe.kr:8080
http://test2.domain.pe.kr:8081

Comment +3

  • 제 글이 검색이 되나 해서 찾아보다가 트랙백 하나 남기고 갈께요~^^

  • 이해가 안가는부분이 있는데요
    D:\webapps\test.domain.pe.kr
    여기에 소스가 들어있는건가요 톰캣은
    D:\WAS\tomcat-6.0.20\ 여기에 설치된거같은데 하기 두폴더는
    D:\WAS\tomcat-6.0.20_test\conf,
    D:\WAS\tomcat-6.0.20_test2\conf
    어떻게 생성된건가요????????

  • 일반적으로 설정을 안할 경우는 tomcat-6.0.20\webapps\ROOT\ 하위에 소스를 올리면 됩니다.
    하지만 위에는 특정 디렉터리를 지정한 것이므로
    test.domain.pe.kr 도메인은 D:\webapps\test.domain.pe.kr
    test2.domain.pe.kr 도메인은 D:\webapps\test2.domain.pe.kr
    server.xml에 특정 디렉터리를 소스경로로 지정을 한 것입니다.