■ server.xml에 의한 Tomcat의 기본 설정
$CATALINA_HOME/conf/server.xml은 Tomcat의 메인 설정 파일로 Tomcat 기동시에 참조 된다.
$CATALINA_HOME/conf/ 디렉토리에는 디폴트 server.xml 이외에 최소한의 설정만으로 구성된
server-minimal.xml이 준비되어 있다. 새로 서버를 설정하고자 할 경우에는 server-minimal,xml의 이름을 변경하여 사용하면 편리하다.
■ server.xml의 구조
Tomcat은 몇개의 구성요소로 이루어져 있으며, server.xml에서는 XML의 요소를 통해 구성요소를 정의하고 있다. server.xml의 요소는 다음과 같이 트리구조를 갖고 있다.
<Server>
|
+---<Service>
|
+---<Connector>
|
+---<Engine>
|
+---<DefaultContext>
|
+---<Realm>
|
+---<Logger>
|
+---<Host>
|
+---<Context>
|
+---<Value>
|
+---<Realm>
|
+---<Logger>
상위의 속성은 자동적으로 하위의 요소에 계승된다. 예를 들어 <Host>의 구성요소 <Logger>의 속성은 아무것도 지정하지 않은 경우 <Engine>의 구성요소 <Logger>의 설정이 사용된다. 변경이 필요한 경우에는 <Host>의 구성요소 <Logger>에 별도의 설정을 함으로서 상위의 설정을 덮어 쓸수 있다.
1. <Server>요소
Tomcat 서버 구성요소의 정의 부분이다. 기본값은 <Server port="8005" shutdown="SHUTDOWN"> 로 되어 있으며, 포트 8005를 감시하고 shutdown 명령어를 접수하도록 설정되어 있다. 서버에서는 복수의 서비스를 관련 지울 수 있다.
2. <Service>요소
<Service> 구성요소를 정의하고 있다. <Service>는 뒤에 기술 할 <Engine>과 그것에 관련된 모든 <Connector>를 그룹화 한 것이다. 기본값은 <Service name="Catalina">로 되어 있다.
name 속성에서 Catalina 라고 하는 이름으로 서비스가 정의 되어 있고, 에러 로그 및 관리툴은 이 이름으로 식별합니다.하나의 서버에 복수의 서비스를 정의하는 경우, 다른 name 속성을 기입할 필요가 있다.
<Service>는 <Engine>과 하나 이상의 <Connector>를 관련짓는 것이 가능하다. <Service>와 <Engine>의 관계는 1:1 이다.
3. <Service>요소
<Engine>은 servlet 컨테이너의 인스턴스를 표시하며, <Connector>로부터 보내진 요구를 처리한다. 기본값은 <Engine name="Catalina" defaultHost="localhost">로 되어 있다.
name 속성은 <Engine>의 이름을 표시하며, 에러 로그 및 관리툴은 이 이름으로 <Engine>을 식별한다.
defaultHost 속성은 server.xml에 정의 되어 있지 않은 <Host>에 요구가 있을 경우 발송되는 가상호스트를 지정한다. <Engine>에는 하나 이상의 <Host>가 관련지어져 있다.
4. <Connector>요소
요구를 <Engine>에 건네 주는 역할을 하는것이 <Connector>다. <Service>는 하나 이상의 <Connector>를 갖을 필요가 있다.
사용자는 HTTP 또는 HTTPS/SSL등 여러가지 방법으로 <Engine>에 요구를 보낸다. 이것들의 접속 요건의 처리는 <Connector>구성요소에 맡겨진다. 각 프로토콜에 대해 복수의 <Connector>를 갖는 것으로서 어떤 접속에서 요구가 보내져와도 <Engine>이 동일하게 처리하고, 응답을 <Connector>에 맡길 수 있다.
Tomcat에는 몇개의 표준 <connector>가 탑재되어 있으며, 기본값은 HTTP 1.1 <Connector>와 AJP <Connector>가 준비되어 있다.
5. <DefaultContext>요소
모든 <Context>공통의 정의부. 기본적으로는 설정되어 있지 않다.
6. <Realm>요소
<Realm>는 보안을 위해 role명과 사용자명, 비밀번호의 맵핑을 외부의 데이타베이스로 부터 가져오는 장치다. Tomcat은 UserDataBase, Memory, JDBC, JNDI등 몇개의 <Realm>을 가지고 있다.
각 <Realm>의 차이는 어디로 부터 정보를 가져왔는가의 차이밖에 없다. 기본값으로는 UserDataBsase이외의 <Realm>은 주석 처리되어 무효로 되어 있다.
7. <Logger>요소
<Logger>는 로그파일의 작성 방법을 설정 한다. <Logger>는 server.xml 구조에서 보듯이 <Engine>레벨에서 설정할 수 있다.
<Logger className="org.apache.catalina.logger.FileLogger">
prefix="server-log." suffix=".txt"
timestamp="true"/>
위의 <예>에서는 Tomcat의 FileLogger 클래스를 사용, prefix, suffix, timestamp 속성에서 로그파일명을 정의하고 있다. 이 경우, 로그파일은 [server-log.2008_08_04.txt]과 같은 형식으로 $CATALINA_HOME/logs 디렉토리에 출력된다.
8. <Host> 와 <Context>요소
<Engine>에 관련된 가상호스트를 정의 한다. 기본값으로는 다음과 같이 되어 있다.
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"></host>
- name 속성이 localhost 이므로 localhost:8080 으로 접근할 수 있다. Tomcat 단독 운영시 name 속성에 도메인을 적어서 각 서비스를 분기 할 수 있다.
- 먼저 톰캣의 기본 Document Root 는 webapps/ROOT 이며, appBase 는 $CATALINA_HOME 을 상대경로를 기본 인자로 받는다.
- <Host>에서 <Context> 태그가 생략될 경우 $CATALINA_HOME/webapps/ROOT 가 된다.
- <Host>에서 <Context> 태그가 있을 경우 appBase(절대경로 가능) 하위 디렉토리를 Document Root 로 지정할 수 있다.
-- 상대 경로를 이용: <Host name="localhost" appBase="webapps" ...<Context path="" docBase="test" reloadable="true"/></host>
>> 이때 Document Root 는 $CATALINA_HOME/webapps/test가 된다. (appBase, docBase 둘다 절대 경로 사용 가능)
2개의 호스트<Host>
<!--Host name="localhost" 는 웹브라우져에 http://localhost:8080/ 접근 시 $CATALINA_HOME/webapps/ROOT 에 있는 docroot 를 기준으로 하고 -->
<Host name="localhost" appBase="webapps" autoDeploy="true" unpackWARs="true">
</Host>
<!--Host name="testhost" 는 웹브라우져에 http://testhost:8080/ 라고 접근 시 아래 Context 기준으로 찾아간다.-->
<Host name="testhost">
<Context docBase="C:test1\WebContent" path="/" reloadable="true"/>
</Host>
1개의 콘텍스트<Context > 변형
<Host name="localhost" appBase="C:/webapps/htdocs" unpackWARs="true" autoDeploy="true">
<Context path="/api" docBase="/apidir" reloadble="true" />
</Host>
http://localhost:8080/api/main.jsp 호출 시 "C:/webapps/htdocs/apidir/main.jsp" 접근
http://localhost:8080/main.jsp 호출 시 "C:/webapps/htdocs/main.jsp" 접근
2개의 콘텍스트<Context >
<Host name="localhost" appBase="C:/webapps" unpackWARs="true" autoDeploy="true">
<!-- http://localhost/main.jsp 호출 시 C:/webapps/htdocs/main.jsp 접근 -->
<Context path="/" docBase="/htdocs" reloadble="true" />
<!-- http://localhost/test/main.jsp 호출 시 C:/webapps/testdir/main.jsp 접근 -->
<Context path="/test" docBase="/testdir" reloadble="true" />
</Host>
* <Context path="" path 요소에 아무것도 입력치 않으면 모든 요청을 받음,
따라서 하나의 호스트 사용 시 1개의 콘텍스트<Context > 변형처럼 사용 하지 않을땐 "/" 대신 "" 를 사용 하여야 함
* xmlValidation="false" xmlNamespaceAware="false" 같은 경우 Host 속성이 아니고 Context의 속성으로 주의 하시길
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
많은 사이트나에서 보면 위와 같이 사용 하는데 잘못된 사용법이다
9. <Value>요소
<Value>는 Tomcat 특유의 기능이다. <Value>는 상위 구성요소로의 필터 처리를 담당한다. <Engine>, <Host>, <Context>와 관련짓는 것이 가능하다. 또, Tomcat에는 표준으로 다음과 같은 몇개의 <Value>가 준비되어 있다.
- AccessLogValve
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="server-log-" fileDateFormat="yyyy-MM-dd" suffix=".txt"/>
AccessLogValve 의 <예>에서는 $CATALINA_HOME/logs 디렉토리에 server-log-2008-08-04.txt 의 형식으로 로그파일을 작성한다.
- RemoteAccessValve
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1,192.168.0.1" />
RemoteAccessValue는 접근을 IP주소 단위로 제한한다. 지정주소에서의 접근을 허가, 거부를 설정할 수 있다.
<예>에서는 로컬 IP주소(127.0.0.1), 192.168.0.1로 부터의 접근을 허가하고 있다.
또 RemoteHostValue를 사용하면 호스트 단위로 접근제한을 설정할 수 있다.
- SingleSignOnValue
<Valve className="org.apache.catalina.authenticator.SingleSignOn"/>
SingleSignOnValue는 요구와 응답의 헤더와 쿠키를 <Logger>로 설정한 로그파일이 작성된다.
- RequestDumpValue
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
10. <Context>요소
<Host>에는 웹어플리케이션의 복수개의 <Context>가 관련지어져 있다.
<Context>요소에는 웹어플리케이션의 일련의 설정 프로퍼티가 들어간다.(웹어플리케이션마다에 설정)
Tomcat 설정과 관련된 자세한 내용은 Tomcat 홈페이지에서 확인하시기 바랍니다.
<Host name="localhost" appBase="webapps" autoDeploy="true" unpackWARs="true">
</Host>
<Host name="testhost">
<Context docBase="C:test1\WebContent" path="/" reloadable="true"/>
</Host>
Host name="localhost" 는 웹브라우져에 http://localhost:8080/ 라고 접근 시 $CATALINA_HOME/webapps 에 있는 docroot 를 기준으로 하고
Host name="testhost" 는 웹브라우져에 http://testhost:8080/ 라고 접근 시 아래 Context 기준으로 찾아간다.
[출처] Tomcat 서버 설정파일(server.xml)|작성자 물감자