Apache httpd server/VirtualHost & Tomcat

Apache VirtualHost with Tomcat

Soul-Learner 2015. 6. 3. 19:53

아파치 웹서버 가상호스트와 톰캣 연동하기


테스트 환경

Windows7

Apache 2.4 for win64

JDK 1.8

Tomcat 8

Apache-Tomcat Connector (mod_jk)

tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x.zip



아파치의 가상 호스트를 설정하면 한 시스템에서 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 파일도 작성되어 있어야 한다