[CONFIG] 아파치+톰캣 mod_jk2로 연동하고 가상호스트 이용
아파치+톰캣 연동은 jsp 호스팅 업체에서 가장 많이 쓰이는 방식으로
jk, jk2, webapp의 연동방식이 있고,
그중 jk2방식이 성능도 좋고, 설정방법도 간단한 거 같습니다.
아파치와 톰캣을 연동하는 이유는 대략
jsp나 서블릿이 아닌 컨텐츠는 아파치가 담당함으로써 성능의 향상을 꾀할 수 있고,
아파치의 가상호스트를 이용하면 간단하게 여러 서비스를 할수 있기 때문이 아닐까 생각됩니다.
실제로 jsp 호스팅 업체에서는 아파치와 톰캣을 jk2 connector를 이용하여 연동서비스를 하고 있습니다.
jsp 호스팅 서비스를 보면, 공용톰캣, 단독톰캣을 보실 수 있을 겁니다....
사용자의 호스팅은 아파치가 담당하고 공용톰캣이냐 단독톰캣이냐에
따라서 uri 매핑을 달리해주면 서비스가 가능합니다.
아파치에서의 uri 매핑때문에 jsp호스팅을 받을 때 서블릿을 추가할 때 매핑 요청을 해야 하는 겁니다.
만약, 서블릿에 같은 확장자를 준다면 아파치측에서 맴핑할 일이 별로 없겠죠...
확장자가 없다면, 매 서블릿마다 매핑을 해주어야 하고요.....
1. 환경
아파치2.0
톰캣4.0
Web Server Connector : jk2
따라서 설명은 위의 중심이고 사용하면 버전에 따라서 조금씩 다를 수 있습니다.
url 주소창에서
store를 입력하면 내 개인 자료실이 나타나고
localhost를 입력하면 현재 작업중인 프로젝트가 나타나게 만들겠습니다.
%Windows%\System32\drivers\etc\host 파일을 엽니다.
만약 host파일이 없을 경우 host.sam의 이름을 변경하시면 됩니다.
아래 처럼 한줄을 추가합니다.
host 파일은 윈도우즈가 store라는 이름을 갖는 호스트의 아이피 주소를 등록하는 파일입니다.
127.0.0.1 localhost
127.0.0.1 store
아파치를 설치합니다.
설치가 완료되면 %Apache2%\conf\httpd.conf를 엽니다.
%Apache2%는 아파치가 설치되어 있는 홈디렉토리입니다.
수정할 것은 별로 없습니다..
모듈부분을 찾아서 아래 한줄을 추가합니다.
LoadModule jk2_module modules/mod_jk2.so
그리고 제일 마지막 Virtual Hosts 부분에서 다음과 같이 추가합니다.
아래 가상호스트 방식이 이름기반의 가상호스트로 이방식을 사용할 경우,
localhost를 아래 처럼 따로 등록해주어야 합니다...
DocumentRoot는 사용자에 맞게 지정하시면 됩니다.
NameVirtualHost *
ServerAdmin webmaster@mail.baygroup.org
DocumentRoot d:/webproject/webhome/proja/ROOT
ServerName localhost
ServerAdmin webmaster@mail.baygroup.org
DocumentRoot d:/webproject/webhome/mystore/ROOT
ServerName store
2. Web Server Connector 설치...
http://ftp.kaist.ac.kr/pub/Apache/jakarta/tomcat-connectors/jk2/binaries/win32/
에서 최신버전의 mod_jk2를 다운받습니다.
압축을 풀면,
modules, doc, conf 폴더가 있고, modules 폴더의 mod_jk2.so 를
%Apache2%\modules에 복사합니다.
conf 폴더에 있는 workers2.properties 는 %Apache2%\conf에 복사합니다.
%Apache2%\conf\workers2.properties를 열고 다음과 같이 수정합니다.
[logger.apache2]
level=DEBUG
[shm]
file=%Apache2%/logs/shm.file
size=1048576
# Example socket channel, explicitly set port and host.
[channel.socket:localhost:8009]
port=8009
host=127.0.0.1
[channel.socket:store:8010]
port=8010
host=127.0.0.1
# define the worker
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009
[ajp13:store:8010]
channel=channel.socket:store:8010
# Announce a "status" worker
[status:status]
# Uri mapping
[uri:localhost/*.jsp]
worker=ajp13:localhost:8009
[uri:localhost/*.nfl]
worker=ajp13:localhost:8009
[uri:store/*.jsp]
worker=ajp13:store:8010
[uri:localhost/*.jsp]
worker=ajp13:localhost:8009
는 http://localhost의 *.jsp의 요청은 ajp13:localhost:8009 라는 worker라고 설정한다는 뜻입니다.
따라서 ajp13:localhost:8009 라는 worker를 아래와 같이 등록시킵니다.
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009
이것은 이 worker가 channel.socket:localhost:8009로 요청을 넘긴다는 겁니다.
따라서 channel.socket:localhost:8009의 이름을 갖는 다음과 같은 채널이 존재해야 합니다.
[channel.socket:localhost:8009]
port=8009
host=127.0.0.1
저는 store와 localhost 두개를 사용함으로 두개를 등록시켜놨습니다....
또한 uri 매핑에 localhost/admin/* 이런 매핑도 가능합니다...
3. 톰캣 설정
%Tomcat%\conf\server.xml
을 열고 앨리먼트내에 다음 줄을 삽입합니다.
만약, store, localhost 둘다 공용톰캣으로 설정한다면 한줄 더 추가하여 포트만 8009로 바꿔주면 되겠죠~~
port="8010" minProcessors="5" maxProcessors="75" enableLookups="true" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="0" useURIValidationHack="false" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
앨리먼트의 docBase를 수정해 주시면 됩니다....
이렇게 수정하시면, 아파치 먼저 띄우고 톰캣을 띄우면 정상적으로 작동할 겁니다...
아까 웹상에서 바로 입력하다가 다 날리는 바람에 처음 작성할때보다 내용이 조금 부실해 졌습니다..
궁금한점 있으시면 답글이나 쪽지보내주세요..
답변해드리거나 수정하여 업데이트 하겠습니다...
jk, jk2, webapp의 연동방식이 있고,
그중 jk2방식이 성능도 좋고, 설정방법도 간단한 거 같습니다.
아파치와 톰캣을 연동하는 이유는 대략
jsp나 서블릿이 아닌 컨텐츠는 아파치가 담당함으로써 성능의 향상을 꾀할 수 있고,
아파치의 가상호스트를 이용하면 간단하게 여러 서비스를 할수 있기 때문이 아닐까 생각됩니다.
실제로 jsp 호스팅 업체에서는 아파치와 톰캣을 jk2 connector를 이용하여 연동서비스를 하고 있습니다.
jsp 호스팅 서비스를 보면, 공용톰캣, 단독톰캣을 보실 수 있을 겁니다....
사용자의 호스팅은 아파치가 담당하고 공용톰캣이냐 단독톰캣이냐에
따라서 uri 매핑을 달리해주면 서비스가 가능합니다.
아파치에서의 uri 매핑때문에 jsp호스팅을 받을 때 서블릿을 추가할 때 매핑 요청을 해야 하는 겁니다.
만약, 서블릿에 같은 확장자를 준다면 아파치측에서 맴핑할 일이 별로 없겠죠...
확장자가 없다면, 매 서블릿마다 매핑을 해주어야 하고요.....
1. 환경
아파치2.0
톰캣4.0
Web Server Connector : jk2
따라서 설명은 위의 중심이고 사용하면 버전에 따라서 조금씩 다를 수 있습니다.
url 주소창에서
store를 입력하면 내 개인 자료실이 나타나고
localhost를 입력하면 현재 작업중인 프로젝트가 나타나게 만들겠습니다.
%Windows%\System32\drivers\etc\host 파일을 엽니다.
만약 host파일이 없을 경우 host.sam의 이름을 변경하시면 됩니다.
아래 처럼 한줄을 추가합니다.
host 파일은 윈도우즈가 store라는 이름을 갖는 호스트의 아이피 주소를 등록하는 파일입니다.
127.0.0.1 localhost
127.0.0.1 store
아파치를 설치합니다.
설치가 완료되면 %Apache2%\conf\httpd.conf를 엽니다.
%Apache2%는 아파치가 설치되어 있는 홈디렉토리입니다.
수정할 것은 별로 없습니다..
모듈부분을 찾아서 아래 한줄을 추가합니다.
LoadModule jk2_module modules/mod_jk2.so
그리고 제일 마지막 Virtual Hosts 부분에서 다음과 같이 추가합니다.
아래 가상호스트 방식이 이름기반의 가상호스트로 이방식을 사용할 경우,
localhost를 아래 처럼 따로 등록해주어야 합니다...
DocumentRoot는 사용자에 맞게 지정하시면 됩니다.
NameVirtualHost *
ServerAdmin webmaster@mail.baygroup.org
DocumentRoot d:/webproject/webhome/proja/ROOT
ServerName localhost
ServerAdmin webmaster@mail.baygroup.org
DocumentRoot d:/webproject/webhome/mystore/ROOT
ServerName store
2. Web Server Connector 설치...
http://ftp.kaist.ac.kr/pub/Apache/jakarta/tomcat-connectors/jk2/binaries/win32/
에서 최신버전의 mod_jk2를 다운받습니다.
압축을 풀면,
modules, doc, conf 폴더가 있고, modules 폴더의 mod_jk2.so 를
%Apache2%\modules에 복사합니다.
conf 폴더에 있는 workers2.properties 는 %Apache2%\conf에 복사합니다.
%Apache2%\conf\workers2.properties를 열고 다음과 같이 수정합니다.
[logger.apache2]
level=DEBUG
[shm]
file=%Apache2%/logs/shm.file
size=1048576
# Example socket channel, explicitly set port and host.
[channel.socket:localhost:8009]
port=8009
host=127.0.0.1
[channel.socket:store:8010]
port=8010
host=127.0.0.1
# define the worker
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009
[ajp13:store:8010]
channel=channel.socket:store:8010
# Announce a "status" worker
[status:status]
# Uri mapping
[uri:localhost/*.jsp]
worker=ajp13:localhost:8009
[uri:localhost/*.nfl]
worker=ajp13:localhost:8009
[uri:store/*.jsp]
worker=ajp13:store:8010
[uri:localhost/*.jsp]
worker=ajp13:localhost:8009
는 http://localhost의 *.jsp의 요청은 ajp13:localhost:8009 라는 worker라고 설정한다는 뜻입니다.
따라서 ajp13:localhost:8009 라는 worker를 아래와 같이 등록시킵니다.
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009
이것은 이 worker가 channel.socket:localhost:8009로 요청을 넘긴다는 겁니다.
따라서 channel.socket:localhost:8009의 이름을 갖는 다음과 같은 채널이 존재해야 합니다.
[channel.socket:localhost:8009]
port=8009
host=127.0.0.1
저는 store와 localhost 두개를 사용함으로 두개를 등록시켜놨습니다....
또한 uri 매핑에 localhost/admin/* 이런 매핑도 가능합니다...
3. 톰캣 설정
%Tomcat%\conf\server.xml
을 열고 앨리먼트내에 다음 줄을 삽입합니다.
만약, store, localhost 둘다 공용톰캣으로 설정한다면 한줄 더 추가하여 포트만 8009로 바꿔주면 되겠죠~~
port="8010" minProcessors="5" maxProcessors="75" enableLookups="true" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="0" useURIValidationHack="false" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
앨리먼트의 docBase를 수정해 주시면 됩니다....
이렇게 수정하시면, 아파치 먼저 띄우고 톰캣을 띄우면 정상적으로 작동할 겁니다...
아까 웹상에서 바로 입력하다가 다 날리는 바람에 처음 작성할때보다 내용이 조금 부실해 졌습니다..
궁금한점 있으시면 답글이나 쪽지보내주세요..
답변해드리거나 수정하여 업데이트 하겠습니다...
댓글