0. 환경
macbook-pro 13” 2012 mid / 10GB
parallels9 ubuntu 12.04 LTS
apache2 / tomcat7.0.52(수동설치) / java7
1. 필요성
AJP는?
- Tomcat 설치시 AJP (Apache Jserv Protocol)를 이용하여 HTTP를 요청을 수신하는 Connector가 포함됨
- Tomcat은 직접 HTTP 요청을 수신받아 처리할 수도 있지만 AJP를 이용하면 조금 더 낮은 단계에 있는 시스템(ajp를 지원하는 load balancing system, proxy server, apache httpd)에게 일부를 위임받아 처리하므로 성능상 유리함
참고자료
2. 진행흐름
libapache2_mod_jk 설치
- mod_jk는 mod_jserv가 발전된 형태로 단순
- Tomcat Web Container와 다양한 Web Server (Apache, iPlanet, Sun One 과 같은)를 연결하기 위해 사용됨
- mod_jserv는 http와 https를 구분하지 못하지만 mod_jk는 ajp13_protocal를 사용하여 따로 처리
Apache Httpd에게 mod_jk의 존재를 알림
package로 설치했기 때문에 대부분의 설정이 완료된 상태지만 약간의 추가 설정이 필요하다.
필요없는 Tomcat Http Port 제거
tomcat은 기본적으로 4개 포트를 가진다. web service를 Tomcat으로만 구성할 경우 client의 요청을 http, https를 통해서만 받는다. 하지만 Apache Httpd와 연동할 경우 직접 요청을 받지 않으므로 http port를 제거할 수 있다.
시스템 내부적으로 사용할 Tomcat Redirect Port 변경 (8443 -> 443)
여기서 중요한 점은 redirect port (https)는 남겨둬야 한다. Apache Httpd에서 https로 요청받은 경우 Tomcat에게도 그래로 전달해야하기 때문이다. Apache Httpd의 https port는 기본적으로 443 port 이다.
(이 부분은 믿지마세요. 아직 ssl 설정을 잘 모름요 ㅠ)
(1~1024port는 system이 관리 참고)
Port Name | 특징 |
---|---|
server port | server의 shutdown을 받는 port |
http port | http 서비스를 위한 port |
redirect port | https로 요청이 들어온 경우 설정된 port로 redirect |
AJP port | (Apache Jserv Protocol) web server의 요청을 처리하는 port |
mod_jk의 worker 설정변경
Apache Httpd에서 Tomcat으로 정보를 전달할 Port를 설정한다.
당연히 Tomcat의 AJP Port를 입력한다.
참고
- websphere
- vmware KB - How can Tomcat require (redirect to ) a secure connection when …
- nabble.com - redirect port for AJP
- en.wiki - mod-jk
- tenten.tistory - mod_jk
- scarlett.tistroy - ajp connector - ssl.conf 구성
3. 설치방법
mod_jk package 다운
sudo apt-get install libapache2-mod-jk
Apache에 mod_jk 설정
# sudo권한으로 default를 연다.
sudo vi /etc/apache2/sites-available/default
# ssl관련 설정은 동일 directory내 default-ssl
# 파일명이 다를 수 있다고 함
<!--
default 파일의 마지막 부분
ssl은 비슷하다고 하나 되는지 아직 https로 test하지 못함 ㅠㅠ
https 인증서는 돈을 내야 한다나 뭐라나...
-->
<!-- 윗 부분 생략 -->
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
<!--
mount jk module
자신의 웹서버 환경에 맞게 변경
jKMount /*.do myworker, JkMount /*.jsp myworker
-->
JkMount /* ajp13_worker
</VirtualHost>
tomcat7의 port 재설정
<!--
- $CATALINA_HOME="tomcat7의 directory 위치"
- $CATALINA_HOME/conf/server.xml 을 열어서 아래 코드 중 일부 수정
- 아래 코드는 주석이 제거됨
-->
<?xml version='1.0' encoding='utf-8'?>
<!-- server에 shutdown 신호를 전달하는 port -->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<!--
모든 요청이 Apache httpd를 통해 받으므로
Http Port 제거(주석처리) -->
<!-- <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> -->
<!--
ajp port 번호기억 후 mod_jk에 설정저장
redirect port는 8443 -> 443으로 변경 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />
<!-- 이하 생략 -->
<Engine name="Catalina" defaultHost="localhost">
<!-- ... -->
</Engine>
</Service>
</Server>
mod_jk의 worker 설정변경
# sudo권한으로 workers.properties에 들어감
sudo vi /etc/libapache2-mod-jk/workers.properties
# 주석 제거됨
# tomcat의 directory 위치를 적는다
workers.tomcat_home=$CATALINA_HOME
# JDK의 directory 위치를 적는다
workers.java_home=$JAVA_HOME
ps=/
worker.list=ajp13_worker
# Tomcat의 server.xml에서 설정했던 AJP Port번호를 입력
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13_worker
4. 확인
서버 재시작
# 시스템 상황에 따라 실행방법이 다를 수 있음
sudo service tomcat7 restart
sudo service apache2 restart
# 실행이 안된다면 다른 인터넷 참고하시고 아무튼 재실행하시면 됨
정상시
- localhost:80 접속시 tomcat의 webapps에 배포된 자료가 보여짐
- 아래 command 입력시 다음과 같은 log가 보여짐
# command
tail /var/log/apache2/error.log
# log
[Sun Mar 30 11:30:06 2014] [notice] Apache/2.2.22 (Ubuntu) mod_jk/1.2.32 PHP/5.3.10-1ubuntu3.10 with Suhosin-Patch configured -- resuming normal operations
비정상시
apache2에 mod_jk의 설정이 안 되있는 경우
# apache2가 설치된 directory로 이동
cd /etc/apache2/
하위 폴더에 mods-enable과 mods-available이 존재한다.
보통 mods-available에 jk.conf라는 설정파일과, jk.load라는 실행파일이 있다. (이름은 다를 수 있다. ) 앞의 두 파일이 mods-enable에 symbolic link로 연결되어야 mod_jk가 실행될 수 있다.
* 참고자료
Written with Dec7.
댓글 없음:
댓글 쓰기