아파치 웹 서버와 톰캣을 연동하기에 앞서 연동함으로써 얻는 이점은 무엇인지,

어떤 원리로 연동하게 되는지 알아보려합니다.

아파치와 톰캣을 연동하는 이유로 널리 알려진 바는 아래와 같습니다.

1. 톰캣은 정적인 페이지를 로드하기에 아파치 보다 느린 처리속도를 보인다.

2. 톰캣은 설정할 수 있는 내용들이 아파치에 비해 부족하다.

3. 톰캣은 아파치보다 부하에 약하다.

4. 톰캣만으로는 서블릿/JSP밖에 서비스할 수 없다.

5. 톰캣과 아파치를 연동하여 부하분담이 가능하다.(다수의 톰캣 구성으로의 로드밸런싱의 의미가 아닌 톰캣만으로 처리가능한 static page를 apache에서 대신함으로써의 부하 분담)

통상적으로 많은 사람분들이 말하시는 연동이유는 1번과 5번이 많은 것 같습니다.

톰캣으로 작업이 가능하지만, apache를 연동하여 static page의 처리를 분담하여 처리한다.

하지만 이에 대해서 인용되는 글이 있습니다.

톰캣과 아파치의 연동이 위와 같은 이유에서는 불필요하다는 요지의 글인데 아래 링크에서 확인 가능합니다.

http://www.tomcatexpert.com/blog/2010/03/24/myth-or-truth-one-should-always-use-apache-httpd-front-apache-tomcat-improve-perform

정리하면 톰캣 5.5이상에서 httpd의 native 모듈로 static page를 처리하므로 1번과 5번은 큰 의미가 없다는 것입니다.

즉 단순히 속도의 문제(1번)라면 (톰캣 5.5 이하의 버전일 경우를 제외할 때) 둘을 연동할 필요는 없습니다.
5번째 부하분담의 문제에는 1번의 경우와는 약간 다른데, 이 경우는 static page를 tomcat이 직접 처리하여 생기는 부하와 apache에서 대신처리하기 위해 앞쪽에 아파치를 놓음으로써 생기는 작업 분산에 대한 부하를 비교해봐야 할 것입니다.
(5번에 대해서는 정적인 페이지에 대한 처리로 인한 부하 감소 효과가 있을 것으로 생각합니다.)

5번의 경우 정확한 성능비교를 할 수 는 없었지만, 여러 정보를 종합해 볼때, staitc page의 처리 속도와 부하, 불안정성으로 인한 연동은 tomcat의 성능개선으로 인해 의미가 많이 줄어든 것 같습니다.

그렇다면 남은 이유는 2번과 4번입니다.

아파치의 다양한 옵션들(mod_security, mod_rewrite , 로드밸런싱등의 여러가지 모듈)을 사용할 수 있다는 점과, 다른 서버사이드 애플리케이션을 사용할 수 있다는 것이 큰 이점입니다.

예를 들어, apache와 tomcat으로 구축한 웹사이트 (html , css , jsp등)에서 보안모듈이나 , 리다이렉션 기능을 추가하는것은 간단한 일이며, 갑자기 php페이지가 추가되어야 한다고 해도, 이미 안정화된 사이트에서 추가로 php를 사용하는 것은 몇분이면 충분히 해결 할 수 있기 때문입니다.

종합해보면 , 기본적으로 apache에서 static page를 맡아 처리하고 tomcat은 JSP/Servlet 이라는 점에서의 연동도 의미가 있지만, 그보다 apache는 확장이라는 측면, tomcat의 자바업무 수행이라는 측면으로 자료의 확장자 이상의 의미로 연동한다고 생각합니다.

출처 : http://nomore7.tistory.com/5

apache는 참 심플한데, tomcat은 까다롭다..

설정하는 것도, 튜닝하는 것도 여러가지 손 봐줘야할 것들이 참 많다.

 

java와 php를 함께 사용 하기 위해서는 apache + tomcat 연동해서 사용 하는 방법이 가장 많이 사용 되며, 일반적인 방법이다.

또 한가지 방법은 php-java-bridge를 설치해서 연동 해주는 방법이 존재한다.

(헌데 이 방법은 시도 해보다가 실패하여 시간이 없는 관계로 다음 포스팅에 대체 하도록 할 예정.)

 

하고자 했던 작업은 이렇다 단독톰캣 사용 하다가 php를 사용해야 했고,

몇몇개의 서브도메인이 존재하며, port base의 가상호스트 설정도 필요.

(php-java-bridge 설치를 하고자 했으나 실패. 그래서 apache 연동 설정으로 변경.)

 

 

apache 설치과정 생략.

tomcat path : /usr/local/tomcat

apache path : /usr/local/apache2

php path : /usr/local/php

 

– tomcat 단독 구성 되어 있었기 때문에 80 port 사용 => 8080 port 변경

vi /usr/local/tomcat/conf/server.xml

#=== 중략 ====

<Connector port=”8080” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<!– A “Connector” using the shared thread pool–>
<!–
<Connector executor=”tomcatThreadPool”
port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />

 

* 반대로 위 커넥터 부분의 port를 Default 상태인 8080 => 80으로 변경하여 단독 톰켓 구성이 가능하다.

 

apache workers.properties 설정

– 80 외에 8009, 9099 port 와 같이 두개의 포트 추가 사용을 위해 세개의 worker.list 추가

vi /usr/local/apache2/conf/workers.properties

 

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java/
ps=/
worker.list=rubi1,rubi2,rubi3

worker.rubi1.port=8009
worker.rubi1.host=localhost
worker.rubi1.type=ajp13
worker.rubi1.lbfactor=1

worker.rubi2.port=8010
worker.rubi2.host=localhost
worker.rubi2.type=ajp13
worker.rubi2.lbfactor=1

worker.rubi3.port=8011
worker.rubi3.host=localhost
worker.rubi3.type=ajp13
worker.rubi3.lbfactor=1

 

apache 가상호스트 설정 (아파치 기본 설정 생략)

– vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

 

NameVirtualHost *:80

NameVirtualHost *:8001
NameVirtualHost *:9099

 

<VirtualHost *:80>
ServerAdmin admin@rubi.kr
DocumentRoot “/home/rubi/public_html
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/www.rubi.kr-error_log”
CustomLog “logs/www.rubi.kr-access_log” common
JkMount /*.jsp rubi1
JkMount /*.do rubi1

JkMount /servlet/* rubi1
</VirtualHost>

<VirtualHost *:8001>
ServerAdmin admin@rubi.kr

DocumentRoot “/home/rubi/www2
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/8001-error_log”
CustomLog “logs/8001-access_log” common
JkMount /*.jsp rubi2
JkMount /*.do rubi2
JkMount /servlet/* rubi2
</VirtualHost>

<VirtualHost *:9099>
ServerAdmin admin@rubi.kr
DocumentRoot “/home/rubi/www3
ServerName rubi.kr
ServerAlias www.rubi.kr
ErrorLog “logs/9099-error_log”
CustomLog “logs/9099-access_log” common
JkMount /*.jsp rubi3
JkMount /*.do rubi3
JkMount /servlet/* rubi3
</VirtualHost>

 

 

– tomcat 가상호스트 설정

가상호스트 추가 진행, 기본 localhost path 변경

 

vi /usr/local/tomcat/conf/server.xml

 

<Host name=”rubi.kr” appBase=”/home/rubi/public_html”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
<Alias>www.rubi.kr</Alias>

 

<!– 80port로 2차 호스트인 test.rubi.kr 가상호스트 추가 –>

<Host name=”test.rubi.kr” appBase=”/home/test/www”

unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>

 

</Engine>
</Service>

 

<!– port 변경에 따른

<Service name=”Catalina2″>
<Connector port=”8002” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8010″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina2” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”rubi.kr” appBase=“/home/rubi/www2”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>
</Engine>
</Service>
<Service name=”Catalina3“>
<Connector port=”9100” protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ />
<Connector port=”8011″ protocol=”AJP/1.3″ redirectPort=”8443″ />
<Engine name=”Catalina3” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
<Host name=”rubi.kr” appBase=“/home/rubi/www3”
unpackWARs=”true” autoDeploy=”true”
xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=”” docBase=”” reloadable=”true”/>
</Host>
</Engine>
</Service>

 

 

tomcat 가상 호스트 설정시 아래 부분을 추가 해줌으로써 appbase= 지정경로 밑에 ROOT를 홈디렉토리로 인식하는 부분을 해결 할 수 있다.

<Context path=”” docBase=”” reloadable=”true”/>

 

여기까지가 설정 모두 종료.

 

http://www.rubi.kr/ 연결시 /home/rubi/public_html/ 내용 출력

http://www.rubi.kr:8001 연결시 /home/rubi/www2 출력

http://www.rubi.kr:9099 연결시 /home/rubi/www3 출력

http://test.rubi.kr 연결시 /home/test/www 출력