Tomcat7 - Apache 2.4 연동

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

업데이트 : 2020/10/31


설치 디렉토리 환경
Apache 2.4 -   /usr/local/apache2.4
Tomcat 7  -  /usr/local/tomcat


Java(JDK) 설치

# yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel.x86_64
* 개발된 웹사이트 와 관련하여 저는 1.7로 진행 하겠습니다.


# 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 -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 Connect 컴파일
Tomcat Connect 는 바이너리 된 버전은 최신 버전은 없어서 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 파일 생성 및 내용 입력


[root]# vi /usr/local/apache2.4/conf.d/mod_jk.conf
     -> 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 파일 생성
[root]# vi /usr/local/apache2.4/conf.d/workers.properties
   --> 파일이 없다면 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 파일 생성

[root]# vi /usr/local/apache2.4/conf.d/jkmount.properties
   --> 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은 컴파일된 바이너리 버전을 사용할 것 입니다.

[root]# cd /usr/local
[root]# wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.105/bin/apache-tomcat-7.0.105.zip

[root]# unzip apache-tomcat-7.0.105.zip
[root]# ln -s  apache-tomcat-7.0.105  tomcat

=> 심볼릭 링크는 경로의 단일화를 위해 작업 하는 내용으로 mv 로 디렉토리를 옴겨도 됩니다.

[root]# mv  apache-tomcat-7.0.105  tomcat




# sh 파일에 실행 권한 부여
[root]# cd /usr/local/tomcat/bin
[root]# chmod 755 *.sh




# catalina.sh 파일 수정 
[root]# cd /usr/local/tomcat/bin

[root]# 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 수정
[root]# cd /usr/local/tomcat/bin

[root]# vi catalina.sh


# 주석 처리
<!--
<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 으로 입력 하면 됩니다.



그리고 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 설치

[root]# yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel.x86_64

[root]# wget https://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.24/source/tomcat-native-1.2.24-src.tar.gz


[root]# tar zxvf tomcat-native-1.2.24-src.tar.gz
[root]# cd  tomcat-native-1.2.24-src/native 

[root]# ./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/jre
make ; make install



# catalina.sh 수정
[root]# cd /usr/local/tomcat/bin

[root]#  vi catalina.sh 
  => 내용추가

export CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/tomcat/native/lib"






Tomcat 서비스 생성 및 등록

1. 파일생성
[root]# vi /usr/lib/systemd/system/tomcat.service


2. 아래 내용을 입력 한 후 저장합니다
[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



[root]# systemctl daemon-reload
[root]# systemctl enable tomcat




## 임시적으로 htdocs 경로 변경
java가 정상적으로 구동 되는지 확인 하기 위해서 apache의 htdocs 경로를 잠시 변경할 것입니다.

[root]# cd /usr/local/apache2.4
[root]# mv htdocs htdocs.ori
[root]# ln -s /usr/local/tomcat/webapps/ROOT ./htdocs



## 톰켓을 기동 하기 전에 apache를 재기동 혹은 reload 합니다.
[root]# systemctl stop httpd
[root]# systemctl start httpd



* Tomcat 기동
[root]# systemctl start tomcat 




아파치와 톰켓 기동 후 확인 하기 전에 방화벽을 오픈 해줘야 합니다.
관련해서는 아래 링크글을 보고 포트를 오픈 하고 설정 테스트를 해보시면 됩니다




보안 룰셋 및 방화벽 포트 오픈을 하였다면 
http://주소 해서 아래와 같은 페이지가 정상적으로 loading 되는지 확인 합니다.

사용자 삽입 이미지

답글 남기기