출처 : http://www.sjune.net/archives/807

 

톰캣 6.x 버전부터는 가상호스트 설정을 server.xml 에서 하지 않도록 권고하고 있습니다. 톰캣공식문서를 보면 그 이유가 나오는데요. Context 설정을 수정하기 위해 server.xml 파일을 변경하고 이를 반영하려면 서버를 재시작해야만 하는 불편함이 있기 때문이라고 합니다.

그러면 톰캣 6.x이상부터는 어떻게 설정하냐구요? 설정 방법은 이 위키문서를 보면 자세히 나와있으니 참고해주시구요.. ^^

대신 가상호스트를 사용할 때 주의할 점을 적어보겠습니다. 오늘 제가 삽질한 부분이죠.
바로 $CATARINA_HOME/conf/Catarina/{가상호스트}/ROOT.xml 을 사용해서 컨텍스트를 설정하려는 경우 ROOT.xml 파일 안의 <Context docBase…”” />는 server.xml에서 지정한 Host의 appBase 아래 경로로 인식하지 않는다는 점입니다.

파일을 보며 설명해보겠습니다.

아래는 server.xml의 Host 설정 부분입니다. 보시다시피 host 의 이름은 sjune.dev 이며, appBase는 devapps로 지정하고 있습니다. server.xml 에 설정되는 경로는 $CATARINA_HOME이 루트가 되어 상대경로로 잡히므로 devapps의 실제로 $CATARINA_HOME/devapps가 되구요.

1
2
3
4
...
<Host appBase="devapps" autoDeploy="true" name="sjune.dev"
        unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false" />
...

이 때! $CATARINA_HOME/conf/Catarina/{가상 호스트}/ROOT.xml 파일에서 아래처럼 docBase를 testProject로 설정해도 최종 경로를 devapps/testProject로 바라보지 않습니다. 뿐만 아니라 톰캣이 컨텍스트 경로를 제대로 찾지 못해서 허둥지둥하는 모습까지 보게 되죠. -_-;

1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<Context
        path=""
        docBase="testProject/"
        reloadable="true" />

대신 아래처럼 appBase경로를 벗어난 다른 경로(혹은 절대경로)를 입력해야 docBase경로를 제대로 인식하게 됩니다.

1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<Context
        path=""
        docBase="/myDev/tomcatApps/sjune.dev/testProject/"
        reloadable="true" />

server.xml 처럼 <Host> 아래 <Context>를 넣는 방법과 동일하게 생각해서 ROOT.xml 파일도 같은 방식으로 구동할거라 생각했는데.. 이게 되지 않는다는 걸 몰라서 한참 헤맸네요 ^^;
사실 가상호스팅은 톰캣보다 아파치로 설정하는 게 대부분이지만, 혹시라도 저처럼 server.xml 설정방식과 착각하여 괜히 삽질하는 사람이 있지 않을까 싶어 이렇게 포스팅을 하게 됩니다. (설마 지구에 저 혼자 이 삽질을 해본 건 아니겠죠?;)

Reference

http://tomcat.apache.org/tomcat-6.0-doc/virtual-hosting-howto.html
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html#Introduction
http://wiki.apache.org/tomcat/TomcatDevelopmentVirtualHosts

Tagged on:  

'Tomcat > Explain' 카테고리의 다른 글

톰캣(tomcat) Connector 설정  (0) 2015.11.19
Tomcat 6.0 사이트 여러개 운영  (0) 2015.11.19

+ Recent posts