[톰캣] server.xml 설정
서버/톰캣 2016.07.01 19:00
server.xml은 아래의 톰캣 아키텍처 구조를 그대로 반영한 설정파일이므로 , 다음과 같은 구조를 파악하는 것이 설정파일 이해에 많은 도움이 된다 .
1. <Server>
- 최상위 컴포넌트로서, 톰캣의 인스턴스와 동일하다.
- 1개 이상의 <Service>를 포함한다.
- 기본으로 8005 포트가 설정되어 있다 . 여러개의 톰캣 인스턴스를 사용할 경우 , 포트번호 설정을 다르게 하여야 한다 .
속성
설명
shutdown
톰캣을 셧다운할 때 , 사용할 텍스트를 설정한다 .
기본으로 "SHUTDOWN" 이 설정되어 있는데 TCP 소켓으로 SHUTDOWN 텍스트를 날리면 톰캣 서버가 종료된다 . ( 링크참조 )
따라서 , 보안강화를 위해 shutdown 의 텍스트를 임의로 변경하거나 , 포트 설정을 port="-1" 로 셋팅하고 자체적으로 kill 명령을 통해 종료처리를 할 수 있다 .
2. <Listener>
- <Server>의 하위 컴포넌트
- 특정 이벤트들을 리스닝하고 이벤트 발생시 응답한다.
3. <GlobalNamingResources>
- <Server>의 하위 컴포넌트
- <Resource> 등을 통해서 전역 리소스를 설정한다. (JNDI 등...)
4. <Service>
- <Server>의 하위 컴포넌트
- 1개 이상의 <Connector>와 <Engine>을 포함한다 .
- 기본으로 설정된 이름은 Catalina이다. 여담으로 Catalina 이름의 유래는 톰캣 서블릿 컨테이너를 고안한 Craig McClanahan 이 좋아한 섬 (Catalina Island) 이름이였다고 한다 . ( 링크참조 )
5. <Connector>
- 톰캣은 기본적으로 HTTP(8080), HTTPS(8443), AJP(8009) 커텍터를 제공한다.
- HTTP Connector : https://tomcat.apache.org/tomcat-7.0-doc/config/http.html
- AJP Connector : https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html
속성
설명
port
포트번호
protocol
프로토콜명 (HTTP/1.1, AJP/1.3 등 ..)
acceptCount
Request 큐의 길이를 설정한다 . HTTP 요청시 , IDLE 쓰레드가 없을 경우 해당값만큼 요청을 대기한다 . 대기 큐에 들어간다는 것은 처리가능한 쓰레드가 없다는 의미이며 , 기능장애 가능성이 높다 . 따라서 , 계속 대기 큐에 쌓이도록 하는 것보다 0~10 내외로 값을 낮게 주어 처리하도록 한다 .
redirectPort
SSL 요청이 들어올 경우 리다이렉트될 포트번호
URIEncoding
GET 요청을 처리할 때 사용할 인코딩 방식을 설정한다 . 톰캣은 기본적으로 ISO-8859-1 인데 , 한글 사용을 위해 UTF-8 로 변경을 해주도록 한다
useBodyEncodingForURI
true/false 로 설정한다 .
이 값은 request.setCharacterEncoding() 으로 설정한 값으로 인코딩을 처리한다 . 스프링 프레임워크를 사용할 경우 web.xml 에서 CharacterEncodingFilter 로 선언해주는 값으로 인코딩을 하게 된다
maxParameterCount
GET 또는 POST 로 전달할 수 있는 파라미터 갯수
기본값은 10000 개
0 으로 설정하게 되면 갯수에 제한을 두지 않는다 .
maxPostSize
POST 로 전달할 수 있는 bytes 사이즈
기본값은 2Mbytes(2097152)
0 이하의 숫자로 설정하게 되면 bytes 사이즈에 제한을 두지 않는다
connectionTimeout
타임아웃 밀리세컨드
기본값은 60000(60 초 ) 이며 -1 일 경우 타임아웃의 제한이 없다
connectionUploadTimeout
데이터 업로드에 대한 타입아웃 밀리세컨드
이 설정은 disableUploadTimeout 이 false 일 경우에 효과가 있다
maxThreads
Connector 에서 처리할 수 있는 동시 요청 쓰레드 갯수
기본값은 200 개
아파치와 연동할 경우 MaxClients 값과 관계가 있다 . 아파치 MaxClients 가 톰캣의 maxThreads 보다 많을 경우 hang 이 걸릴수가 있다 .
※ maxThreads X 로드밸런싱 갯수 = MaxClients * 1.1 ( 또는 1.2)
아파치 prefork 방식 기준이다 .
※ http://knight76.tistory.com/entry/Apache-http- 서버와 -tomcat- 서버간의 - 연결 - 유의사항 참고
minSpareThreads
최소로 유지할 쓰레드 갯수
기본값은 10
maxSpareThreads
idle 상태로 유지할 최대 쓰레드 갯수
톰캣 6 이후로 없어진 속성값 . 톰캣 5.5 까지 지원한다 .
6. <Engine>
- 커넥터로 수신한 클라이언트의 요청을 처리하고 응답한다.
- 기본으로 설정된 이름은 Catalina이다.
7. <Host>
- VirtualHost를 의미하며, name 속성으로 설정된 호스트명으로 웹 애플리케이션을 제공한다 .
- 기본으로 설정된 이름은 localhost이다.
- 하나의 톰캣 인스턴스에 여러개의 <Host>도 사용가능하나, 보통 톰캣 인스턴스당 1개의 <Host> 설정을 추천한다.
속성
설명
appBase
웹 애플리케이션이 존재하는 경로 . CATALINA_BASE 의 webapps 를 기본으로 한다 .
unpackWARs
기동시 war 파일을 압축해제한다 .
autoDeploy
class 파일 , JSP, XML 등이 갱신되었을 때 자동으로 배포한다 .
8. <Context>
- 웹 애플리케이션의 의미한다.
- <Context> 설정이 <Host>안에 없을 경우 기본적으로 webapps 하위의 ROOT 디렉토리(or ROOT.war) 을 기본경로 (http://localhost:8080/) 로 설정한다 .
- 컨텍스트 설정은 CATALINA_BASE 하위의 conf 디렉토리에서도 설정할 수 있다.
예제) %CATALINA_BASE%\conf\[엔진명]\[호스트명] 하위에 설정파일 추가.
- %CATALINA_BASE%\conf\Catalina\localhost\host-manager.xml
<Context antiResourceLocking="false" privileged="true" useHttpOnly="true" />
- %CATALINA_BASE%\conf\Catalina\localhost\manager.xml
<Context antiResourceLocking="false" privileged="true" useHttpOnly="true" />
9. <Valve>
- 요청을 처리하는 파이프라인 사이에 추가되어 특별한 처리를 수행하는 컴포넌트다.
- Valve는 Catalina 컨테이너(Context, Host 또는 Engine)에 추가되어, 요청과 응답 사이에 pre-processing을 가능하게 한다. <Context>에 추가되면 해당 웹 애플리케이션에 Valve가 적용, <Host>에 추가되면 모든 웹 애플리케이션에 Valve가 적용된다.
- Servlet Filter와 비슷한 기능이나, Servlet은 EE 스펙, Valve는 톰캣 스펙이다.
※참고자료
- 리눅스를 활용한 회사 인프라 구축의 모든 것
- http://i5on9i.blogspot.kr/2014/07/tomcat-valve-servlet-filter.html
- https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html
- http://bcho.tistory.com/788
출처: https://pshcode.tistory.com/109 [박성훈의 웹개발]