[Linux] Apache2 Installation, and Configuration / 아파치2 설치 및 설정
[Linux] Tomcat 9.0 Installation & Configuration / 톰캣 9.0 설치 및 설정
위 두 게시글에서 아파치 및 톰캣 설치를 알아봤고, 이제는 두개를 연동하고자 한다.
많은 접속자가 발생할 경우 톰캣만으로는 성능이 떨어질 수 있기 때문에 연동을 추천한다.
Tomcat 복제, Tomcat01 생성
기존 톰캣을 곧바로 연동해도 되지만, 이럴 경우 설정이 실패하거나 '톰캣'만으로 서버를 돌려야 할 때 문제가 된다. 그래서 설치한 Tomcat의 사본 Tomcat01을 만들어 Tomcat01을 아파치에 연동한다.
이를 위해 기존에 깔린 tomcat을 그대로 복사하면 된다.
$ cp /etc/default/tomcat9 /etc/default/tomcat01
$ vi /etc/default/tomcat01
# /etc/default/tomcat01
JAVA_OPTS="-Dlog.nameattach=01 -Djava.awt.headless=true -Xmx512m -X:+UseconcMarkSweepGC -Djava.security.egd=file:/dev/./urandom"
cp /etc/init.d/tomcat9 /etc/init.d/tomcat01
# /etc/init.d/tomcat01
...
set -e
NAME=tomcat01
DESC="Tomcat 01 servlet engine"
$ systemctl daemon-reload
$ cp -a /var/lib/tomcat9 /var/lib/tomcat01
$ cp -a /usr/share/tomcat9 /var/lib/tomcat01
$ cd /var/lib/tomcat01
$ rm /var/lib/tomcat01/conf
$ mkdir conf
$ cp -a /etc/tomcat8/* /var/lib/tomcat01/conf/
$ rm /var/lib/tomcat01/work
$ mkdir work
$ vi /var/lib/tomcat01/conf/server.xml
# /var/lib/tomcat01/conf/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="포트1" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<Service name="Catalina">
<Connector port="포트2" protocol="AJP/1.3" redirectPort="443"
URIEncoding="UTF-8"
maxThreads="1024"
maxPostSize="-1"
/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="도메인" appBase="웹앱 디렉토리"
unpackWARs="true" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>
$ /etc/init.d/tomcat01 restart
이 때, 위에 포트1과 포트2로 나뉘어져 있는걸 볼 수 있는데, 다음과 같은 규칙을 가지면 좋다.
포트1=800X | 포트2=801X
이후 tomcat01이 정상적으로 동작하는지 보면 된다.
Apache2 설정
Tomcat01이 정상적으로 동작한다면 Apache2의 설정을 진행하면 된다.
$ vi /etc/apache2/envvars
# /etc/apache2/envvars
export APACHE_RUN_USER=tomcat9 #혹은 자신이 설치한 tomcat (복제본 아님)
export APACHE_RUN_GROUP=tomcat9 #혹은 자신이 설치한 tomcat (복제본 아님)
$ vi /etc/apache2/conf-enabled/other-vhosts-acces-log.conf
# /etc/apache2/conf-enabled/other-vhosts-acces-log.conf
# CustomLog ~ # 주석 처리
$ cd /etc/apache2/sites-available
$ vi 본인이 JSP로 연결할 사이트.conf
# vi 본인이 JSP로 연결할 사이트.conf
<VirtualHost *:80>
...
JkMountCopy On
JkMount /* 워커이름
...
</VirtualHost>
$ apt-get install libapache2-mod-jk
$ vi /etc/apache2/mods-available/jk.conf
# /etc/apache2/mods-available/jk.conf
JkLogLevel Error
# 아래 내용 주석 처리
# <Location /jk-status>
# # Inside Location we can omit the URL in JkMount
# JkMount jk-status
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
# </Location>
# <Location /jk-manager>
# Inside Location we can omit the URL in JkMount
# JkMount jk-manager
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
# </Location>
$ vi /etc/libapache2-mod-jk/workers.properties
worker.list=워커이름
worker.톰캣복사본이름=port=포트2
worker.톰캣복사본이름.host=도메인주소 #특별하지 않으면 localhost를 사용하자
worker.톰캣복사본이름.type=ajp13 # HTTP로 설정할 경우 오류가 발생한다.
worker.톰캣복사본이름.lbfactor=1
worker.워커이름.type=lb
worker.워커이름.balance_workers=톰캣복사본이름
톰캣2에서 환경변수 설정을 통해 아파치 실행 유저를 톰캣 유저로 설정하는건 안해도 되지만, 나는 JSP서버만 이용할것이기 때문에 tomcat9유저로 통일했다.
JSP 서버를 실행하기 위해서는 mod-jk를 사용해야하는데, mod-jk는 아파치 프로토콜을 사용하여 Tomcat 서블릿 컨테이너를 연결하는 모듈이다.
따라서 내가 연결할 사이트에 JkMount를 설정해줘야한다.
mod-jk를 설정하고, 워커 (loadbalancer)를 설정해줘야 하는데, 이는 내 서버의 아이피 주소로 들어오는 연결을 톰캣으로 보내기 위함이다.
따라서 워커가 갖는 host과 port는 tomcat01(톰캣복사본) server.xml에서 설정한 포트와 hostname이 된다.
type의 경우도 server.xml에서 설정한 protocol이 되는데, 아파치와 톰캣은 AJP를 이용해 통신하므로 ajp13으로 해준다. (이 때문에 tomcat복사본의 server.xml의 protocol도 AJP 1.3이다.)
로드 밸런싱(워커 설정)이 끝났으면 아파치 톰캣 재시작으로 확인하면 된다.
$ systemctl stop apache2
$ systemctl stop tomcat8
$ systemctl stop tomcat01
$ systemctl start tomcat01
$ systemctl start apache2
주의할 점은 tomcat9(기존 톰캣)와 tomcat01이 동시에 실행되면 충돌이 일어나기 때문에 항상 기존 tomcat은 프로세스를 종료하도록 하자.