본문 바로가기

OS의 속삭임/Linux의 외침

[OS][LINUX][tomcat]server.xml 설정


※ 다음은 server.xml 파일의 전문이다. 각 설명이 있으므로 보고 판단하여 적당하게 사용하자.

<Server port="8005" shutdown="SHUTDOWN" debug="0">

<!--

Server는 전체 JVM을 나타내는 싱글톤 요소이다. 이녀석은 하나 이상의 service인스턴스를 가진다 

Server는 지정된 포트로 shutdown명령을 받아드린다. 또한 server는 스스로가 Container가 아니기 때문에 Valves또는 Loggers같은 서브 컴포넌트를 Server와 같은 레벨에서 정의 하면 안된다.

위에 서버가 정의 된것을 보면 8005번 포트를 통해 shutdown명령을 받는것을 알수 있다.

-->

<!---------------------------------------------------------------------------------------------------------->

    <!-- Comment these entries out to disable JMX MBeans support used for the administration web application -->

    <Listener className="org.apache.catalina.core.AprLifecycleListener" />

    <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />

    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

    <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>

<!-- found 해줘야 되는 파일들이며, 안할시에는 에러메세지만 뿌려주는 녀석또한 있으니 에러시 found시켜줘야된다. -->

<!--------------------------Server>GlobalNamingResources----------------------------------------------->

<!--GlobalNamingResources 엘리먼트는 JNDI의 전역자원을 나타내며, 이자원들은 Server안에 정의된다.-->

    <!-- Global JNDI resources -->

    <GlobalNamingResources>

        <!-- Test entry for demonstration purposes -->

<!--

Enviroment가 정의한것은 /WEB_INF/web.xml에서

 <env-entry>

<env-entry-name>maxExemptions</param-name>

<env-entry-value>10</env-entry-value>

<env-entry-type>java.lang.Integer</env-entry-type>

 </env-entry>

라고 정의해도 동일하다.

-->

<!--------------------------Server>GlobalNamingResources>Environment----------------------------------->

        <Environment name="simpleValue" type="java.lang.Integer" value="30"/>

<!--

<Environment> 엘리먼트 속성값 --

 

 description :: (선택사항)이 환경항목에 대한 사람이 읽기 쉬운 간단한 설명

  

 name :: (반드시 설정) 생성할 환경항목의 이름. 

 java:comp/env 컨텍스트에 대한 상대적인 이름입니다.

  

 override :: 웹애플리케이션 배치 디스크립터에서 <env-entry>으로 같은 이름의 

 환경항목을 지정하는 경우, 여기에서 지정한 값을 덮어쓰기(override) 하지 않도록 

 하고 싶으면 false로 지정합니다. 이 값을 지정하지 않으면 덮어쓰기가 허용됩니다.

  

 type :: (반드시 설정) 이 환경항목에 대해 웹애플리케이션이 예상하는 완전한(fully qualified) Java 클래스명. 

 반드시 웹애플리케이션 배치 디스크립터의 <env-entry-type>의 규칙에 맞는 값이어야 합니다. 

 그 규칙에 맞는 값 들은: java.lang.Boolean, java.lang.Byte, java.lang.Character, 

 java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short, 

 또는 java.lang.String 입니다.

  

 value :: (반드시 설정) 웹애플리케이션이 JNDI 컨텍스트로부터 요청해서 반환받을 환경항목의 값. 

 이 값은 반드시 위의 type에 정의된 Java type으로 변환 가능해야 합니다.

-->

<!------------------Server>GlobalNamingResources>Resource---------------------------------------->

        <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users -->

        <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase"

                  description="User database that can be updated and saved"

                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />

    </GlobalNamingResources>

<!----------------------------Server>Service--------------------------------------------------------->

    <!-- Define the Tomcat Stand-Alone Service -->

    <Service name="Catalina">

<!--

<Service> 구성요소를 정의하고 있다. <Service>는 뒤에 기술 할 <Engine>과 그것에 관련된 모든 <Connector>를 그룹화 한 것이다. 기본값은  <Service name="Catalina">로 되어 있다.

name 속성에서 Catalina 라고 하는 이름으로 서비스가 정의 되어 있고, 에러 로그 및 관리툴은 이 이름으로 식별합니다.하나의 서버에 복수의 서비스를 정의하는 경우, 다른 name 속성을 기입할 필요가 있다.


<Service>는 <Engine>과 하나 이상의 <Connector>를 관련짓는 것이 가능하다. <Service>와 <Engine>의 관계는 1:1 이다.


즉, Server는 다수의 Service를 가지고 Service는 Connector과 Engine을 가지며 Connector는 다수가 존제 할수 있지만, Engine은 하나만 존제한다.


-->

<!---------------------------------Server>Service>Connector-------------------------------------->

        <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->

        <!--

        <Connector port="8080" maxHttpHeaderSize="8192"

                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                   enableLookups="false" redirectPort="8443" acceptCount="100"

                   connectionTimeout="20000" disableUploadTimeout="true" />

        -->


        <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->

        <!--

        <Connector port="8443" maxHttpHeaderSize="8192"

                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                   enableLookups="false" disableUploadTimeout="true"

                   acceptCount="100" scheme="https" secure="true"

                   clientAuth="false" sslProtocol="TLS" />

        -->


        <!-- Define an AJP 1.3 Connector on port 8009 -->


<Connector port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" URIEncoding="euc-kr" />

<!--

요구를 <Engine>에 건네 주는 역할을 하는것이 <Connector>다. <Service>는 하나 이상의 <Connector>를 갖을 필요가 있다.


사용자는 HTTP 또는 HTTPS/SSL등 여러가지 방법으로 <Engine>에 요구를 보낸다. 이것들의 접속 요건의 처리는 <Connector>구성요소에 맡겨진다. 

각 프로토콜에 대해 복수의 <Connector>를 갖는 것으로서 어떤 접속에서 요구가 보내져와도 <Engine>이 동일하게 처리하고, 응답을 <Connector>에 맡길 수 있다.


Tomcat에는 몇개의 표준 <connector>가 탑재되어 있으며, 기본값은 HTTP 1.1 <Connector>와 AJP <Connector>가 준비되어 있다.

-->


        <!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->

  <!-- See proxy documentation for more information about using this. -->

        <!--

        <Connector port="8082" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                   enableLookups="false" acceptCount="100" connectionTimeout="20000"

                   proxyPort="80" disableUploadTimeout="true" />

        -->

<!--------------------------------Server>Service>Engine-------------------------------------->

        <Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1">

<!-------------------------------------------------------------------------------------------------------->

<!--<DefaultContext></DefaultContext>-->

<!--

모든 <Context>공통의 정의부. 기본적으로는 설정되어 있지 않다.

-->

<!-----------------------Server>Service>Engine>Realm--------------------------------------------------->

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" debug="0" resourceName="UserDatabase"/>

<!--

<Realm>는 보안을 위해 role명과 사용자명, 비밀번호의 맵핑을 외부의 데이타베이스로 부터 가져오는 장치다. Tomcat은 UserDataBase, Memory, JDBC, JNDI등 몇개의 <Realm>을 가지고 있다.


각 <Realm>의 차이는 어디로 부터 정보를 가져왔는가의 차이밖에 없다. 기본값으로는 UserDataBsase이외의 <Realm>은 주석 처리되어 무효로 되어 있다.

-->

<!------------------------Server>Service>Engine>Logger------------------------------------------------>

<!--

<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 디렉토리에 출력된다.

-->

<!-------------------Server>Service>Engine>Host---------------------------------------------------------->

            <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<!------------------Server>Service>Engine>Host>Valve----------------------------------------------------->

                <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"

                       directory="logs" prefix="localhost_access_log." suffix=".log" pattern="common" resolveHosts="false"/>

<!--

  <Valve>는 Tomcat 특유의 기능이다. <Valve>는 상위 구성요소로의 필터 처리를 담당한다. 

  <Engine>, <Host>, <Context>와 관련짓는 것이 가능하다. 또, Tomcat에는 표준으로 다음과 같은 몇개의 <Valve>가 준비되어 있다. 

------------------------------------------------------------------------------------------------

AccessLogValve

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="server-log-" fileDateFormat="yyyy-MM-dd" suffix=".txt"/>

------------------------------------------------------------------------------------------------

RemoteAccessValve

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1,192.168.0.1" />

------------------------------------------------------------------------------------------------

SingleSignOnValue

<Valve className="org.apache.catalina.authenticator.SingleSignOn"/>

------------------------------------------------------------------------------------------------

RequestDumpValue

<Valve className="org.apache.catalina.valves.RequestDumperValve"/> 

------------------------------------------------------------------------------------------------

AccessLogValve 의 <예>에서는 $CATALINA_HOME/logs 디렉토리에 server-log-2008-08-04.txt 의 형식으로 로그파일을 작성한다.


RemoteAccessValve는 접근을 IP주소 단위로 제한한다. 지정주소에서의 접근을 허가, 거부를 설정할 수 있다.

<예>에서는 로컬 IP주소 192.168.0.1로 부터의 접근을 허가하고 있다. 

또 RemoteHostValve를 사용하면 호스트 단위로 접근제한을 설정할 수 있다.


SingleSignOnValve는 요구와 응답의 헤더와 쿠키를 <Logger>로 설정한 로그파일이 작성된다.

-->

<!--------------------------------------------------------------------------------------------------------->

            </Host>

<!--

가상 호스트명을 "localhost"로 설정하고 appBase 속성에서 어플리케이션이 탑재되어 있는 디렉토리를 "webapps"로 설정하고 있다. 별도로 unpackWARs 속성에서는 WAR파일을 전개하고나서 실행할 것인지의 여부를, autoDeploy 속성에서는 Tomcat이 기동중에 웹어플리케이션을 배치한 경우에 자동으로 읽어 들일 것인지의 여부를 설정할 수 있다. 

-->

<!--------------------------------------------------------------------------------------------------------->

  <Host name="www.도메인.co.kr" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

                <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"

                       directory="logs" prefix="voebiMall_access_log." suffix=".log" pattern="common" resolveHosts="false"/>

                <Context path="" docBase="/home/httpd/wingSell/voebi/JSPDocs/WebRoot" debug="0" reloadable="false">

                    <Resource name="db_voebi" auth="Container" type="javax.sql.DataSource"

                              maxActive="100" maxIdle="20" maxWait="10000"

                              username="voebi" password="voebi#123" driverClassName="oracle.jdbc.driver.OracleDriver"

                              url="jdbc:oracle:thin:@localhost:1521:ora9"/>

                </Context>

                <Alias>www.도메인.co.kr</Alias>

                <Alias>admin.도메인.com</Alias>

            </Host>

        </Engine>


    </Service>


</Server>

<!--

서버의 엘리먼트 트리 

<Server>


      |     


      +---<Service>(복수 존제가능)


                  |


                  +---<Connector>(복수 존제 가능)


                  |


                  +---<Engine>


                              |


                              +---<DefaultContext>


                              |


                              +---<Realm>


                              |


                              +---<Logger>


                              |


                              +---<Host>(복수 존제 가능)


                                          |


                                          +---<Context>


                                          |


                                          +---<Value>


                                          |


                                          +---<Realm>


                                          |


                                          +---<Logger>


-->







* [에러발생]요즘 버전의 톰켓의 접속 로그 클래스가 바뀐거 같다. 그대로 하면 에러가 발생한다.

** org.apache.catalina.valves.FastCommonAccessLogValve -> org.apache.catalina.valves.AccessLogValve

** FastCommonAccessLogValve 가 deprecated 되어 tomcat7에서부턴 삭제 되었단다. 그래서 남은 AccessLogValve만 쓴단다.

<Host name="www.domain.co.kr" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">



        <!-- SingleSignOn valve, share authentication between web applications

             Documentation at: /docs/config/valve.html -->

        <!--

        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />

        -->


        <!-- Access log processes all example.

             Documentation at: /docs/config/valve.html

             Note: The pattern used is equivalent to using pattern="common" -->

       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="access_log." suffix=".log"

pattern="common" resolveHosts="false"

                />

                <Context path="" docBase="D:\tomcat\tomcat_8.0.9\work" debug="0" reloadable="false">

                    <!--<Resource name="dbname" auth="Container" type="javax.sql.DataSource"

                              maxActive="100" maxIdle="20" maxWait="10000"

                              username="username" password="passwd#123" driverClassName="oracle.jdbc.driver.OracleDriver"

                              url="jdbc:oracle:thin:@localhost:1521:ora9"/>-->

                </Context>

                <Alias>www.domain.co.kr</Alias>

                <Alias>admin.domain.com</Alias>


</Host>