Last Updated on 11월 3, 2020 by Jade(정현호)
안녕하세요
이번 포스팅에서는 Tomcat7 버전 설치 및 Apache 2.4 와 연동에 관한 내용에 대해서 확인해보도록 하겠습니다.
Contents
JAVA(JDK) 설치
먼저 포스팅에서의 설치 디렉토리 현황입니다.
Apache 2.4 - /usr/local/apache2.4
Tomcat 7 - /usr/local/tomcat
사용 중인 사이트와 관련하여 저는 1.7 버전으로 진행하였으나 다른 버전을 사용하여도 됩니다.
(root 유저로 진행하였습니다)
~]# yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel.x86_64
root 유저의 프로파일에 JAVA_HOME 등록
~]# vi .bash_profile ## 아래 내용 입력 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre export PATH=$PATH:$JAVA_HOME/bin alias java='/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre/bin/java'
설치된 Java 버전 확인
~]# java -version java version "1.7.0_261" OpenJDK Runtime Environment (rhel-2.6.22.2.el7_8-x86_64 u261-b02) OpenJDK 64-Bit Server VM (build 24.261-b02, mixed mode)

Apache Tomcat are available for different versions of the specifications.
Tomcat 버전과 Java 버전의 호환성 정보는 위의 링크에서 정보를 확인하시면 됩니다.
Tomcat Connect(Mod_JK) 컴파일
Tomcat Connect(Mod_JK) 는 빌드되어 배포되는 바이너리 버전에 대해서 최신 버전은 없으므로 Source 를 통해서 Compile 해서 사용하도록 하겠습니다.
파일 다운 로드 및 압축 해제
~]# wget http://mirror.navercorp.com/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz ~]# tar zxvf tomcat-connectors-1.2.48-src.tar.gz ~]# cd tomcat-connectors-1.2.48-src/native
압축을 해제한 디렉토리 아래 native 폴더로 이동해서 ./buildconf.sh 를 실행합니다.
~]# cd tomcat-connectors-1.2.48-src/native ~]# ./buildconf.sh
설치를 계속 진행합니다.
~]# cd <Tomcat Connectors Source Path>/native/ ~]# ./configure --with-apxs=/usr/local/apache2.4/bin/apxs ~]# make && make install
build가 완료되었다면 apache의 module 디렉토리에 mod_jk.so 파일이 있는지 확인합니다.
Mod_JK 설정
conf , conf.d 디렉토리 등은 설치된 상항에 맞게 사용하시면 됩니다.
1. mod_jk.conf 파일 생성 및 내용 입력
mod_jk.conf 을 생성하면서 내용 추가를 합니다.
~]# vi /usr/local/apache2.4/conf.d/mod_jk.conf LoadModule jk_module modules/mod_jk.so <IfModule mod_jk.c> JkWorkersFile conf.d/workers.properties JkMountFile conf.d/jkmount.properties JkLogFile logs/mod_jk.log JkLogLevel info # The mod_jk log level, can be debug, info, warn error or trace. # The default value is info. JkShmFile run/mod_jk.shm JkLogLevel error JkLogStampFormat "[%y %m %d %H:%M:%S]" # <== 로그 포맷에 사용할 시간 형식을 지정 </IfModule>
2. workers.properties 파일 생성
workers.properties 파일을 생성하면서 내용 입력합니다.
~]# vi /usr/local/apache2.4/conf.d/workers.properties workers.tomcat_home=/usr/local/tomcat workers.java_home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre worker.list=worker1 worker.worker1.port=8009 worker.worker1.host=127.0.0.1 worker.worker1.type=ajp13 worker.worker1.lbfactor=1 worker.worker1.connect_timeout=10000 worker.worker1.retries=2 worker.worker1.retry_interval=1
3. jkmount.properties 파일 생성
jkmount.properties 파일을 생성하면서 내용을 입력합니다.
~]# vi /usr/local/apache2.4/conf.d/jkmount.properties JkMount /*.jsp worker1 JkMount /*.do worker1 JkMount /*.json worker1 JkMount /*.xml worker1 JkMount /servlet/* worker1 JkMount /manager/* worker1 JkMount /ROOT/* worker1 JkMount /host-manager/* worker1
[참고] workers.properties안의 worker1 은 식별자입니다.
다른 식별자, worker2, ajp-worker 등 아이피 와 포트를 달리하여 더 추가할 수 있습니다.
Tomcat 을 여러 대 사용하거나 웹 호스팅 과 같은 환경에서 유저별 단독 Tomcat을 사용하거나 하는 여러가지 목적으로 사용할 수 있습니다

[참고] Apache 와 Tomcat 과의 연동 방법은 위에서 기술한 mod_jk 외 다른 방법으로
- mod_proxy 를 사용하여 reverse proxy 로 사용하는 방법
- mod_proxy_ajp 를 통해 ajp Protocol 을 reverse proxy 로 사용하는 방법
2가지가 더 있으며 mod_proxy 와 mod_proxy_ajp 에 대한 내용은 아래 포스팅을 참조하시면 됩니다.

httpd.conf 수정
* conf , conf.d 디렉토리 등은 설치된 상항에 맞게 사용하시면 됩니다.
httpd.conf 에 아래 내용을 추가해 줍니다.
[root]# vi /usr/local/apache2.4/conf/httpd.conf
IncludeOptional conf.d/mod_jk.conf
=> Include conf.d/*.conf
와 같은 내용이 이미 있다면 위의 내용은 생략하여도 됩니다.
DocumentRoot "/usr/local/apache2.4/htdocs"
<Directory "/usr/local/apache2.4/htdocs">
=> DirectoryIndex 에 index.jsp 를 추가합니다
DirectoryIndex index.jsp index.php index.html index.htm
# Virtualhost 에 설정
* IP,경로, 도메인, 호스트 명 모두 예시입니다.
<VirtualHost 123.123.123.123:80>
ServerAdmin admin@site.co.kr
DocumentRoot "/websource/site"
ServerName site.co.kr
ServerAlias site.co.kr www.site.co.kr
ErrorLog "logs/site.co.kr-error_log"
CustomLog "logs/site.co.kr-access_log" geoip
<Directory "/websource/site">
AllowOverride ALL
Options FollowSymLinks MultiViews
DirectoryIndex index.jsp index.php index.html index.htm
<RequireAll>
Require all granted
</RequireAll>
</Directory>
# JkMount
IncludeOptional conf.d/jkmount.properties
</VirtualHost>
Tomcat7 설치
Tomcat 은 포스팅에서의 버전 외 8이나 9번을 사용하여도 구성이나 설정은 유사합니다.
포스팅에서는 Tomcat 은 컴파일 된 바이너리 버전을 사용하였습니다.
파일 다운로드 및 압축 해제
~]# cd /usr/local ~]# wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.105/bin/apache-tomcat-7.0.105.zip ~]# unzip apache-tomcat-7.0.105.zip ~]# ln -s apache-tomcat-7.0.105 tomcat
심볼릭 링크는 경로의 단일화를 위해 작업하는 내용으로 아래와 같이 mv 로 디렉토리를 옮겨도 됩니다.
~]# mv apache-tomcat-7.0.105 tomcat
sh 파일에 실행 권한 부여
~]# cd /usr/local/tomcat/bin ~]# chmod 755 *.sh
catalina.sh 파일 수정
~]# cd /usr/local/tomcat/bin ~]# vi catalina.sh # LOGGING_MANAGER (Optional) Override Tomcat's logging manager # Example (all one line) # LOGGING_MANAGER="-Djava.util.logging.manager= # org.apache.juli.ClassLoaderLogManager" # ----------------------------------------------------------------------------- **주석 아래 내용추가 <== 해당 내용은 기재 하지 않습니다 **-Xms32m -Xmx128m -XX:MaxPermSize=128M <== 메모리는 상황에 맞춰서 조정합니다 export JAVA_OPTS="$JAVA_OPTS -Xms32m -Xmx128m -XX:MaxPermSize=128M" export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre
server.xml 수정 - 1
~]# cd /usr/local/tomcat/conf ~]# vi server.xml # 주석 처리 <!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> ## 이부분 을 주석을 풀고 써도 되고 아님 추가적으로 기재하여도 되니 선택하셔서 진행하시면 됩니다. * Default 설정내역 <!-- Define an AJP 1.3 Connector on port 8009 --> <!-- <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" /> --> ## 포스팅에서는 아래와 같이 설정 하였습니다. <Connector address="127.0.0.1" port="8009" maxHttpHeaderSize="8192" tomcatAuthentication="false" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" secretRequired="false" enableLookups="false" acceptCount="100" redirectPort="8443" connectionTimeout="20000" disableUploadTimeout="true" protocol="AJP/1.3" /> ## address 절은 "(쌍따옴표) 가 필요하며 apache와 서버를 분리 하여 별도로 사용하려고 할때는 ## 외부에서 접속이 가능하도록 address 절에 ip 나 0.0.0.0 으로 입력 하면 됩니다.
server.xml 수정 - 2
이어서 server.xml 파일에서 Virtualhost 관련된 내용을 Host 에 등록하도록 하겠습니다.
# Host 원본 설정 내역 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <==== 이 사이에 내용을 넣습니다. </Engine> </Service> </Server> * 도멘인, 서브 도메인, 경로는 예시 입니다. <Host name="aaa.site.co.kr" debug="0" appBase="/websource/aaa" unpackWARs="true" autoDeploy="true"> <Context docBase="/websource/aaa" path="" debug="1" reloadable="true" /> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="tomcat_log." suffix=".txt" timestamp="true"/> </Host> <Host name="www.site.co.kr" debug="0" appBase="/websource/www" unpackWARs="true" autoDeploy="true"> <Context docBase="/websource/www" path="" debug="1" reloadable="true" /> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="tomcat_log." suffix=".txt" timestamp="true"/> </Host> <Host name="bbb.site.co.kr" debug="0" appBase="/websource/bbb" unpackWARs="true" autoDeploy="true"> <Context docBase="/websource/bbb" path="" debug="1" reloadable="true" /> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="tomcat_log." suffix=".txt" timestamp="true"/> </Host>
Tomcat Native 설치
Tomcat Native 다운로드 및 압축 해제
~]# yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel.x86_64 ~]# wget https://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.24/source/tomcat-native-1.2.24-src.tar.gz ~]# tar zxvf tomcat-native-1.2.24-src.tar.gz ~]# cd tomcat-native-1.2.24-src/native
apr 설치
Tomcat Native 를 빌드 하기 위해서 포스팅에서는 apr 을 별도로 빌드(컴파일) 하도록 하겠습니다
apr 을 패키지(yum) 으로 설치할 수 있습니다. yum 으로 설치 시 아래와 같이 진행하시면 됩니다.
~]# yum install apr apr-util \ apr-devel apr-util-devel \ apr-util-openssl
[참고] 사이트 주소 : https://apr.apache.org/download.cgi
apr 빌드(컴파일) 진행은 아래와 같이 진행을 합니다.
~]# mkdir -p pkg ~]# cd pkg ~]# wget http://apache.tt.co.kr//apr/apr-1.7.0.tar.gz ~]# tar zxvf apr-1.7.0.tar.gz ~]# cd apr-1.7.0 ~]# ./configure --prefix=/usr/local/apr-1.7.0
* 처음 configure 하면 아래와 같이 에러가 발생됩니다.
아래와 같이 파일 복사 후 다시 configure 를 합니다
config.status: executing libtool commands rm: cannot remove 'libtoolT': No such file or directory config.status: executing default commands
위의 설명과 같이 파일을 복사하고 다시 configure 및 컴파일을 진행을 합니다.
~]# cp -arp libtool libtoolT ~]# ./configure --prefix=/usr/local/apr-1.7.0 ~]# make ; make install
Configure 및 빌드
~]# ./configure --with-apr=/usr/local/apr-1.7.0 \ --prefix=/usr/local/tomcat/native \ --with-java-home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 ~]# make ; make install
yum 으로 apr 로 설치시 --with-apr 를 지정하지 않고 진행하시면 됩니다.
~]# ./configure --prefix=/usr/local/tomcat/native \ --with-java-home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 ~]# make ; make install
catalina.sh 수정
~]# cd /usr/local/tomcat/bin ~]# vi catalina.sh ## 아래 내용 추가 export CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/tomcat/native/lib"
Tomcat 서비스 생성 및 등록
파일생성 및 내용 입력
~]# vi /usr/lib/systemd/system/tomcat.service ## 아래 내용을 입력 합니다 [Unit] Description=tomcat After=network.target syslog.target [Service] Type=forking Environment="CATALINA_HOME=/usr/local/tomcat" User=root Group=root ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh [Install] WantedBy=multi-user.target
서비스 데몬 reload 및 활성화
~]# systemctl daemon-reload ~]# systemctl enable tomcat
임시적으로 htdocs 경로 변경
java가 정상적으로 구동 되는지 확인하기 위해서 apache의 htdocs 경로를 잠시 변경하여 테스트를 하였습니다.
~]# cd /usr/local/apache2.4 ~]# mv htdocs htdocs.ori ~]# ln -s /usr/local/tomcat/webapps/ROOT ./htdocs
톰켓을 기동하기 전에 apache를 재기동 혹은 reload 합니다.
~]# systemctl stop httpd ~]# systemctl start httpd
Tomcat 시작
~]# systemctl start tomcat
아파치와 톰켓 기동 후 확인하기 전에 구성이나 사용환경에 따라서 방화벽을 오픈 해줘야 합니다.
오라클 클라우드 환경이나 OS 방화벽 오픈이 필요한 환경일 경우 아래 포스팅을 참조하시면 됩니다
보안 룰셋 및 방화벽 포트 오픈이 완료되었다면 http://주소 로 접속하여 아래와 같은 페이지가 정상적으로 접속되는지 확인합니다.

Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io