remagine
아파치 톰캣으로 프로젝트 관리하기 4 본문
아파치 톰캣으로 프로젝트 관리하기 4
1. Centos에서 톰캣으로 프로젝트 띄우기
연동을 하기전에 톰캣부터 작동시키겠습니다. 복수의 프로젝트를 띄우기 위해서 webapp폴더에 war파일을 두지 않고 폴더를 각각 생성합니다.
[root@localhost vic]# ll tomcat
lrwxrwxrwx. 1 arthur arthur 20 8월 7 10:53 tomcat -> apache-tomcat-7.0.72
심볼릭 링크를 만들어 놓은 것을 확인합니다.
tomcat 폴더에 관리할 프로젝트마다 폴더를 생성합니다.
[root@localhost tomcat]# ll
합계 96
-rw-r--r--. 1 arthur arthur 56846 9월 14 2016 LICENSE
-rw-r--r--. 1 arthur arthur 1239 9월 14 2016 NOTICE
-rw-r--r--. 1 arthur arthur 8965 9월 14 2016 RELEASE-NOTES
-rw-r--r--. 1 arthur arthur 16195 9월 14 2016 RUNNING.txt
drwxrwxr-x. 7 arthur arthur 69 8월 7 11:37 admincp
drwxr-xr-x. 2 arthur arthur 4096 8월 8 10:30 bin
drwxr-xr-x. 2 arthur arthur 158 8월 7 18:56 conf
drwxrwxr-x. 7 arthur arthur 69 8월 7 19:12 ioffer
drwxr-xr-x. 2 arthur arthur 4096 8월 7 11:27 lib
drwxr-xr-x. 2 arthur arthur 6 9월 14 2016 logs
drwxr-xr-x. 2 arthur arthur 30 8월 7 10:52 temp
drwxr-xr-x. 2 arthur arthur 6 9월 14 2016 work
admincp 와 ioffer라는 폴더가 생성되었습니다.
먼저 admincp 프로젝트를 띄워보겠습니다.
기본 폴더구조에서 webapps, conf, logs, temp, work폴더만 생성해 줍니다.
bin, common, server, lib 폴더내용은 공유합니다.
webapps 폴더에 ROOT.war파일을 복사합니다.
그리고 기존 conf파일을 admincp/conf 폴더로 복사합니다.
cp /home/vic/tomcat/conf /home/vic/tomcat/admincp/conf
server.xml 구조
<Server>
|
+---<Service>
|
+---<Connector>
|
+---<Engine>
|
+---<DefaultContext>
|
+---<Realm>
|
+---<Logger>
|
+---<Host>
|
+---<Context>
|
+---<Valve>
|
+---<Realm>
|
+---<Logger>
server.xml은 위와 같은 계층구조로 이뤄져 있다. 모두 설정이 반드시 필요한 것은 아닌듯..
server.xml은 톰캣 서버에 주요 설정파일입니다.
톰캣이 작동할 때 생성될 Container, 구성요소들을 정의해 줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- Note: A "Server" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/server.html --> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html --> <GlobalNamingResources> <!-- 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> <!-- A "Service" is a collection of one or more "Connectors" that share a single "Container" Note: A "Service" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/service.html --> <Service name="Catalina"> <!--The connectors can use a shared executor, you can define one or more named thread pools--> <!-- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> --> <!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- A "Connector" using the shared thread pool--> <!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <!-- Define a SSL HTTP/1.1 Connector on port 8443 This connector uses the BIO implementation that requires the JSSE style configuration. When using the APR/native implementation, the OpenSSL style configuration is required as described in the APR/native documentation --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). Documentation at /docs/config/engine.html --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> --> <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html (reference documentation) --> <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> --> <!-- Use the LockOutRealm to prevent attempts to guess user passwords via a brute-force attack --> <Realm className="org.apache.catalina.realm.LockOutRealm"> <!-- This Realm uses the UserDatabase configured in the global JNDI resources under the key "UserDatabase". Any edits that are performed against this UserDatabase are immediately available for use by the Realm. --> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 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="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server> | cs |
1. Server : 기본으로 8005 포트사용
<Server port="8105" shutdown="SHUTDOWN">
8105포트로 SHUTDOWN 명령을 전달하면 TOMCAT을 종료한다는 의미입니다.
Server 안에 여러 정의가 가능합니다.
<GlobalNamingResources>
<Resource ....... />
</GlobalNamingResources>
Was가 연결할 DataBase의 정보를 담은 Tag
Application의 web.xml에 mapping된 정보와 호환됩니다.
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
Listener,GlobalNamingResources 는 server의 하위 요소입니다.
Listener는 특정 이벤트를 리스닝하고 이벤트 발생시 응답하는 기능을 가지고 있습니다.
2. Service : 기본적으로 Catalina라는 name의 서비스가 정의 되 있습니다. 한개의 서버에는 복수의 서비스가 정의될 수 있고, 한개의 서비스는 한개의 Engine과 여러개의 Connector를 가질 수 있습니다. 이 서비스의 name 값을 가지고 에러로그 및 관리툴을 관리합니다.
<Service name="Catalina">
3. Engine :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
Engine은 Tomcat 위에 구동된 Servlet Container 객체 하나를 말합니다. 기본적으로 Connector를 통해 전달된 요구를 처리하는 Java 구현체라고 생각하면 될 듯 합니다.
name 속성은 이름을 뜻하고, 에러 로그 및 관리툴은 이 이름으로 Engine을 식별하니다.
defaultHost는 Virtual Host, Http request의 host값이 mapping이 된 것이 없을때 기본으로 연결시키는 주소입니다.
jvmRoute는 로드밸런싱을 구현할 때 , 한개의 톰캣에서 여러개의 프로젝트를 돌릴때 쓰는 것 같습니다.
4. Connector
커넥터는 클라이언트의 요구를 Engine에 전달하는 기능을 합니다. 커넥터는 복수가 준비 될 수 있습니다.
https 8443
http 8080
ajp 8009
톰캣에는 3가지 커넥터가 있습니다.
<!-- A "Connector" using the shared thread pool-->
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
server="Server"
maxPostSize="-1"
maxKeepAliveRequests="2000"
connectionTimeout="30000"
enableLookups="false"
useBodyEncodingForURI="true"
acceptCount="2000"
redirectPort="8443" />
커넥터 설정은 클라이언트에서 요청 url의 포트를 가지고 Connector를 정해줍니다. 위 설정에 보면 redirectPort = 8443 이 설정되어있습니다. SSL 요청이 들어오면 8443 포트로 요청을 넘기겠다는 것입니다. 포트 사이즈는 -1로 잡아 차단되어있네요
5. Host
<!-- Define the default virtual host
Note: XML Schema validation will not work with Xerces 2.2.
-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
VirtualHost를 의미합니다. Http1.1에서 추가된 Host 내용을 통해 어떤 name의 VirtualHost로 연결할 질 결정합니다.
기본적으로 localhost가 디폴트입니다.
6. Context
웹 어플리케이션을 의미합니다.
Context 태그가 없다면, webapps 폴더안에 ROOT.war 파일을 기준으로 ROOT폴더에 어플리케이션을 배포합니다.
7. Valve
Tomcat Valve
tomcat 4 에 도입됐는데, tomcat의 container level 에서 http request, response 의 pre-processing 을 가능하게 해주는 기술이다.
valve 들은 java class 의 instance 를 특정 Catalina container 와 연관되게 해준다.
configured valve class 는 container 로 오는 모든 request 에 preprocessor 처럼 동작한다.
이 설정(configuration)은 named-class 가 각각의 request 에 대한 pre-processor로 동작하게 해주는데, 이 named-class 를 valve 라 부른다.
org.apache.catalina.Valve interface 를 상속받아서 만든다. 좀 더 구현을 쉽게 하게 하기 위해서 org.apache.catalina.valves.ValveBase 라는 abstract class 도 지원한다.
Valve 는 어느 Catalina container(Engine, Host, Context 같은)에도 묶을 수 있다. Context 에 묶으면 특정 web application 에만 관여하는 valve 가 되는 것이고, Host 에 묶으면 특정 host 로 오는 모든 web application 에 관여하는 valve 가 되는 식이다.
http://i5on9i.blogspot.kr/2014/07/tomcat-valve-servlet-filter.html
요청하는 파이프라인 사이에 추가되어 특별한 처리를 수행하는 컴포넌트입니다. 마치 인터셉터같이 요청과 응답사이에 전처리를 실행할 수 있게 합니다.
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="ioffer_access_log." suffix=".log" pattern="combined" resolveHosts="false"/>
이런식으로 Valve를 두게 되면 logger를 특정할 수 있게 됩니다.
'UNIX,LINUX' 카테고리의 다른 글
아파치 톰캣으로 프로젝트 관리하기 3 (0) | 2017.08.08 |
---|---|
아파치 톰캣으로 프로젝트 관리하기 2 (0) | 2017.08.07 |
아파치 톰캣으로 프로젝트 관리하기 1 (0) | 2017.08.04 |