유저별 단독톰켓(tomcat) 구성(다중 톰켓)

Last Updated on 1월 4, 2021 by 태랑(정현호)

호스팅을 받으신분은 아시겠지만 공용톰켓 단독 톰켓이라는 말을 들어보셨을것 입니다
공용톰켓은 하나의 톰켓으로 버추얼호스트나 context path를 이용하여
쓰레드를 쳐서 여러유저가 하나의 톰켓자원을 사용하는것이고

단독톰켓은 유저가 직접 톰켓을 구성하여 단독으로 톰켓 자원을 사용하는것입니다
이번포스트는 apache와 톰켓이 연동되어있는 상태에서 유저에게 따로 단독으로
톰켓을 띄울때 설정해야하는것들에 대해서 말하려 합니다

관련글 apache+tomcat 연동 포스트

다중 톰켓(tomcat)구성(유저별 단독톰켓)

다중 톰켓(tomcat) 으로 유저별 단독톰켓을 구성하겠습니다

유저별 단독톰켓을 구성하지만 접속은 80 http포트로 이용하기 위해서는

Apache와 톰켓과 연동되어있어야 합니다

이문서는 아파치와 톰켓이 연동되어있는 상태에서 유저별 단독톰켓을 구성하는 것을 알려드립니다

 

abc 라는 유저가 있다고 했을 때 abc유저의 홈디렉토리가 /home/abc라고 할 때

바이너리 형태의 톰켓을 다운받아 abc유저 디렉토리에서 압축을 풀고 세팅을 합니다

 

위치는 /home/abc/tomcat 으로 합니다(톰켓디렉토리명은 상관없음)

해당유저로 작업 하셔도 되고 root로 작업후 chown ?R 유저명:그룹명 /tomcat 으로

소유권을 변경하셔도 됩니다

 

**변경**
변경된 부분이 있어서 수정합니다 환경변수를 부분인데요
총 3가지로 생각해 볼수있습니다
1. 실행하려는 유저의 .bashrc 나 .bash_profile 에
CATALINA_HOME , CATALINA_BASE, TOMCAT_HOME
을등록하는것이고
2. catalina.sh 파일을 열어서 환경변수잡아놓은 값을 받는
부분에서 직접 절대경로로 입력하는방법 (노가다;;)
3. catalina.sh 을 열어서 직접 1번과같은 패스를 잡아주는
것입니다 필자가 한 방법은 3번입니다

/etc/profile 에 시스템 환경변수로 잡아놓는것을 건들지않으면서
좋은듯 합니다

띄우려는 톰켓 디렉토리의 bin 에 있는 catalina.sh 열어서
포스트글 기준으로하면 /home/abc/tomcat/bin/catalina.sh
이겟죠

export CATALINA_HOME=/home/abc/tomcat
export TOMCAT_HOME=/home/abc/tomcat
export CATALINA_BASE=/home/abc/tomcat
이런식으로 기술해주는것이죠 JAVA_HOME 은 /etc/profile에
전역적으로 잡혀있다면 그대로 물려쓰면 되니 기술하지않고
/etc/profile에 기록되어있지않다면
export JAVA_HOME=/위치
로 기록해주면 됩니다

이렇게 위치잡아놓고 밑의 세팅후 올리면 catalina.sh에 써놓은대로
올라가는것을 볼수있습니다 물론 env하면 환경변수상 변경은 없구요

1. /home/abc/tomcat/conf/server.xml 을 열어서 수정을 합니다

 

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->

<Connector port="8081" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

 

이부분은 톰켓의 http기본포트인 8080에 대한 세팅 부분인데 
열어놓게 하려면 위와같이 8080 대신

8081 이런식으로 다른포트를 지정해주면 되며 어자피 apache와연동되어 http apache가 처리해주니

<--   -->    주석처리 하여 8080포트를 비활성화 하여도 상관없습니다

 ***포스팅후 주석처리후 테스트를 해보니 RPM으로 설치한 톰켓은
8080부분을
주석처리하면 톰켓이 올라오다가 다시 주저앉는
경우가 생기는걸 확인했습니다
이유는 흠냐..알아봐야겟지만서도…

압축풀어서 바로 사용하는 바이너리형태 배포 톰켓은 8080포트
주석처리하여도정상운영되는것을 확인했습니다
 

<Connector port="8010" maxHttpHeaderSize="8192" tomcatAuthentication="false"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" protocol="AJP/1.3" />

 

이부분은 ajp1.3 프로토콜에 관한 설정인데 apache와 연동하여 사용시 ajp1.3프로토콜을 이용하니 기존 톰켓과 포트가 겹침으로 변경합니다

 

 

<Engine name="Catalina" defaultHost="localhost">   이부분을 밑에와 같이 jvmRoute를 추가하고

뒤에 명칭은 본인 맘대로 정합니다

<Engine jvmRoute="abc_tomcat" name="Catalina" defaultHost="localhost">

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

 

이부분에서는 밑에 context path 한 줄 추가해주시구요

<Context path="/" docBase="/ROOT" debug="1" crossContext="true" />

 

 

<Server port="8005" shutdown="SHUTDOWN">

기존 톰켓과 컨트롤 포트가 겹칩으로 8005에서 다른포트로 변경합니다

<Server port="8006" shutdown="SHUTDOWN">

 

설정하고 저장하고 나갑니다 (vi 경우 :wq )

여기까지가 일반적은 다중톰켓 구성 이구요

80으로 접속 시도된것을 톰켓이 ajp13프로토콜을 이용하여 받아서 처리해주는
연동상황이기에 아파치도 설정합니다  


현재 필자의 설정은 유저별로
http://주소/유저명

으로 alias context path 가 잡혀있기에 유저별 톰켓에서도
context path
를 잡아줍니다

abc 유저의 홈디렉토리에 www 디렉토리를 웹 홈디렉토리로 잡아주겠습니다

 

/home/abc/tomcat/conf/Catalina/localhost/  
위치에 abc.xml 을 만들어주고

 

<Context path="/abc" docBase="/home/abc/www"

        debug="0" privileged="true" reloadable="true">

 

  <Logger className="org.apache.catalina.logger.FileLogger"

                 directory="logs"  prefix="localhost_log." suffix=".txt"

            timestamp="true"/>

 

</Context>

저장하고 나갑니다

 

root apache 설정합니다

APACHE_HOME/conf/http.conf 파일을 열어서 추가 및 수정 합니다

 

Alias를 설정합니다

Alias /abc "/home/abc/www"

<Directory "/home/abc/www">

Options FollowSymLinks

DirectoryIndex index.html index.jsp *.jsp

Order allow,deny

Allow from all

</Directory>

 

 

Jkmount부분 세팅을 합니다

JkWorkersFile /etc/httpd/conf/workers.properties

JkLogFile     /etc/httpd/logs/mod_jk.log

#JkLogLevel    info

JkMount /*.jsp ajp13

JkMount /servlet/* ajp13

JkMount /*.do ajp13

JkMount /uploadManager ajp13

JkMount /downManager ajp13

JkMount /alice-upload ajp13

JkMount /article/* ajp13

위에는 기본적은 apache와 톰켓 연동 세팅이고 밑에는
추가적으로 abc유저를 위한 세팅입니다

 

# Configure mod_jk abc user

JkLogFile     /etc/httpd/logs/mod_jk.log

#JkLogLevel    info

JkMount /abc/*.jsp abc_tomcat

JkMount /abc/servlet/* abc_tomcat

JkMount /abc/*.do abc_tomcat

JkMount /abc/uploadManager abc_tomcat

JkMount /abc/downManager abc_tomcat

JkMount /abc/alice-upload abc_tomcat

JkMount /abc/article/* abc_tomcat

 

밑에와같이 추가해줍니다

 

APACHE_HOME/conf/workers.properties  파일을 열어 수정 추가합니다

 

worker.list=ajp12, ajp13

를 밑에와같이 뒤에 추가를 해줍니다

worker.list=ajp12, ajp13, abc_tomcat

 

 

 

 

 

밑에와 같이 포트는 위에 톰켓에서 설정해줬던 ajp13프토토콜 포트인
8010
으로 이름은

위에서 계속설정해왓던것처럼 abc_tomcat으로 하겠습니다

worker.abc_tomcat.port=8010

worker.abc_tomcat.host=localhost

worker.abc_tomcat.type=ajp13    ßajp13 그대로 유지

 

밑에도 한줄 추가해주시구요

worker.abc_tomcat.lbfactor=1

 

저장하고 나갑니다

 

유저 홈디렉토리(/home/abc) www 디렉토리 성생후 테스트
페이지를 만들어서 테스트를 해봅니다

 

$ mkdir www

$ vi index.jsp

 

밑의 내용으로 페이지를 간단하게 만들겠습니다

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />

<title> tomcat test page </title>

</head>

 

<body>

<div align="center"> tomcat test page </div>

</body>

 

</html>

 

 위에서 기술한것처럼 내용 수정합니다

저장하고 나서 홈디렉토리에 있는 .bash_profile 이나 .bashrc
밑의 내용을 추가합니다

Bash shell 설정이나 다른쉘은 알아서

export CATALINA_HOME=/home/abc/tomcat

export CATALINA_BASE=/home/abc/tomcat

export TOMCAT_HOME=/home/abc/tomcat

 

 

$ source .bash_profile 이나 source .bashrc

를 한후

 

/home/abc/tomcat/bin/startup.sh    로 실행 합니다

 

netstat ?al | grpe LISTEN   으로 8010 포트나 8081(http)
포트가 열려 잇는지 확인 합니다

 

혹은

ps ?ef | grep tomcat 으로 프로세스가 떠잇는지 확인합니다

 

abc(유저명)    6325     1  0 07:41 pts/6    00:00:48 /usr/java/jdk1.5.0_20/jre/bin/java -Djava.util.logging.config.file=/home/abc/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Djava.endorsed.dirs=/home/abc/tomcat/common/endorsed -classpath /home/abc/tomcat/bin/bootstrap.jar -Dcatalina.base=/home/abc/tomcat -Dcatalina.home=/home/abc/tomcat -Djava.io.tmpdir=/home/abc/tomcat/temp org.apache.catalina.startup.Bootstrap start

 

위와같이 유저홈디렉토리 톰켓이 떠있는 것을 확인 합니다

Startup.sh 실행후 여러 번 확인해봐야 합니다 처음에는 확인되고
설정상 포트가 겹쳐서 조금있다가

톰켓이 스스로 주저앉는 경우가 있음으로 시간이 지나서도
톰켓프로세스와 포트가 열려있다면

정상적으로 올라간 것 입니다

 

Apache 를 구동해주시고 기존에 사용중이던

공용tomcat(8080포트와 ajp13포트를 8009로 사용하는톰켓)은 테스트를 위해 정지해주시고

 

 

http://주소/abc   로 접속해서 위에서 만들었던 테스트 페이지가
보이는지 확인합니다

확인이 되었다면

기존 공용 톰켓을 올려서 apache와 연동하여 설정되었던

가령 /var/www/html   등에 설정되어있는 페이지가 정상적으로
보이는지 확인 합니다

 

ps ?ef | grep LISTEN 으로 8080 8081 /  8009 8010
(
현재 문서세팅상입니다 다를수있음)

 

위에서 설정한 포트가 정상 작동하는 것을 확인 하는 것으로 설정 및
확인을 마칩니다

 


밑의 스샷은 http포트인 8080포트는 주석처리 하고
공용톰켓1개에 단독톰켓 2개를 올려진 스샷입니다
8009가 공용톰켓ajp13프로토콜 포트이고
8005가 공용톰켓 컨트롤 포트이고

8010/8011 이 단독톰켓 의 ajp13 포트이고
8006/8007 이 단독톰켓 컨트롤 포트 입니다
잘떠잇는것을 확인할수있습니다

포스트 다운 받기 cfile1.uf.1724F7184B29361D1D3A8A.pdf

답글 남기기