홈 › 리눅스 운영 › 05 / 13

Tomcat·nginx 배포·재기동

섹션 7진행 0 / 13

4. 응용 변형 예제

4.1 Tomcat 여러 인스턴스 — CATALINA_BASE 분리

bash
export CATALINA_HOME=/opt/tomcat
export CATALINA_BASE=/opt/tomcat-8081       # conf/ webapps/ logs/ 를 따로
sed -i 's/port="8080"/port="8081"/; s/port="8005"/port="8006"/' "$CATALINA_BASE/conf/server.xml"
"$CATALINA_HOME/bin/startup.sh"

server.xml 의 HTTP 포트와 shutdown 포트를 모두 바꿔야 충돌하지 않습니다. 배포 스크립트는 CATALINA_BASE 만 바꿔 같은 파일로 두 인스턴스를 다룹니다.

4.2 catalina.out 보기

Tomcat 의 stdout 은 logs/catalina.out 에 계속 쌓입니다. 02 레슨의 도구를 그대로 씁니다.

bash
tail -f logs/catalina.out | grep --line-buffered -E 'ERROR|Exception'
grep -c 'Server startup in' logs/catalina.out      # 기동 횟수
grep -A20 'SEVERE' logs/catalina.out | head -n 40

Server startup in [n] ms 가 찍히면 기동 완료입니다. 헬스 체크 URL 이 없는 옛 앱은 이 줄을 기다리는 것으로 대신합니다.

4.3 HTTPS 종료

인증서는 nginx 에만 두고 Tomcat 은 8080 http 로 둡니다. 자바 쪽 keystore 관리가 없어집니다.

nginx
server {
    listen 443 ssl;
    ssl_certificate     /etc/nginx/ssl/myapp.crt;
    ssl_certificate_key /etc/nginx/ssl/myapp.key;
    location / { proxy_pass http://myapp; proxy_set_header X-Forwarded-Proto https; }
}
server { listen 80; return 301 https://$host$request_uri; }

X-Forwarded-Proto https 를 넘겨야 Spring 이 리다이렉트 URL 을 https:// 로 만듭니다. 폐쇄망은 사내 CA 인증서를 씁니다.

4.4 정적 파일과 캐시

nginx
location ~* \.(js|css|png|woff2)$ {
    root /opt/myapp/public;
    expires 30d;
    add_header Cache-Control "public";
}

Tomcat 이 정적 파일까지 서비스하면 스레드를 낭비합니다. 배포 시 정적 파일을 /opt/myapp/public 에 함께 풀어 두면 nginx 가 직접 줍니다.

4.5 점검 페이지 전환

배포 중 사용자에게 점검 안내를 보여 주려면 파일 하나로 전환합니다.

nginx
location / {
    if (-f /opt/myapp/maintenance.on) { return 503; }
    proxy_pass http://myapp;
}
error_page 503 /maintenance.html;
location = /maintenance.html { root /opt/myapp/public; }

touch /opt/myapp/maintenance.on 으로 켜고 rm 으로 끕니다. reload 도 필요 없어 배포 스크립트 앞뒤에 넣기 좋습니다.