· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Apache2와 Tomcat5 연동하기

Apache2와 Tomcat5 연동하기


작성자 : 박상현(브루펜시럽)

2006년 7월 9일 일요일 오전 5시즘 작성을 시작하였습니다. 기후는.. 제주도로 태풍이 북상중이라고 합니다.

1. 서론


저는 사정상 PHP와 JSP 를 모두 처리해줄 필요가 있었기 때문에 Apache2/Tomcat5 연동 모델을 선택했습니다.

각자 처한 환경에 따라서 이 모델이 최선이 아닐 수도 있습니다. Tomcat5 의 standalone 모드도 고려해주시기 바랍니다. ^^

연동시 사용되는 connector 에는 mod_jserv, JK, JK2, mod_webapp or mod_proxy 등이 있습니다.

자세한 내막은 알지는 못하지만 jserv 와 mod_webapp 는 오래전부터 외면받아온 것 같고

JK2 는 개발자들의 흥미 부족을 이유로 개발이 중단되었습니다.

따라서 JK 와 mod_proxy 가 남는 데.. Apache2.2 부터는 mod_proxy_ajp 모듈이 제공됩니다.

국내에서는 해당 모듈을 이용한 연동 사례를 찾을 수 없어서 도전해보았습니다.


연동시 테스트된 환경은 다음과 같습니다.

OS Fedora core 5
Apache2.2 httpd-2.2.2-1.0
Tomcat5.5 tomcat5-5.5.15-1jpp_6fc
Java jdk 1.5.0_07


리눅스에 입문한지 얼마 안되어서 FC5 외의 환경에 대해서는 잘 알지 못하기 때문에

테스트에 사용된 설치 방법이 제공되지 않거나 적절하지 않을 수 있으며 언급된 경로등이 다를 수 있습니다.

find / -name {대상} 혹은 which {대상} 등으로 적절한 경로를 확인하시기 바랍니다.


2. Apache 2.2


  • yum 을 이용해서 관련 rpm 패키지들을 설치합니다.
# yum -y install httpd\*

  • httpd.conf 파일을 열어서 다음에 언급된 구문들을 찾아서 수정해줍니다.

    각 문구들이 의미하는 바에 대해서는 별도의 문서를 참고하여 주시기 바랍니다.

    제가 수정한 부분에 대해서만 언급하였습니다.
# vim /etc/httpd/conf/httpd.conf
서버관리자의 email 주소를 입력해줍니다. 에러페이지에 표시됩니다.
ServerAdmin root@localhost
주석을 풀어줍니다. 브라우저에서 http://127.0.0.1/~계정 으로 접속하면 /home/계정/public_html/ 에서 웹문서을 찾게 됩니다.
<IfModule mod_userdir.c>
    UserDir public_html
</IfModule>
언어별 우선 순위라고 합니다. ko 를 맨 앞으로 옮겨줍니다.
LanguagePriority ko en ca cs da de el eo es et fr he hr it ja ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
UTF-8 을 사용하기엔 아직 환경이 충분히 조성되지 않은 것 같습니다. 인코딩 방식을 EUC-KR로 변경해줍니다.
AddDefaultCharset EUC-KR

  • 방화벽에서 80번 포트가 열렸는 지 확인합니다.


  • 아파치 데몬을 시작합니다.
# service httpd start

  • 브라우저에서 http://127.0.0.1/ 로 접속해봅니다. 참고로 페도라에서는 Fedora Core Test Page 가 떴습니다.


  • 아파치 데몬을 끝내려면 다음과 같이 입력합니다.
# service httpd stop


3. J2SE


Fedora core 5 에서는 JDK 5.0 을 rpm.bin 을 받아서 설치할 경우에 각종 경로 설정 문제가 발생하게 됩니다.

따라서 다음 싸이트에 나와있는 방법을 사용했습니다. http://www.fedorafaq.org/#java

그 외의 환경에서는 JavaInstallation 에 나와있는 설치 방법을 따르시기 바랍니다.


# yum -y install rpm-build

  • 다운 받은 JDK 파일을 빌드를 위해서 source 디렉토리로 이동 시킵니다.
# mv jdk-1_5_0_07-linux-i586-rpm.bin /usr/src/redhat/SOURCES/

# rpmbuild --rebuild java-1.5.0-sun-1.5.0.07-1jpp.nosrc.rpm
꽤 오래 작업합니다. 커피 드시면서 기다립니다.

  • 빌드된 rpm 을 설치합니다.
# yum -y localinstall /usr/src/redhat/RPMS/i586/java-1.5.0-sun-*
제 경우에는 nosigned 메시지와 함께 설치가 되지 않았습니다. 이 경우에는 rpm -Uvh 로 설치해주면 됩니다.

설치하는 패키지 중에 unixODBC-devel 패키지에 의존성이 있는 패키지가 있으니 먼저 설치해줍니다.
# yum -y install unixODBC-devel
# rpm -Uvh ~~ 

  • 설치가 정상적으로 되었는 지 확인해봅니다.
# java -version
java version "1.5.0_07" 과 같이 나오면 성공입니다.

만약 1.4.2 버전으로 나온다면 alternatives 에서 java 가 manual mode로 1.4.2 버전 디렉토리를 링크로 삼고 있을 수 있습니다.

다음과 같이 입력하시거나
# alternatives --auto java
다음과 같이 입력한 후에 1.5.0 버전 경로를 선택해주시면 됩니다.
# alternatives --confige java


4. Tomcat 5.5


  • yum 을 이용해서 관련 rpm 패키지들을 설치합니다.
# yum -y install tomcat5\*

  • 방화벽에서 8080포트를 열어줍니다.

  • 다음 파일을 수정합니다.
# vim /usr/share/tomcat5/bin/relink 
이 구문을 찾아서 -type d 옵션을 뒷편으로 옮겨준다.

find /var/lib/tomcat5/webapps -type d -mindepth 1 -maxdepth 2

find /var/lib/tomcat5/webapps -mindepth 1 -maxdepth 2 -type d

  • 다음 파일을 수정합니다.
# vim /usr/share/tomcat5/conf/workers.properties
#workers.tomcat_home=/var/tomcat
workers.tomcat_home=/usr/share/tomcat5

#workers.java_home=/opt/IBMJava2-13
workers.java_home=/usr/lib/jvm/java

  • tomcat5 admin툴에서 사용되는 계정 정보가 담겨 있습니다. 수정해줍니다. ( adminpassword 부분은 원하시는 패스워드를 입력하세요. )
# vim /usr/share/tomcat5/conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="admin" password="adminpassword" roles="admin,manager,tomcat"/>
</tomcat-users>

  • 사용자 계정을 지원하기 위하여 수정해줍니다.
# vim /usr/share/tomcat5/conf/server.xml
<Host name="localhost" ...>
  ...
  <Listener className="org.apache.catalina.startup.UserConfig"
            directoryName="public_html"
            userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
  ...
</Host>
적절한 호스트 아래에 다음의 Listener를 추가하게 되면 /etc/passwd 파일을 참고로 해서

http://127.0.0.1:8080/~user_account 로 들어온 접속을 /home/user_account/public_html 로 연결하여 준다고 합니다.


  • tomcat을 실행합니다.
# service tomcat5 start
브라우저에서 http://127.0.0.1:8080/로 접속해봅니다. 고양이가 나타나면 OK.

  • 이제 tomcat을 종료시킵니다.
# service tomcat5 stop


5. mod_proxy_ajp


mod_proxy_ajp.conf 에 기술된 mod_proxy_ajp 을 이용하는 방법은

다음과 같이 설정하여 줌으로서 특정 URL로 들어온 요청은 전부 톰캣이 처리하게 하는 것입니다.
ProxyPass /tomcat/ ajp://localhost:8009/
이 경우에는 jsp나 서블릿과 html 문서와 이미지등을 서로 경로를 구분해서 저장해야 본래의 목적을 달성할 수 있다는 문제점이 있습니다.

따라서 mod_rewirte 를 이용해서 .jsp 파일만 톰캣이 처리하는 방법을 사용하였습니다.

  • proxy_ajp.conf 파일을 열어서 다음과 같이 추가해줍니다.
# vim /etc/httpd/conf.d/proxy_ajp.conf
RewriteEngine On
#RewriteLog /root/mod_proxy_ajp.txt
#RewriteLogLevel 9
RewriteCond %{REQUEST_FILENAME} .jsp
RewriteRule (.*) ajp://localhost:8009$1 [P]

  • Tomcat5 의 홈디렉토리를 /var/www 로 변경해줍니다.
# cd /usr/share/tomcat5/webapps/ROOT
# mv ROOT ROOT.old
# ln -s /var/www/html /usr/share/tomcat5/webapps/ROOT
# cp -r /usr/share/tomcat5/webapps/ROOT.old/WEB-INF/ /usr/share/tomcat5/webapps/ROOT/WEB-INF

  • 아파치 데몬을 실행합니다.
# service httpd start

  • tomcat 을 실행합니다.
# service tomcat5 start

  • 테스트용으로 test.jsp 파일을 작성합니다.
# vim /var/www/html/test.jsp
<%@ page contentType="text/html; Charset=EUC-KR" %>
<%
out.println("Hello");
%>

6. 기타 사항


페도라에서 service 명령어를 인식 못할 때는

일반 계정에서 root 계정으로 넘어갈 때 su 라고만 쳐줘서 /sbin 디렉토리가 PATH 에 추가되지 않은 경우일 수도 있습니다.
# . /etc/profile
하시면 PATH 가 적절하게 갱신되며 service 명령어가 제대로 인식될 것입니다. 다음부터는 su - 라고 입력하시는 게 바람직합니다.

뭐 제가 잘 몰라서 그랬습니다. 흐늘흐늘


7. 참고 사이트


아래의 문서들 덕분에 무사히 항해를 마치고 라꾸라꾸 속으로 들어가봅니다. 감사합니다.

8. 피드백

뭐라도 괜찮으니 한마디씩 써주고 가세요. ;ㅁ;

음 굿 ㅋ? -- ddakker

잘 읽고 갑니다. 수고에 감사드립니다. :-) -- allieus

좋은 문서 감사합니다. ^^

저희도 proxy_ajp를 사용하는데 저렇게 rewrite를 이용해서 특정 확장자에 대해서만 처리 할 수도 있군요. jk 커넥터보다 훨씬 편하기는 합니다. 좋은 글 감사합니다.

아놔 상현이형;;; 이름이 익숙타했더니 역시형이었어;; -- 멀티 실습조교 ㅋㅋ

ID
Password
Join
Your mode of life will be changed for the better because of good news soon.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-09-05 11:09:12
Processing time 0.0118 sec