728x90
반응형

http://lesstif.com/pages/viewpage.action?pageId=12943367

개요 

Apache httpd web server 와 tomcat 을 연계하는 방법은 세 가지가 있다. 

예전부터 많이 쓰던 방법은 tomcat connector(mod_jk)를 사용하는 방법이고 다른 하나는 mod_proxy를 사용하여 reverse proxy 기능을 사용하는 방법, 마지막은 mod_proxy_ajp 를 사용하여 AJP Protocol을 reverse proxy 로 사용하는 방법이다. 

mod_proxy 가 mod_jk 에 비해 설정이 간편하고 AJP 같은 특정 WAS 의존적인 프로토콜을 사용하지 않으므로  성능이 더 좋다고 하지만 mod_jk 가 오랫동안 써왔고 친숙해서 mod_jk 를 많이 사용하는 편인데 세 가지 방법 모두 정리해 본다. 

 

 

연결 방식
장점
단점
특징
mod_jk
  • mod_jk 를 많이 사용하므로 관련 자료가 많음
  • JkMount 옵션을 이용하면 URL 이나 컨텐츠별로 유연한 설정이 가능(이미지는 웹서버, 서블릿은 톰캣)
  • 별도의 모듈을 설치해야 함
  • 설정이 어려움
  • 톰캣 전용임
 
mod_proxy
  • 별도 모듈 설치가 필요없고(apache 기본 모듈) 설정이 간편
  • 특정 WAS에 의존적이지 않으므로 모든 WAS에 적용 가능
  • URL 별 유연한 설정이 불가능
 
mod_proxy_ajp
  • 별도 모듈 설치가 필요없고(apache 기본 모듈) 설정이 간편
  • 특정 WAS에 의존적이지 않으므로 모든 WAS에 적용 가능
  • URL 별 유연한 설정이 불가능
 
       

 

Tomcat Connector mod_jk

mod_jk compile

Icon
  • RHEL6/CentOS 6 기준이며 compile 을 하려면 사전에 gcc 와 httpd-devel 패키지가 설치되어 있어야 한다. (yum install gcc gcc-c++ httpd-devel)
  • mod_jk compile 이 귀찮으면 첨부되어 있는 pre-compiled connector 를 다운받은 후에/etc/httpd/moduels 에 복사해 준다.
  1. http://tomcat.apache.org/download-connectors.cgi 에서 소스  download (현재 1.2.37)
    1. wget http://ftp.daum.net/apache//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz
  2. tar zxvf tomcat-connectors-1.2.37-src.tar.gz
  3. cd tomcat-connectors-1.2.37-src/native
  4. ./configure --with-apxs=/usr/sbin/apxs
  5. make 
  6. make install

 

make install 후 /etc/httpd/modules/mod_jk.so 에 복사가 된다. 

Icon

SELinux 를 사용한다면 mod_jk.so 에 httpd_modules_t Context 가 설정되어야 apache httpd 가 읽을 수 있다. 다음 명령어로 설정하자.

 

chcon -u system_u -r object_r -t httpd_modules_t /etc/httpd/modules/mod_jk.so

 

Apache httpd 설정

  1. cd /etc/httpd
  2. vim conf/httpd.conf  

    LoadModule jk_module modules/mod_jk.so

     

  3. vim conf.d/mod_jk.conf  

    <IfModule mod_jk.c>
      # Where to find workers.properties
      JkWorkersFile conf/workers_jk.properties
      
      # Where to put jk shared memory
      JkShmFile run/mod_jk.shm
      
      # Where to put jk logs
      JkLogFile logs/mod_jk.log
      
      # Set the jk log level [debug/error/info]
      JkLogLevel info
      
      # Select the timestamp log format
      JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
     
      ## url pattern 에 따른 connector mapping
      ##JkMountFile conf/uriworkermap.properties
    </IfModule>

     

  4. vim conf/workers_jk.properties 

    (info) tomcat 은 server1, server2 두 대에 설치되어 있고 Connector Port는 8009 라 가정

    (info) Tomcat의 AJP Connector 가 listen하는 Port는 tomat의 conf/server.xml 에서 다음 항목에서 확인할 볼 수 있다.

    Icon

    tomcat 은 기본 URIEncoding 이 ISO-8859-1 이므로 한글이 깨지므로 모든 커넥터 설정에 URIEncoding="UTF-8" 을 추가해야 한다.

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

     

    ajp protocol connector 설정
    worker.list=worker1, worker2
    worker.worker1.port=8009
    worker.worker1.host=server1
    worker.worker1.type=ajp13
    worker.worker1.lbfactor=1
     
    ## server 2
    worker.worker2.port=8009
    worker.worker2.host=server2
    worker.worker2.type=ajp13
    worker.worker2.lbfactor=1
  5. vim conf/uriworkermap.properties  - 어떤 url 요청에 대해 tomcat 과 연계할지 설정한다. (uriworkermap.properties configuration ) 

    ## Mapping the URI /service1 under worker1
    /service1/*.do=worker1
    /service1/*.jsp=worker1
     
    # /service2 요청으로 들어온 것은 worker2 로 mount
    /service2/*=worker2
     
    # png와 jpg 는 apache 가 처리
    !/service2/*.png=worker2
    !/service2/*.jpg=worker2
    ## 아래와 같이 설정하면 모든 요청(jsp, do, image, js등)을 tomcat으로 보내서 처리한다.
    /*=worker1
  6. service httpd restart
  7. Browser 로 연결하여 정상 동작 여부 확인

TroubleShooting

 

mod_proxy 사용

reverse proxy 로 동작하는 모듈이다. 보안상 문제가 있을 수 있으므로 reverse proxy 에 대해서 숙지한 후에 설정하는 것을 권장한다,

  1. mod_proxy.so 와 mod_proxy_http.so 가 LoadModule 로 로딩해야 한다. (RHE/CentOS 는 기본 로딩됨)
Icon

reverse proxy 로 사용할 경우 기본적으로 모든 clinet 가 연결 가능하므로 내부에서만 사용해야 하는 service등의 경우 적용시 access control 을 여부를 검토해야 한다.

 

설정 예
  1. WAS IP 가 192.168.10.100이고 WebApp 이름이 mywebapp

  2. Web Server의 VirtualHost 이름은 dummy-host.example.com

Browser 에서 연결은 

httpd.conf
<VirtualHost *:80>
    ServerName dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
 
    # Put this in the main section of your configuration (or desired virtual host, if using Apache virtual hosts)
    ProxyRequests Off
    ProxyPreserveHost On
  
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
     
    ## mywebapp 설정
    ProxyPass /mywebapp http://192.168.10.100/mywebapp
    ProxyPassReverse /mywebapp http://192.168.10.100/mywebapp
    <Location /mywebapp>
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>

위의 경우 httpd는 /mywebapp/foo, /mywebapp/bar 모두 192.168.10.100/mywebapp 에 연결하게 된다. 만약 특정 URL 패턴은 reverse proxy 로 동작하지 말아야 한다면 ProxyPassMatch 으로 URL 을 처리할 수 있다.

 # /mywebapp/bar 하위의 URL 은 접근 금지
ProxyPassMatch ^/mywebapp/bar[^.]+ !
 ProxyPass /mywebapp http://192.168.10.100/mywebapp
 ProxyPass /mywebapp http://192.168.10.100/mywebapp
 ProxyPassReverse /mywebapp http://192.168.10.100/mywebapp
 <Location /mywebapp>
     Order allow,deny
     Allow from all
 </Location>

 

 

Icon

mod_proxy_balancer 적용예제 추가

 

mod_proxy_ajp 사용

 AJP13 protocol을 사용해서 reverse proxy 로 동작하는 방식이다. http reverse proxy 와 비슷하지만 protocol 을 ajp 로 적어주면 된다.

ProxyPass /app ajp://backend.example.com:8009/app

 

같이 보기

 

외부 링크

728x90
반응형

'SERVER > 회사서버셋팅중참조' 카테고리의 다른 글

aix apache 설치  (0) 2014.08.27
CentOS 7 Apache 2.4 설치방법  (0) 2014.08.27
PCRE 설치관련  (0) 2014.08.27
AIX RPM 패키지모음  (0) 2014.08.27
파일질라 ver 3.4.0 오류메세지  (0) 2014.08.27
jBoss7 admin 계정 생성  (0) 2014.08.27
tar 명령어  (0) 2014.08.27
apache 데몬 실행 권한 설정  (0) 2014.08.27
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,