ajp 프로토콜 설정
보통 톰캣 서버나 JAVA EE 서버를 사용할 때에는 load balancing을 위해 nginx나 apache 등 웹 서버를 배치한다.
이중 아파치와 톰캣을 연결하기 위해 크게 AJP 프로토콜과 reverse proxy를 사용한다.
reverse proxy는 자바 서버나 아파치에 국한되지 않고, 모든 종류의 서버에 사용할 수 있다는 장점이 있지만, 설정이 좀 더 복잡하다.
AJP 프로토콜은 아파치 재단에서 만든 프로토콜인데, 아파치 웹 서버와 JAVA EE 서버 간의 연결을 위한 프로토콜이다.
지난 포스팅에서는 apache를 빌드했었다. 저 빌드로는 아파치에서 기본적인 html 페이지밖에 띄워주진 못하지만, 목적이 실제 운영이 아닌 AJP 프로토콜을 이용한 통신에서 테스트하는 것에 있으므로 php 등이 작동하든 말든 큰 상관은 없다.
AJP 프로토콜을 사용하기 위해선 AJP 모듈을 설치해야 한다. 이는 톰캣 공식 홈페이지에 들어가면 설치할 수 있다.
tomcat에는 포함되어 나오기 때문에 설치해줄 필요가 없다.
링크는 아래와 같다.
기본적으로 아파치와 아파치의 모듈은 C로 작성된 프로그램이기 때문에, 빌드 방식은 다 똑같다.
다만 이번엔 tomcat-connector directory에서 native 디렉토리까지 들어가야 한다.
./configure --with-apxs=/home/hello/apache/bin/apxs
make && make install
빌드가 끝났으면 apache 디렉토리 내의 modules 디렉토리에 mod_jk.so가 생긴 것을 볼 수 있다.
이제 conf/httpd.conf로 들어가서
LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
JkWorkersFile /home/hello/apache/conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMount /* worker1
</IfModule>
를 추가한다.
JkWorkersFile은 연동할 서버의 목록과 사용할 포트, host 등을 표시한 파일의 경로를 의미한다.
JkMount는 AJP가 적용될 context 경로를 의미한다.
그리고, conf directory 내에 workers.properties를 추가한다.
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=127.0.0.1
worker.worker1.type=ajp13
여기서 list에 여러 worker를 할당할 수 있는데, 각 worker는 ,로 구분한다.
여기서 나오는 "worker1"은 httpd.conf 파일에서 각 context를 어떤 worker에 mount 해줄지 결정할 때 쓰인다.
톰캣에선 기본 설정에 port 80009가 설정되어 있다. tomcat/conf/server.xml에 보면 아래와 같이 설정이 있다.
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
여기서 인코딩을 변경할 수 있다. URIEncoding을 추가하면 된다. 기본 인코딩은 ISO-8859-1이다.
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
이제 TOMCAT_HOME/bin에 들어가 ./startup.sh 를 실행해 톰캣을 해 테스트 하면 잘 작동한다.