> Hello World !!!

     

@syaku

Apache Tomcat 연동 및 Rewrite 사용

written by Seok Kyun. Choi. 최석균

 Apache 2.2.x 와 Tomcat 5.5.x 를 연동하는 설정법

※ 버전 : Apache 2.2.17 , Tomcat 5.5.25
※ 기타 : Windows

아파치(Web Server)는 정적스크립트를 처리하며, 톰캣(WAS) 는 동적 스크립트를 처리한다.
정적스크립트 : HTML , CSS , 자바스크립트 등등
동적스크립트 : JSP , PHP , ASP 등등

톰캣만 구축하면 톰캣이 처리해야 하는 일이 많아 부담이 될 수 있다.
이를 아파치와 톰캣을 설치해 각각의 역활에 따라 일 처리를 분담하게 된다면 부담을 최소화 할 수 있게된다.
그리고 서버 두대를 구성하여, 각각에 아파치 서버와 톰캣 서버 설치하면 더 좋은 성능을 발휘할 수 있을 것 이다.

[Blog2Book 자바 성능을 결정짓는 코딩 습관과 튜닝이야기 에서 가져옴...]
웹 서버는 반드시 WAS 앞에 두어야 한다. 웹 서버를 WAS 뒤에 둘 사람은 없겠지만, WAS를 웹서버로 사용하면 안된다는 것이다.
왜냐하면 WAS 는 Web Application Server 이기 때문이다. 웹에서 사용하는 애플리케이션 서버지 웹 서버가 아니다.
정적인 부분은 웹서버에서 처리해야 한다. 그렇지 않으면 WAS 서버에서 웹 서버의 역활까지 수행해야 한다.
웹 서버를 WAS 서버 앞에 두지 않으면 이미지, CSS, 자바스크립트, HTML 등을 처리하느라 아까운 WAS 서버의 스레드를 점유하게 된다.
반드시 상용 웹 서바나 아파치 웹를 WAS 앞 단에 두고 운영하기 바란다.

 Apache 설정

Apache 와 Tomcat이 이미 설치된 상태라고 간주하고 서비스는 모두 정지된 상태로 둔다.

톰캣 모듈을 내려받자. 버전에 따라 약간의 차이가 있다.

mod_jk-1.2.31-httpd-2.2.3.so

아파치 설치된 하위 폴더인 modules 에 위 파일의 이름을 mod_jk.so 변경하고 저장한다.
아파치 설치된 하위 폴더인 conf 에 httpd.conf 파일을 열자.

# 맨 마지막 줄에 삽입하자. 설치된 아피치 폴더 하위를 가르킨다.
Include conf/mod_jk.conf

이제 저장하고 열었던 파일을 닫는 다.
위 빨간색표신된 파일은 존재하지 않으므로 생성하고 아래와 같이 작성한다.
아래에 빨간색을 제외하고 같은 색상은 서로 연결되는 키워드니 꼭 같아야한다.

[ mod_jk.conf 설정 ]

# Tomcat 모듈
LoadModule jk_module modules/mod_jk.so

# 아파치가 설치된 절대경로로 작성한다. 예) D:/apache/
JkWorkersFile "아파치가 설치된 절대경로/conf/workers.properties"

# 톰캣이 설치된 절대경로로 작성한다. 로그를 표시하기 위함이다.
JkLogFile "톰캣이 설치된 절대경로/logs/mod_jk.log"
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat "%w %V %T"

[2011.08.04 내용제거]
# 마운트할 파일 및 폴더 설정
JkMount /*.jsp ajp13
#JkUnmount /*.php
ajp13

저장하고 닫는다. 위에 빨간색으로 표신된 파일은 존재하지 않으므로 생성하고 아래와 같이 작성한다.

[ workers.properties 설정 ]

workers.tomcat_home="톰캣이 설치된 절대경로"
workers.java_home="자바 JDK 가 설치된 절대경로"
# 아래 경로에 사용할 프로퍼티
ps=/

worker.list = ajp13

[2011.08.04 내용수정]
# 톰캣과 연결되는 커넥터 포트
worker.ajp13.port = 8009
worker.ajp13.host = localhost
worker.ajp13.type = ajp13
worker.ajp13.lbfactor = 1

# 가상호스트를 사용할 경우 버추얼호스트 내에 jk 마운트한다.
<VirtualHost *:80>
   .........................
  JkMount /* ajp13
</VirtualHost>


 Tomcat 설정 

톰캣이 설치된 경로 하위에 conf/server.xml 파일을 열자.

# 2011.09.05 내용제거
리스너가 설정된 부분에 아파치 모듈을 삽입한다.
<Listener className="org.apache.jk.config.ApacheConfig" modJk="아파치가 설치된 절대경로\modules\mod_jk.so" />


톰캣을 최초로 설치하게 되면 기본적으로 서비스가 한개 등록되어있다.

# 톰캣으로 바로 접속하고 싶을 경우 다른 포트를 지정한다. 필요없을 경우 사용하지 않아된다.
<Connector ~ 노드의 port 속성을 톰캣에서 구동되는 웹서비스 포트를 말한다.
maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true">


# 아파치와 연동되는 포트를 지정합니다.
<Connector 노드의 port = "8009" 속성은 이미 생성한 workers.properties 에서 톰캣과 연결되는 커넥터 포트와 동일하게 한다.
...............  protocol="AJP/1.3" />

아파치에서 설정한 실제 웹서비스 폴더와 같이 톰캣에도 호스트 폴더를 동일하게 설정한다.

연동작업을 모두 마쳤다. 서비스 구동순서는 톰캣을 먼저 구동하고, 그후 아파치를 구동하면 된다.

브라우저에서 http://locahost:아파치포트 http://localhost:톰캣포트 두개의 서비스 화면이 동일하면 정상적으로 완료된 것이다.
실제 서비스되는 쪽을 아파치서버이다.

* 80포트는 기본 포트이므로 url 뒤에 포트번호를 붙이지 않아도 된다.


 Rewrite_module 사용하기 

아파치와 톰캣을 연동하고 rewrite_module 을 사용하기 위해 다음과 같이 한다.

우선 rewrite 를 사용하는 이유는 다양하겠지만, 외부에서 서버로 접근하여 들어오는 url을 정해진 규칙에 따라 필터? 재 갱신해주는 역활을 한다.
나 같은 경우 톰캣은 서로 다른 도메인 간에 세션 공유가 원활하지 않아서, www.test.com www.test.co.kr test.com test.co.kr 등의 도메인을 모두 연결하고 사용할 경우, 대표 도메인으로 포워딩? url을 특정 한개의 도메인으로 변경되도록 적용하여 사용하고있다.

즉, 위 도메인 4개중 어떤 걸로 접속해도 무조건 www.test.com 으로 접속될수 있게 구현하였다.

아파치 설정 httpd.conf 열어 아래의 모듈을 활성화 시켜주자. # 주석이 있으면 제거해주면 된다.

LoadModule rewrite_module modules/mod_rewrite.so

Directory 설정에서 AllowOverride All 로 변경해주면 된다.

아파치와 php를 사용할 경우 웹서비스 루트 폴더 아래 .htaccess 파일을 생성해서 패턴을 적용하면 되겠지만, 아파치와 톰캣을
사용할 경우 이방법으로는 되지 않는 것 같다.
그래서 아파치 설정에서 톰캣과 연동하는 부분에서 규칙을 설정하면 된다.
가상호스트인 경우

<VirtualHost *:80>
...
...

RewriteEngine On
RewriteCond %{HTTP_HOST} ^test.co.kr$ [OR]
RewriteCond %{HTTP_HOST} ^www.test.co.kr$ [OR]
RewriteCond %{HTTP_HOST} ^test.com$ [NC]
RewriteRule ^/(.*) http://www.test.com/$1 [L,R]

</VirtualHost>

위 처럼 사이에 넣어주면 된다. 위의 규칙은 4가지 도메인중 어떤 걸로 들어오든 http://www.test.com 으로 변경하게 한다.

* Rewrite_module 에 사용하는 다양한 규칙은 직접 찾아보기 바랍니다.


Syaku Blog by Seok Kyun. Choi. 최석균.
posted syaku blog


http://syaku.tistory.com