Apache VirtualHost with Tomcat
아파치 웹서버 가상호스트와 톰캣 연동하기
테스트 환경
Windows7
Apache 2.4 for win64
JDK 1.8
Tomcat 8
Apache-Tomcat Connector (mod_jk)
아파치의 가상 호스트를 설정하면 한 시스템에서 2개 이상의 서로 다른 사이트를 서비스할 수 있다
여기서는 한 컴퓨터에 서로 다른 내용의 사이트 2개가 Tomcat 에 의해서 서비스되고 있는 환경을 설정하고 실행하는 절차를 알아보려고 한다
이 내용은 다음과 같은 2가지 환경설정을 결합한 형태이므로 우선 아래 각각의 설정법에 따라서 설정을 마치고 정상적으로 실행되는 것을 확인한 후에 이 부분의 설정에 따라야 한다
위의 2가지 환경설정에 따라서 정상적으로 서비스가 가능한 상태라면 그 설정에서 약간만 변경하여 2개의 톰캣이 각각의 서로 다른 사이트를 서비스하도록 설정할 수 있다
윈도우 시스템 설정내용
우선 시스템 환경변수 중에서 JAVA_HOME 값이 JDK1.8 이 설치된 루트 디렉토리(bin폴더의 상위폴더) 경로로 설정되어 있어야 한다
또한 윈도우에 서비스로 설치된 톰캣이 있다면 프로그램 추가/삭제 기능을 이용하여 삭제한다
1. Tomcat 8 zip 파일을 다운로드하고 압축을 해제하여 D:/Tomcat1/ 경로에 복사한다
2. D:/Tomcat2/ 경로에도 복사하여 2개의 톰캣 환경을 구성한다
3. Tomcat2/conf/server.xml 파일을 열고 Tomcat1의 포트설정과 다르게 변경한다
D:/Tomcat2/conf/server.xml 의 변경내용
.........
<Server port="8006" shutdown="SHUTDOWN">
..........
<Connector port="8089" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444" />
....
<Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
4. Tomcat1/bin/startup.bat 을 더블클릭하여 첫번째 톰캣을 실행해서 오류가 없는지 확인한다
5. 두번째 톰캣도 위와 같은 방법으로 실행하여 오류가 없는지 확인한다
6. 오류의 대부분은 JAVA_HOME 환경변수가 설정되지 않았거나, 2개의 톰캣이 동일한 포트를 사용하도록 설정되어 있기 때문이다. 또 한가지 오류를 발생할 수 있는 상황은 윈도우 서비스로 등록된 톰캣이 있을 때이다
Apache2.4/conf/workers.properties (톰캣과 연결할 프로토콜(ajp)과 포트번호를 등록한다, 톰캣의 server.xml 내용과 동일해야 한다)
#list of top level workers
worker.list=tomcat1, tomcat2
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat2.port=8010
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
Apache2.4/conf/httpd.conf의 맨 마지막에 추가했던 내용에서 몇줄을 제거한다
............
...............
#톰캣연동을 위한 mod_jk 모듈 설정
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat "%w %V %T"
#Root context 아래의 내용은 VirtualHost 안에 설정된다
#JkMount /*.jsp tomcat1
#JkMount /servlet/* tomcat1
#JkMount /examples tomcat1
#JkMount /examples/* tomcat1
#JkMount /url tomcat1
AddDefaultCharset UTF-8
Apache2.4/conf/extra/httpd-vhosts.conf 파일을 다음과 같이 변경한다
<VirtualHost *:80>
ServerAdmin me@domain.commmm
ServerName www.site1.com
DocumentRoot D:/Tomcat1/apache-tomcat-8.0.9/webapps/ROOT
JkMount /*.jsp tomcat1
JkMount /*.do tomcat1
JkMount /servlet/* tomcat1
<Directory D:/>
Options FollowSymLinks
AllowOverride None
</Directory>
#<Directory D:/site1/>
#Require all granted
#Options Indexes FollowSymLinks MultiViews
#AllowOverride None
#Order allow,deny
#allow from all
#</Directory>
<Directory "D:/Tomcat1/apache-tomcat-8.0.9/webapps/ROOT">
Require all granted
Options FollowSymLinks
AllowOverride None
Order deny,allow
allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin me@domain.commmm
ServerName www.site2.com
DocumentRoot "D:/Tomcat2/apache-tomcat-8.0.9/webapps/ROOT"
JkMount /*.jsp tomcat2
JkMount /*.do tomcat2
JkMount /servlet/* tomcat2
<Directory D:/>
Options FollowSymLinks
AllowOverride None
</Directory>
#<Directory D:/site2>
#Require all granted
#Options Indexes FollowSymLinks MultiViews
#AllowOverride None
#Order allow,deny
#allow from all
#</Directory>
<Directory "D:/Tomcat2/apache-tomcat-8.0.9/webapps/ROOT">
Require all granted
Options FollowSymLinks
AllowOverride None
Order deny,allow
allow from all
</Directory>
</VirtualHost>
위의 설정 중에서 톰캣이 처리해야 할 요청을 입력할 때 아래와 같이 설정하면 모든 요청을 톰캣이 처리하게 된다
JkMount / tomcat1
JkMount /* tomcat1
위와 같이 설정을 마친 후 2개의 톰캣을 하나씩 실행하고, 이어서 아파치도 실행한 다음 웹브라우저의 주소창에 다음과 같이 입력하면 2개의 도메인에 연결된 각각의 톰캣이 제대로 실행되는지 확인할 수 있다
http://www.site1.com/hello.jsp
http://www.site2.com/hello.jsp
물론 이렇게 테스트하기 위해서 먼저 hosts 파일이 설정되어 있어야 하고 2개의 톰캣이 서비스하는 폴더에 hello.jsp 파일도 작성되어 있어야 한다