본문 바로가기
백엔드/WAS

Apache + Tomcat 연동 맛보기

by david100gom 2019. 3. 12.
728x90

Apache 2.2 + Tomcat 5.5 연동 (정/동적 파일 분리 중심 연동)


Apache 와 Tomcat 을 연동시 아파치에서는 정적인파일 (이미지, js, html 등등) 을 처리하게 하고 톰캣에서는 동적인 파일들을 처리하도록 하는것이 가장 중요한 포인트입니다.  

 대용량 트래픽을 유발하는 서비스의 경우는 이미지 파일 이나, js 파일 등을 아래와 같이 서브 도메인으로 만들어서 물리적으로 다른서버에 두게 하는경우가 일반적인 적용 가능한 경우입니다.

예) 

 이미지, js 파일 등등 : img.onjava.co.kr  (일반적으로 이미지 서버 또는 파일서버)

 동적인 파일 : www.onjava.co.kr (웹서버)

 www.onjava.co.kr 내의 html 에서 img 를 호출시 <img src="http://img.onjava.co.kr/xxx/xx.jpg"> 와 같은 형태로

하지만, 비용적인 측면이나 많은 트래픽이 생기지 않는 웹서버의 경우에는 하나의 물리적인 서버에서 아파치와 톰캣의 역할을 적절하게 나눠서 운영한다면 효과적인 서버운영을 할수가 있습니다.

1. 설정


아파치 WebRoot가 /usr/local/apache/htdocs 이고, 톰캣 WebRoot 가 /home/web/source/onjava/WebRoot 인 경우    

    • 톰캣에서는 파일 확장자가 jsp인 파일만 처리하도록 
    • 아파치에서는 jsp 파일 외의 파일들 (이미지 파일, html 파일 등등) 을 처리하도록 하기 위해서 아래와 같이 설정해줍니다.

[httpd.conf 파일]

DocumentRoot "/usr/local/apache/htdocs"
    
  <Directory "/usr/local/apache/htdocs">
    #
    # 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 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

</Directory>

 

아래와 같이 WebRoot 경로를 하나 더 추가해줍니다.

<Directory "/home/web/source/onjava/WebRoot">
    #
    # 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 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

</Directory>
​

 

톰캣과 연동을 위해 아래 내용을 httpd.conf 파일의 맨 마지막 부분에 추가합니다.

<IfModule mod_jk.c>
  JkWorkersFile "/usr/local/apache/conf/workers.properties"
</IfModule>

# mod_jk.so 파일은 아파치사이트에서 다운받으면 된다.
LoadModule jk_module "/usr/local/apache/modules/mod_jk.so" 

#Configure mod_jk
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat "%w %V %T"

#Root context
JkMount /*.jsp ajp13           -> 톰캣에서는 jsp 만 처리한다. (JkMount 에 추가된 파일만이 톰캣에서 처리하게 된다)
#JkMount /*.html ajp13         -> 주석처리된 부분들은 모두 아파치에서 처리하게 된다.
#JkMount /*.js ajp13 
#JkMount /*.jpg ajp13
#JkMount /*.gif ajp13
#JkMount /*.jpeg ajp13

AddDefaultCharset UTF-8

 

[workers.properties 파일]

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java
ps=\
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost

 

2. 테스트


위의 설정후에 jsp 파일이외의 이미지, html, js 파일 등은 /usr/local/apache/htdocs 에 위치시켜야 제대로 서비스가 가능하다. 당연히 톰캣에서 처리해야할 jsp 파일들은 /home/web/source/onjava/WebRoot 에 위치시키면 된다.

 

3. 기타


  • 아파치와 톰캣의 WebRoot를 같은 위치에 두거나 아님 두개를 분리해서 사용하거나 하는것 중 어느것이 좋다는 판단기준은 없습니다.  운영하기 편한 방식대로 하시면 됩니다. ^^;
  • 하지만, 아파치와 톰캣의 WebRoot를 따로 함으로써 웹디자이너가 접근할수 있는 폴더와 개발자가 접근할수 있는 폴더에 대한 구분이 명확해져서 보안의 측면에서는 이득을 볼수 있습니다. ^^

 

여기까지 Apache + Tomcat 연동 맛보기 였습니다.

728x90

댓글