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

Share

Last Updated on 4월 4, 2022 by Jade(정현호)

Tomcat 의 유형

호스팅을 받으신분은 아시겠지만 공용 톰켓, 단독 톰켓이라는 말을 들어보셨을것 입니다

공용톰켓은 하나의 톰켓으로 버추얼호스트나 context path를 이용하여 여러유저가 하나의 톰켓자원을 사용하는것입니다.

단독톰켓은 유저가 직접 톰켓을 구성하여 단독으로 톰켓 자원을 사용하는것입니다

이번포스트는 apache와 톰켓이 연동되어있는 상태에서 유저에게 따로 단독으로
톰켓을 띄울때 설정해야하는것들에 대해서 설명하도록 하겠습니다.

관련글 apache+tomcat 연동 포스트


포스팅의 테스트 환경에서는 유저별 단독 톰켓을 구성하지만 접속은 80 http 포트로 접속하기 위해서 Aapache 와 Tomcat 이 연동 되어 있는 상태 이며 해당 상태에서 유저별 단독 톰켓을 구성을 진행을 하도록 하겠습니다
           

다운로드 및 디렉토리 설정

먼저 Tomcat 을 다운을 받아야 합니다. 다운로드는 아래 페이지에서 사용하실 버전으로 다운로드 받으시면 됩니다.


wget ... apache-tomcat-9.0.50.zip


abc 라는 유저를 테스트에서 사용한다고 하였을때 홈디렉토리가 /home/abc 라고 할 때 위에서 다운로드받은 바이너리 형태의 Tomcat 을 사용자 홈 디렉토리에 압축을 해제 및 디렉토리명 변경을 합니다.

위치는 /home/abc/tomcat 으로 하도록 하겠습니다.
(톰켓 디렉토리명은 상관없음) 


$ unzip apache-tomcat-9.0.50.zip
$ mv apache-tomcat-9.0.50 tomcat
       

환경변수 설정

환경변수를 설정을 할 부분이 있으며, 3가지 정도 생각해 볼수 있습니다

1. 실행하려는 유저의 .bashrc 나 .bash_profile 에 CATALINA_HOME , CATALINA_BASE, TOMCAT_HOME 을 등록
2. catalina.sh 파일을 열어서 환경변수잡아놓은 값을 받는 부분에서 직접 절대경로로 입력하는방법
3. catalina.sh 을 열어서 직접 1번과같은 패스를 설정하는 것 입니다.

포스팅에서는 3번으로 진행 하도록 하겠습니다.

실행하려는 톰켓 디렉토리의 bin 에 있는 catalina.sh 파일을 vi 편집기 등으로 편집하여 내용을 추가 합니다.

(포스트글 기준으로 /home/abc/tomcat/bin/catalina.sh)

export CATALINA_HOME=/home/abc/tomcat
export TOMCAT_HOME=/home/abc/tomcat
export CATALINA_BASE=/home/abc/tomcat
export JAVA_HOME=...

JAVA_HOME 은 /etc/profile 등에서 전역 적으로 잡혀있다면 그대로 사용하면 됩니다.

그렇지 않다면 별도로 위에서 설정을 해주시면 됩니다.
           

설정 변경

Tomcat 및 Apache 에 대해서 설정을 변경 하도록 하겠습니다.
        

Tomcat 설정 변경

/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기본포트인 8081에 대한 설정 부분 입니다.

다른 유저의 환경에서 Tomcat 이 실행되어 있을 수도 있는 환경이라면 8080 으로 기동시 포트가 중복되어 실행이 되지 않을 수 있습니다 위와 같이 8080 이 아닌 다른 포트를 사용하거나 Apache 와 연동되어 있기 때문에 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" />
 

기존 톰켓과 컨트롤 포트가 중복될 수 있음으로 8005에서 다른포트로 변경합니다

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

to


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


설정하고 저장하고 vi 를 종료 합니다. 여기까지가 일반적인 다중 톰켓 구성 입니다.


80으로 접속 시 톰켓의 ajp13 프로토콜을 이용하여 처리를 하기 때문에 아파치(Apache)의 설정도 필요 합니다.

포스팅의 설정은 유저별로 http://주소/유저명

으로 alias context path 가 설정되어있기 때문에 유저별 톰켓에서도 context path 를 설정 해야 합니다. 

abc 유저의 홈디렉토리에 www 디렉토리를 Web 홈디렉토리로 설정하였습니다.



/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>
           

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 worker1
JkMount /servlet/* worker1
JkMount /*.do worker1
JkMount /uploadManager worker1
JkMount /downManager worker1 
JkMount /alice-upload worker1
JkMount /article/* worker1

# 위에는 내용이 보통의 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


workers.properties 파일 수정

$APACHE_HOME/conf/workers.properties  파일을 수정 하여 worker.list 에 추가 합니다.
worker.list= worker1, abc_tomcat 
 

아래와 같이 포트는 위에 톰켓에서 설정해줬던 ajp13프토토콜 포트인 8010으로 이름은 위에서 계속 설정 한 내역 처럼 abc_tomcat 으로 하겠습니다

worker.abc_tomcat.port=8010
worker.abc_tomcat.host=localhost

worker.abc_tomcat.type=ajp13 
worker.abc_tomcat.lbfactor=1

설정 완료 후 Apache 를 재시작 합니다.
       

설정 완료 테스트

         

테스트 페이지 생성

유저 홈디렉토리(/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>
         

Tomcat 실행

아래와 같이 Tomcat 을 실행 합니다.

/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 


위와같이 유저 홈 디렉토리에서 톰켓이 실행 되는지를 확인 합니다


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

아래 이미지는 http 포트인 8080포트는 주석처리 하고 공용톰켓 1개에 단독톰켓 2개 실행된 내역 입니다.

- 8009가 공용톰켓 ajp13 프로토콜 포트 이며 8005가 공용 톰켓 컨트롤 포트

- 8010/8011 이 단독톰켓 의 ajp13 포트
- 8006/8007 이 단독톰켓 컨트롤 포트

 

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x