Tomcat & nginx 운영 · Tomcat 구조와 server.xml · 실습
server.xml 손보기 — 커넥터·보안·액세스로그
목표
server.xml 의 계층 구조를 이해하고 커넥터 추가, 종료 포트 보안 조치,
액세스 로그 포맷 변경, 외부 docBase 컨텍스트, 응답 압축을 직접 설정할 수 있게 됩니다.
왜 중요한가
server.xml 은 SI 현장에서 가장 자주 열리는 설정 파일입니다. 그런데 대부분
"어디선가 받은 파일을 복사해서 포트만 바꾸는" 방식으로 다뤄집니다.
그 결과 종료 포트가 기본값인 채로 운영에 나가고(보안 점검 지적 1순위),
액세스 로그에 응답시간이 없어서 "느리다"는 신고에 근거를 대지 못합니다.
이 실습은 각 속성이 무엇을 바꾸는지 직접 확인하면서 익힙니다.
단계
1. Tomcat 을 기동하고, /opt/tomcat/conf/server.xml 을/opt/tomcat/conf/server.xml.orig 로 백업합니다.
2. server.xml 에 포트 8081 HTTP 커넥터를 추가하고 재기동합니다.http://127.0.0.1:8081/ 이 200 이어야 합니다.
3. Server 엘리먼트의 shutdown 속성값을 기본값(SHUTDOWN)이 아닌
8자 이상의 다른 문자열로 바꿉니다.
4. Host 안의 AccessLogValve 의 pattern 에 밀리초 단위 처리시간 지정자를
추가하고 재기동한 뒤, 요청을 한 번 보내/opt/tomcat/logs/localhost_access_log.*.txt 에 로그가 남게 합니다.
5. /opt/tomcat/conf/Catalina/localhost/api.xml 을 만들어docBase 를 /opt/lab/fixtures/tomcat/api 로 지정합니다. 재기동 후http://127.0.0.1:8080/api/index.html 이 200 이어야 합니다.
6. 8080 커넥터에 압축을 켜고 재기동합니다.curl -H 'Accept-Encoding: gzip' -I http://127.0.0.1:8080/api/big.html 의
응답 헤더에 Content-Encoding: gzip 이 있어야 합니다.
7. /root/tc/validate.sh 를 만듭니다. 인자 하나(XML 파일 경로)를 받아
XML 이 정상이면 종료코드 0, 깨졌거나 파일이 없으면 0 이 아닌 값으로 종료합니다.
8. /root/tc/serverxml.csv 를 만듭니다. 첫 줄은 element,attribute,value,why.
2~6 단계에서 바꾼 설정 5건을 각각 한 행씩 적습니다.why 는 15자 이상이어야 합니다.
참고
xmlstarlet sel -t -v "//Connector/@port" -n /opt/tomcat/conf/server.xml로 값 확인- 컨텍스트 파일 예:
<Context docBase="/경로" />(한 줄이면 충분합니다) - 흔한 실수 1: XML 을 고친 뒤 재기동을 안 하는 것. server.xml 은 핫 리로드되지 않습니다.
- 흔한 실수 2: 커넥터를
Engine안에 넣는 것.Connector는Service의 직계 자식입니다. - 흔한 실수 3: 압축이 안 켜졌다고 생각하는데 사실은 응답이 최소 크기보다 작은 것.
단계 8개
- 원본 백업
- 추가 커넥터 생성
- 종료 명령어 변경
- 액세스 로그에 응답시간 추가
- webapps 밖 디렉터리 서비스
- 커넥터 압축 설정
- 설정 검증 스크립트
- 변경 내역 문서화