1개의 Tomcat에서 2개의 instance를 띄우고자 하는 시나리오를 가정한다. (Tomcat 8.0 기준)


1. Tomcat 설치 폴더 : 

/home/finkle/tomcat8


2. 인스탄스 1번 폴더 : 

/home/finkle/instance/svc01


3. 인스탄스 2번 폴더 : 

/home/finkle/instance/svc02



1. 톰캣 설치 폴더에서 1번 instance로 파일 복사

$ cd /home/finkle/instance/svc01

$ cp -R /home/finkle/tomcat8/* .

$ rm -rf bin lib LICENSE NOTICE RELEASE-NOTES RUNNING.txt

$ ls

conf logs temp webapps work


※ 2번 instance도 위와 같은 과정을 따라한다.


3. conf/server.xml 수정 : 서비스를 위한 포트번호가 중복되지 않도록 설정한다.


1번 instance의 server.xml


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

....

    <Connector port="80" protocol="HTTP/1.1" Server="WAS-NAME"

               connectionTimeout="20000"

               redirectPort="443" URIEncoding="utf-8" />

....


2번 instance의 server.xml


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

....

    <Connector port="8010" protocol="HTTP/1.1" Server="WAS-NAME"

               connectionTimeout="20000"

               redirectPort="8443" URIEncoding="utf-8" />

....


4. 1번 instance의 Tomcat 구동 스크립트 작성


$ cd /home/finkle/instance/svc01

$ mkdir bin

$ cd bin

$ touch startup.sh

$ touch shutdown.sh

$ chmod +x *.sh



startup.sh


#!/bin/sh


CATALINA_BASE=/home/finkle/instance/svc01

CATALINA_OPTS="-Denv.servername=svc01"

CATALINA_PID=/home/finkle/instance/svc01/svc01.pid

JAVA_OPTS="-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xms512m -Xmx512m"


export CATALINA_BASE CATALINA_OPTS CATALINA_PID JAVA_OPTS


/bin/su -p -s /bin/sh finkle $CATALINA_HOME/bin/startup.sh



shutdown.sh


#!/bin/sh


CATALINA_BASE=/home/finkle/instance/svc01

CATALINA_PID=/home/finkle/instance/svc01/svc01.pid


export CATALINA_BASE CATALINA_PID


/bin/su -p -s /bin/sh finkle $CATALINA_HOME/bin/shutdown.sh


※ 2번 instance도 위와 같은 과정을 따라한다.



도움받은 곳 : 

http://linux.systemv.pe.kr/tomcat-multi-instance-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0/


https://beyondj2ee.wordpress.com/2012/07/03/%EB%A9%80%ED%8B%B0-%ED%86%B0%EC%BA%A3-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EB%A1%9C-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-multiple-tomcat-instances/


무료로 SSL 인증서를 배포하는 wosign(회원가입 필요)에서 인증서를 생성해 Tomcat 서버에 적용하는 과정에서 몇 번의 삽질 끝에 성공한 절차를 기록해본다.



1. 개인키 파일 생성

# keytool -genkey -keyalg RSA -sigalg SHA1withRSA -alias mySSL -keysize 2048 -keystore mySSL.jks


키 저장소 비밀번호 입력:  

새 비밀번호 다시 입력: 

이름과 성을 입력하십시오.

  [Unknown]:  Finkle

조직 단위 이름을 입력하십시오.

  [Unknown]:  Finkle

조직 이름을 입력하십시오.

  [Unknown]:  RND

구/군/시 이름을 입력하십시오?

  [Unknown]:  Seoul

시/도 이름을 입력하십시오.

  [Unknown]:  Seoul

이 조직의 두 자리 국가 코드를 입력하십시오.

  [Unknown]:  KR

CN=Finkle, OU=Finkle, O=RND, L=Seoul, ST=Seoul, C=KR이(가) 맞습니까?

  [아니오]:  y


<mySSL>에 대한 키 비밀번호를 입력하십시오.

(키 저장소 비밀번호와 동일한 경우 Enter 키를 누름):  

새 비밀번호 다시 입력:


2. 생성된 파일 확인

# keytool -list -keystore mySSL.jks 


3. CSR 생성

# keytool -certreq -alias mySSL -keyalg RSA -sigalg SHA1withRSA -file mySSL.csr -keystore mySSL.jks

키 저장소 비밀번호 입력: 


4. https://buy.wosign.com/free/ 접속 후 위에서 생성한 CSR 파일 내용 붙여넣기


5. zip 파일 다운로드

mydomain.co.kr_sha256_en.zip


6. 압축 파일 내 [for Other Server.zip] 파일의 내용 추출 후 적용대상 서버에 업로드

root.crt

1_cross_Intermediate.crt

2_issuer_Intermediate.crt

3_user_mydomain.co.kr.crt


7. Tomcat에 적용할 정보 키스토어 파일에 적용

# keytool -import -trustcacerts -alias WoSignROOT -file root.crt -keystore mySSL.jks

# keytool -import -trustcacerts -alias CrossINTER -file 1_cross_Intermediate.crt -keystore mySSL.jks

# keytool -import -trustcacerts -alias IssuerINTER -file 2_issuer_Intermediate.crt -keystore mySSL.jks

# keytool -import -alias mySSL-file 3_user_mydomain.co.kr.crt -keystore mySSL.jks



8. 내용 확인

# keytool -list -v -keystore mySSL.jks


9. 톰캣 설정 파일 변경

$ vi server.xml

<Connector port="443" protocol="HTTP/1.1"

       maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

       clientAuth="false" sslProtocol="TLS" 

       keystoreFile="/home/path/tools/ssl/mySSL.jks" keystorePass="xxxx" />


10. 톰캣 재기동

Tomcat에서 정상 동작하던 것이 Weblogic 전환 시 문제가 발생한다.

Weblogic은 ....
1. include 되는 녀석의 contentType 중복을 허용하지 않음

버전 8,1의 경우에는 ....
2. JSTL 1.0만 지원함
[1.1 버젼] : <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
[1.0 버젼] : <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>


3. Sevlet 2.3만 지원함 (Sevlet 2.4 -> http://www.okjsp.pe.kr/seq/30536)
[2.4 버젼] : <!DOCTYPE web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
[2.3 버젼] : <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

Sitemesh와 통합했을 경우에는 ....
4. Didn't meet stated Content-Length 에러 발생
: response.setContentLength의 크기가 Sitemesh에 의해 변하는 것을 Weblogic은 허용하지 않고 에러를 발생시킨다.

com.opensymphony.module.sitemesh.filter.PageFilter 클래스 아래와 같이 변경함
    if (Container.get() != Container.WEBLOGIC) {
        response.setContentLength(page.getContentLength());
    }

※ 아울러 한글 Window OS에서 UTF-8 인코딩 설정 시 한글 문제 아직 미해결 함 (이것 역시 Sitemesh와의 문제인 듯 ....)

+ Recent posts