728x90
반응형
 
얼마전에 설치한 JBoss의 가상 호스트 설정를 설정할 일이 생겼다. 
 
상황은 이렇다. 현재 설치된 JBoss를 이용하여 두개의 호스트네임을 두어 하나는 실제 운영을 하기 위한것이고 하나는 TEST 용으로 사용될 것이다. 바꾸어 말하자면 테스트 서버를 하나 두고 싶다는 말이다. ㅡ.ㅡ;;
 
그럼 일단 가상호스트에 대한 개념을 이해해보자.
  • 웹 서버는 서로 다른 두개의 가상 호스트를 처리한다.
  • 웹 서버는 서로 다른 두개의 가상 호스트에 대한 static content를 처리한다.
  • mod-jk는 가상 호스트에 대해서 JBoss로 HTTP Request를 요청한다.
  • JBoss에는 두 개의 서로 다른 애플리케이션이 배포되며 이 애플리케이션은 서로 다른 가상 호스트로 서비스를 제공한다.
  • 배포할 웹 애플리케이션의 jboss-web.xml 파일에는 가상 호스트 정보가 포함된다.
  • 배포할 웹 애플리케이션의 jboss-web.xml 파일에는 context root가 모두 /로 정의한다.
특히 여기에서 웹 애플리케이션이 중요하다. 가상 호스트에서 서비스를 제공하는 것이므로 모두 /로 요청을 받아야 합니다. 만약, 가상호스트를 사용하지 않는 경우 두 애클리케이션의 context root가 /인 경우 context root가 동일하기 때문에 충돌이 발생합니다. 하지만 jboss-web.xml 파일에 가상 호스트를 지정하면 충돌이 발생하지 않습니다. 이것이 중요한 포인트 입니다.
 
설정하는 방법은 Tomcat과 좀 다릅니다. 
 
%APACHE_HOME/conf/httpd.conf 파일에 가상 호스트별로 제공할 static content 경로를 지정해줘야 합니다. 이것을 지정하지 않을 경우 403에러가 발생합니다.
# Include mod_jk configuration file
Include conf/mod-jk.conf

<Directory "/usr/local/jboss/server/default/deploy/TTT_TEST.war">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Directory "/usr/local/jboss/server/default/deploy/TTT.war">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
위 부분을 파일에 추가했습니다.
소스의 위치는 JBoss가 설치된어 현재 기동한 configuration 의 레벨 및에 있는 폴더입니다.
전 아래와같이 설치했습니다.
/usr/local/jboss/server/default/deploy/TTT.war          
                      =(사용할 호스트명)=> v1.taebal-test.co.kr
/usr/local/jboss/server/default/deploy/TTT_TEST.war  
                      =(사용할 호스트명)=> v2.taebal-test.co.ko
다음은 %APACHE_HOME/conf/httpd.conf 파일에 가상 호스트를 설정하는 부분입니다.
실제로 httpd.conf 파일에 직접 써도 되지만, 여기서는 mod_jk.conf 파일에 JBoss 연동 부분을 세팅해 놨기 때문에 mod_jk.conf 파일에 설정을 하도록 하겠습니다.
 
%APACHE_HOME/conf/mod_jk.conf 
<VirtualHost *>
    ServerAdmin XXXXX@gmail.com
    DocumentRoot /usr/local/jboss/server/default/deploy/TTT.war
    ServerName v1.XXXXX-test.co.ko
    ErrorLog logs/v1.XXXXX-test.co.ko-error.log
    CustomLog logs/v1.XXXXX-test.co.ko-access.log common

    LogLevel debug
    JkMountFile                 conf/uriworkermap_v1.properties
    <Directory "/usr/local/jboss/server/default/deploy/TTT.war/WEB-INF/">
        AllowOverride None
        deny from all
    </Directory>
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</VirtualHost>

<VirtualHost *>
    ServerAdmin XXXXX@gmail.com
    DocumentRoot /usr/local/jboss/server/default/deploy/TTT_TEST.war
    ServerName v2.XXXXX-test.co.ko
    ErrorLog logs/v2.XXXXX-test.co.ko-error.log
    CustomLog logs/v2.XXXXX-test.co.ko-access.log common

    LogLevel debug
    JkMountFile                 conf/uriworkermap_v2.properties
    <Directory "/usr/local/jboss/server/default/deploy/TTT_TEST.war/WEB-INF/">
        AllowOverride None
        deny from all
    </Directory>
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</VirtualHost>
파일 및에 위를 추가 했습니다. 어떤 내용인지는 설명을 드리면..
ServerAdmin : 관리자 메일
DocumentRoot : 실제 애플리케이션이 존재하는 위치
ServerName : 호스트 이름
ErrorLog : 에러 로그 생성 위치
CustomLog : 엑세스 로그 생성 위치
LogLevel : 로그 생성 레벨
JkMountFile : mod-jk의 설정파일
Directory : WEB-INF의 접근을 막음 (옵션)
Rewrite : http 로 들어오는 것을 https로 바꿔주는 역활 (옵션)
대충 위와 같은 내용입니다. 옵션이라고 적힌 부분은 필요하지 않으면 써주지 않아도 됩니다.
 
다음으로 %JBoss/server/$Configuration$/deploy/jbossweb.sar/server.xml 파일을 열어서 JBoss도 설정해줍니다. (난 $Configuration$ 의 부분이 default 이다.)
파일을 열고 아래 부분 Engine 테그 사이에 추가한다. <Host name="localhost"> 태그 위에 추가...
 <Host name="v1.XXXXX-test.co.ko">
     <Alias>v1.XXXXX-test.co.ko</Alias>
     <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
transactionManagerObjectName="jboss:service=TransactionManager" ></Valve>
 </Host>

<Host name="v2.XXXXX-test.co.ko">
    <Alias>v2.XXXXX-test.co.ko</Alias>
    <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
transactionManagerObjectName="jboss:service=TransactionManager" ></Valve>
</Host>
 
이렇게 하면 서버에서 설정하는 것은 모두 끝났다. 라고 생각하면 오산이다.... 

 

실제로 잘되는지 보기 위해서는 테스트 하려는 컴퓨터의 hosts 파일을 수정해야한다. 왜냐면 지정한 가상 호스트이름은 내가 임의로 지정한 이름이기 때문에 DNS서버에 등록이 되어있지 않아 IP를 찾지 못하기 때문이다. 
 
서버에서 테스트를 한다고하면...
/etc/hosts 파일을 열어 다음을 추가해준다.
192.OOO.OOO.OOO  v1.XXXXX-test.co.ko
192.OOO.OOO.OOO  v2.XXXXX-test.co.ko
 
여기서 192.OOO.OOO.OOO 은 서버 IP이다.
 
이제 마지막으로 남은 jboss-web.xml 파일의 설정을 보자.
애플리케이션에 WEB-INF/jboss-web.xml 파일을 만들고 아래처럼 설정하였다.
 
v1.XXXXX-test.co.ko
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC 
        "-//JBoss//DTD Web Application 5.0//EN" 
        "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> 

<jboss-web>
	<context-root>/TTT</context-root>
	<virtual-host>v1.XXXXX-test.co.ko</virtual-host>
</jboss-web>
v2.XXXXX-test.co.ko
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC 
        "-//JBoss//DTD Web Application 5.0//EN" 
        "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> 

<jboss-web>
	<context-root>/TTT</context-root>
	<virtual-host>v2.XXXXX-test.co.ko</virtual-host>
</jboss-web>
여기서 context root는 실제 프로젝트에서 /TTT이라고 사용을 하기 때문에 /TTT이라고 적어줬으며, 이부분이 필요없이 /로 하고싶다면 /로 적어주면 된다.
이렇게 하면 가상 호스트의 설정은 모두 끝~!!
 
부가적으로 https 를 사용한다면...%APACHE_HOME/extra/httpd-ssl.conf 을 수정해줘야한다.
mod-jk 연결해주는 파일을 가상호스트 설정시 썼던 파일로 바꿔줘야 한다. 아래 참조...
# 가상호스트 사용전 mod-jk 설정 파일
# JkMountFile conf/uriworkermap.properties 

# 가상호스트 사용 mod-jk 설정 파일 (mod_jk.conf 가상호스트 설정 부분의 파일을 적어줌)
JkMountFile conf/uriworkermap_v1.properties
JkMountFile conf/uriworkermap_v2.properties
728x90
반응형

+ Recent posts