Tomcat7 - Apache 2.4 연동

Share

Last Updated on 11월 3, 2020 by Jade(정현호)

안녕하세요 
이번 포스팅에서는 Tomcat7 버전 설치 및 Apache 2.4 와 연동에 관한 내용에 대해서 확인해보도록 하겠습니다.

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)

 


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 &quot;%r&quot; %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://주소 로 접속하여 아래와 같은 페이지가 정상적으로 접속되는지 확인합니다.




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