Centos7 aphache + tomcat 설치 및 연동

2tsumo·2022년 5월 30일
2

linux

목록 보기
2/4

oracle VM virtualBox에 centOS 7 올려서 테스트했습니다

설치 환경
OS : CentOS Linux release 7.9.2009
httpd : Apache/2.4.6
tomcat : 9.0.63

왜 아파치와 톰캣을 연동할까?

apache(Web Server, 정적 데이터 처리)
tomcat(Web Application Server, 동적 데이터 처리)

WAS 에도 웹서버기능이 있는데 왜??  Web Server와 WAS를 같이 사용할까?

웹서버 없이 WAS만 사용한다고 가정해보자.
웹페이지에는 정적 data뿐만 아니라 동적 data도 함께 존재한다.
톰캣은 WAS서버이지만 WEB서버의 기능도 갖추고 있다.
하지만 톰캣의 웹서버기능은 아파치 웹서버보다 느린 처리속도를 보였고, 웹의 모든 정적/동적 데이터를 모두 WAS가 처리한다면 결과적으로 사용자의 요청의 응답이 느려지게 될 것이다. 
때문에 정적 데이터는 웹서버인 아파치가 처리하고 동적 데이터는 와스인 톰캣이 처리함으로써 서버의 전체적인 부하를 분산하고 속도를 빠르게 하기 위해 연동을 해서 사용하는 것이다.  
지금은 톰캣이 많이 발전해서 톰캣의 웹서버가 아파치에 뒤쳐지지 않을만큼의 기능을 하지만 그럼에도 불구하고 연동하는 이유는 아파치내에서만 설정할 수 있는 부분이라던가, 아파치에서 제공하는 유용한 모듈을 톰캣에서는 사용할수 없는 부분 등의 이유가 있다. 

즉, 각각 사용목적에 따라 용도가 다르다. 
HTML파일이나 이미지와 같은 정적 콘텐츠들은 WAS까지 거칠필요 없이 웹서버만 통해서 바로 처리/응답 하는 것이 빠르다.
웹서버와 와스를 연동하여 각각의 역할 분담을 시켜, 요청에 대한 응답을 빠르고 효율적으로 처리하게 되는 것이다. 

Apache, Tomcat 연동하기

아파치와 톰캣을 연동하는 방법은 mod_jk, mod_proxy, mod_proxy_ajp를 이용한 방법이 있다.
이번에는 연동 방법 중 가장 많이 사용 되는 mod_jk로 Apache와 Tomcat을 연동 해보도록 하겠다.

mod_jk 란?

Apache와 Tomcat을 연동하기 위한 모듈이다. AJP 프로토콜을 이용하여 아파치로 들어온 요청을 톰캣에 전달하여 처리한다. 아파치로 들어온 요청을 톰캣으로 전달 할때 AJP 포트 (기본 8009)를 사용하며 필요에 의한 포트 변경도 가능하다.

1.Apache 설치

# yum install -y httpd

2. mod_jk 설치

연동할 때 필요한 패키지 설치
mod_jk 컴파일 설치를 위해 몇가지 추가 패키지를 설치 해준다.

# yum install -y autoconf libtool httpd-devel

mod_jk 설치를 위해 mod_jk를 다운 받는다. 톰캣 사이트(http://tomcat.apache.org/download-connectors.cgi)에 접속하여 리눅스용 파일을 다운로드 한다.

# wget https://downloads.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz


다운받은 파일을 압축 해제 한다.

# tar -xvzf tomcat-connectors-1.2.48-src.tar.gz
# ls
tomcat-connectors-1.2.48-src tomcat-connectors-1.2.48-src.tar.gz

mod_jk 컴파일 설치

압축 해제 후 tomcat-connectors-1.2.48-src


# cd tomcat-connectors-1.2.48-src/native
# ./buildconf.sh
# ./configure --with-apxs=/bin/apxs
# make 
# make install

설치 확인

/usr/lib64/httpd/modules/mod_jk.so 파일이 생성 되었으면 정상적으로 설치 완료 된 것이다.

3. Tomcat 다운로드

Apache와 mod_jk를 설치 했으면 Tomcat을 설치 해주도록 하자.

톰캣 사이트(https://tomcat.apache.org/download-90.cgi)에 접속하여 다운로드 링크 주소를 복사 해준다 wget으로 Tomcat을 다운로드 받는다. 링크 주소 복사 하여 쉘 창에 붙여 넣기 하여 Tomcat을 다운받아 준다.

# wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.63/bin/apache-tomcat-9.0.63.tar.gz

다운받은 톰캣을 압축 해제 한다

# tar xvzf apache-tomcat-9.0.63.tar.gz

압축 해제 하고 Tomcat 이름을 변경 해준다. tomcat-test 라고 임의로 변경 해주고 /home디렉토리 밑으로 이동 시킨다.

# mv apache-tomcat-9.0.63 tomcat-test
# mv tomcat-test /home/

Tomcat 실행하기

Tomcat 실행은 bin 디렉토리 하위에 startup.sh 로 실행하며, 중지 시 shutdown.sh로 중지 해준다.

JAVA 설치하기

openjdk를 설치 해준다.
설치 방법은 yum 설치 또는 컴파일 설치 두가지 방식이 있는데 간단하게 yum 으로 설치 해준다. 아래 명령으로 설치 가능한 openjdk 버전을 확인 해보았다.

# yum search openjdk

11버전으로 설치 하였다.

# yum install -y java-11-openjdk.x86_64

JAVA 설치확인

설치가 완료 되었으면 정상적으로 설치 되었는지 확인 해보자
java -version 을 입력하여 아래와 같이 버전이 나올 경우 정상 설치 된 것이다

# java -version

다시 Tomcat 실행하기
톰캣 로그(logs/catilina.out)을 확인 해보면 설치 Java_home이 정상 인식 된다

Tomcat 기본 포트로 접속 해보기

4. Apache, Tomcat 연동하기

첫번째로 Tomcat 설정 파일 server.xml 파일 안에 주석 처리 되어 있는 AJP 포트 설정을 주석 해제 해준다

주석 처리 하고 톰캣을 재기동 해주면 8009 포트를 netstat 상에서 확인 가능 하다. netstat -nlp 로 확인 해보면

8080, 8005, 8009 포트가 실행 되어있다. 포트를 변경 하지 않으면 기본 3개 포트가 실행 된다.

/etc/httpd/conf.d/mod_jk.conf 아래 내용으로 파일을 생성해준다

# vi /etc/httpd/conf.d/mod_jk.conf
LoadModule jk_module modules/mod_jk.so

<ifModule jk_module>
        JkWorkersFile conf.d/workers.properties

        JkShmFile logs/mod_jk.shm
        JkLogFile logs/mod_jk.log

        JkLogLevel error
        JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</ifModule>

Apache와 연동할 Tomcat 들을 설정 해주는 파일이다
/etc/httpd/conf.d/workers_jk.properties 아래 내용으로 파일을 생성해준다

# vi /etc/httpd/conf.d/workers_jk.properties
# worker list
worker.list=node1

# [node1]  /home/tomcat-test
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8009

# worker 설정
worker.template.type=ajp13
worker.template.socket_connect_timeout=5000
worker.template.socket_keepalive=true
worker.template.ping_mode=A
worker.template.ping_timeout=10000
worker.template.connection_pool_minsize=0
worker.template.connection_pool_timeout=600
worker.template.reply_timeout=300000
worker.template.recovery_options=3

vhost 설정 하기

임의의 vhost를 설정 해준다. 파일이 없으니 새로 생성 해준다

# vi /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
        ServerName   aaa.test.com
        DocumentRoot /home/test/testdoc

        JkMount /* node1

        CustomLog       "|/usr/sbin/rotatelogs /home/test/log/aaa.test.com.log 3600 " combined
        ErrorLog        "|/usr/sbin/rotatelogs /home/test/log/aaa.test.com.error.log "
</VirtualHost>

DocumentRoot 디렉토리와 로그디렉토리는 수동으로 생성 해줘야 한다


# mkdir -p /home/test/testdoc /home/test/log

설정이 다 되었으면 웹페이지로 접속 해보자. 접속 해보니 Service Unavailable 오류가 발생 한다

mod_jk error에 "(node1) connecting to backend failed" 로그가 발생하였고 Apache 와 Tomcat 연결 부분 설정에 문제가 있다는 것을 알았다.

확인 해보니 추가 옵션이 필요 하였고 톰캣 설정파일 conf/server.xml에 AJP 관련 설정에 secretRequired="false" 옵션을 추가해주고 재기동 해보았다.

# vi /home/tomcat-test/conf/server.xml
<Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" secretRequired="false" />

접속 해보기

도메인뒤 8080 포트 없이 80으로 접속 하여 아래 톰캣 화면이 나오면 연동은 정상적으로 완료 된 것이다.

profile
👨‍💻

2개의 댓글

comment-user-thumbnail
2023년 11월 11일

도움 많이 받고 갑니다. 감사합니다.

답글 달기
comment-user-thumbnail
2024년 1월 18일
  1. workers_jk.properties의 경우 workers.properties 라고 정정이 필요합니다.

  2. mod_jk.conf 의 경우 JkShmFile logs/mod_jk.shm 에서 권한이슈가 발생할 수 있습니다.
    이때는 run/mod_jk.shm 으로 고치면 됩니다.

  3. Service Unavailable 가 발생하였는데, server.xml에서 Connector port="8009" 설정에 address="0.0.0.0" 설정을 추가했습니다.

  4. 정상으로 동작되네요.^^

답글 달기