LabHub
学习 学习路径 课程

Tomcat 与 nginx 运维

动一动 server.xml — 连接器、安全、访问日志

在 LabHub 中继续学习

한국어 원문으로 표시합니다.

목표

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 안의 AccessLogValvepattern밀리초 단위 처리시간 지정자를 추가하고 재기동한 뒤, 요청을 한 번 보내 /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자 이상이어야 합니다.

참고

원본 백업

Tomcat 을 기동하고, /opt/tomcat/conf/server.xml/opt/tomcat/conf/server.xml.orig 로 백업합니다.

설정 파일을 고치기 전 백업은 협상 대상이 아닙니다. 백업본도 유효한 XML 이어야 의미가 있습니다.

추가 커넥터 생성

server.xml포트 8081 HTTP 커넥터를 추가하고 재기동합니다. http://127.0.0.1:8081/ 이 200 이어야 합니다.

Connector 는 Service 아래에 여러 개 둘 수 있습니다. 기존 커넥터를 복사해 포트만 바꾸면 됩니다. 반영은 재기동 후입니다.

종료 명령어 변경

Server 엘리먼트의 shutdown 속성값을 기본값(SHUTDOWN)이 아닌 8자 이상의 다른 문자열로 바꿉니다.

Server 엘리먼트의 shutdown 속성이 기본값이면 8005 포트에 접속할 수 있는 누구나 WAS 를 내릴 수 있습니다. 보안 점검 단골 항목입니다.

액세스 로그에 응답시간 추가

Host 안의 AccessLogValvepattern밀리초 단위 처리시간 지정자를 추가하고 재기동한 뒤, 요청을 한 번 보내 /opt/tomcat/logs/localhost_access_log.*.txt 에 로그가 남게 합니다.

AccessLogValve 의 pattern 에 처리 시간을 나타내는 지정자를 추가합니다. 밀리초 단위 지정자와 초 단위 지정자가 따로 있으니 문서를 확인하세요. 재기동 후 요청을 한 번 보내야 로그가 생깁니다.

webapps 밖 디렉터리 서비스

/opt/tomcat/conf/Catalina/localhost/api.xml 을 만들어 docBase/opt/lab/fixtures/tomcat/api 로 지정합니다. 재기동 후 http://127.0.0.1:8080/api/index.html 이 200 이어야 합니다.

conf/Catalina/localhost/ 아래에 컨텍스트명.xml 을 두면 그 이름이 컨텍스트 경로가 되고, docBase 로 임의 경로를 가리킬 수 있습니다.

커넥터 압축 설정

8080 커넥터에 압축을 켜고 재기동합니다. curl -H 'Accept-Encoding: gzip' -I http://127.0.0.1:8080/api/big.html 의 응답 헤더에 Content-Encoding: gzip 이 있어야 합니다.

Connector 속성으로 압축을 켭니다. 최소 크기 기준이 있어서 작은 응답은 압축되지 않습니다. 클라이언트가 Accept-Encoding 을 보내야 하는 것도 잊지 마세요.

설정 검증 스크립트

/root/tc/validate.sh 를 만듭니다. 인자 하나(XML 파일 경로)를 받아 XML 이 정상이면 종료코드 0, 깨졌거나 파일이 없으면 0 이 아닌 값으로 종료합니다.

배포 전에 XML 이 깨졌는지 확인하는 스크립트입니다. 인자로 받은 파일을 검증하고 종료코드로 알려야 자동화에 씁니다. xmlstarlet 이나 python 중 편한 것을 쓰세요.

변경 내역 문서화

/root/tc/serverxml.csv 를 만듭니다. 첫 줄은 element,attribute,value,why. 2~6 단계에서 바꾼 설정 5건을 각각 한 행씩 적습니다. why 는 15자 이상이어야 합니다.

설정 변경은 반드시 '무엇을 왜' 함께 남깁니다. 6개월 뒤 이 값을 되돌리려는 사람에게 필요한 것은 값이 아니라 이유입니다.