태그 보관물: iptables

Tomcat 설치 및 apache+tomcat 연동 방법.(Centos7)

설치환경
OS : CentOS 7.1 64bit
CPU: Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz (1core)
Ram : 1G
java : jdk1.8.0_77
tomcat : 7.0.68

개요

아파치 톰캣(Apache Tomcat)은 아파치 소프트웨어 재단에서 개발된 서블릿 컨테이너(또는 웹 컨테이너)만 있는 웹 애플리케이션 서버이다.

톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공하고 있다. 톰캣은 관리툴을 통해 설정을 변경할 수 있지만, XML 파일을 편집하여 설정할 수도 있다. 그리고, 톰캣은 HTTP 서버도 자체 내장하기도 한다.

아파치 톰캣은 Apache Licence, Version 2를 채용한 오픈소스 소프트웨어로서, 서블릿이나 JSP를 실행하기 위한 서블릿 컨테이너를 제공하며, 상용 웹 애플리케이션 서버에서도 서블릿 컨테이너로 사용하는 경우가 많다. 버전 5.5 이후는 기본적으로 Java SE 5.0 이후를 대응한다.

참고로 Tomcat은 사전적 의미로 ‘수고양이’를 뜻한다.

웹서버와의 연동

아파치 톰캣에 내장된 웹 서버로만 웹 시스템을 구성할 수 있지만, 대규모의 사용자가 사용하는 시스템을 구축하려면 웹 서버와 연동하는 안정적인 시스템을 구축해야 한다. 이때, 웹 서버인 아파치 웹 서버와는 연동모듈을 사용하여 연동하고, 연동모듈로는 버전 1.3, 2.0은 mod_jk를 이용하고, 버전 2.2 이후는 mod_proxy_ajp 모듈을 사용한다

톰캣의 단점

톰캣은 웹 서버로 사용되기보다는 웹 애플리케이션 서버(WAS)로 사용된다. 톰캣은 html 같은 정적 페이지를 로딩하는데 웹 서버보다 수행 속도가 느리다. 이를 해결하기 위해서 아파치와 연동한다. 아파치는 html 같은 정적인 페이지를 로드하는 데에 사용되는 웹 서버이다. 원리는 아파치가 실행되면 아파치는 html 파일은 자신이 수행하고 jsp 파일은 톰캣으로 넘겨서 톰캣이 수행하게 만든다. 톰캣 특성상 java 언어만 해석이 가능하기 때문에 톰캣에 자체 내장되어 있는 http 서버를 사용하더라도 php 언어로 작성된 서버 페이지는 실행이 불가능하다. 따라서 php와 jsp 모두를 사용하고 싶다면 아파치에서 php를 호출하고 톰캣에서 jsp를 호출 하도록 구성하여 상호 보완적 동작을 수행하도록 구성할 수도 있다.

Tomcat 다운로드 및 설치

본 포스팅에서는 java jdk 설치에 관련된 정보는 제공하지 않는다. 미리 jdk 가 설치되어있는 환경이어야 한다. jdk 부터 설치해보자.

공식홈페이지인 아래쪽에서 다운로드가 가능하며 따로 링크를 걸어뒀다.

http://tomcat.apache.org/

wget http://mirror.apache-kr.org/tomcat/tomcat-7/v7.0.68/bin/apache-tomcat-7.0.68.tar.gz

디렉토리 설정 및 링크작업

tar xvfz apache-tomcat-7.0.68.tar.gz
mv apache-tomcat-7.0.68 /usr/local/
ln -s /usr/local/apache-tomcat-7.0.68/ /usr/local/tomcat

실행파일 및 설정파일작업

cd /usr/local/tomcat/bin

vi catalina.sh

####추가#####
export CATALINA_OPTS="-Djava.awt.headless=true"
#########

정상적으로 tomcat 서비스가 올라왔는지 명령어실행을 한다

netstat -nlp | grep java

tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      2927/java      
tcp6       0      0 :::8009                 :::*                    LISTEN      2927/java      
tcp6       0      0 :::8080                 :::*                    LISTEN      2927/java  

이제 방화벽에 포트를 추가하도록 하자

vi /etc/sysconfig/iptables

####추가####
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8090 -j ACCEPT
###########

systemctl restart iptables.service

iptables -nL | grep 8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:8080

iptables -nL | grep 8090
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:8090

웹주소에서 확인해본다

http://192.168.0.5:8080

이렇게 해서 tomcat 설치까지 완료하였다.

apache+tomcat 연동

이번에는 tomcat 단독으로 서비스 하는것이 아니라, apache 와 연동해서 서비스를 올려보도록 하겠다.

mod_jk.so 설치

아파치와 톰캣 연동 작업.

wget http://mirror.apache-kr.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
tar xvf tomcat-connectors-1.2.37-src.tar.gz
cd tomcat-connectors-1.2.37-src
cd native/
chmod +x buildconf.sh
./configure --with-apxs=/usr/local/apache/bin/apxs && make && make install

apache 모듈 적용확인 및 설정

ls -al /usr/local/apache/modules/mod_jk.so
vi /usr/local/apache/conf/httpd.conf

#####추가#####
LoadModule jk_module modules/mod_jk.so

<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %R %V %T %U %q"
</IfModule>

<IfModule dir_module>
    DirectoryIndex index.html index.htm index.php index.php3 index.cgi index.jsp
</IfModule>
##############################

vi /usr/local/apache/conf/workers.properties

#####추가#####
workers.tomcat_home=$CATALINA_HOME
workers.java_home=$JAVA_HOME
ps=/
worker.list=tomcat1, tomcat2
worker.tomcat1.port=8009
worker.tomcat1.host=192.168.0.5
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1

####tomcat2 설정이되어있을경우####
worker.tomcat2.port=8099
worker.tomcat2.host=127.0.0.1
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
###############################

vi /usr/local/apache/conf/httpd.conf

##주석해제##
Include conf/extra/httpd-vhosts.conf
##########

vi /usr/local/apache/conf//extra/httpd-vhosts.conf

###추가###
<VirtualHost *:80>
     ServerAdmin dslee
     DocumentRoot "/usr/local/apache/htdocs/"
     ServerName 192.168.0.5
     JkMount /*.jsp tomcat1
     JkMount /servlet/* tomcat1
</VirtualHost>

tomcat 설정 변경

cd /usr/local/tomcat/conf/
vi server.xml

####기존 설정은 삭제하고 변경#####
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector port="8009" 
       maxThreads="2048" minSpareThreads="20" maxSpareThreads="100"
       connectionTimeout="20000"
       enableLookups="false"
       acceptorThreadCount="4"
       keepAliveTimeout="3"
       maxKeepAliveRequests="10000"
       protocol="AJP/1.3" redirectPort="8443" />
#####################

tomcat의 기본 Web 디렉토리는 /usr/local/tomcat/webapps/ROOT/ 이곳이다.

jsp 테스트

vi /usr/local/tomcat/webapps/ROOT/index.jsp

###추가###
<%-- test.jsp --%>
<%@ page language="java" %>
<%!
int a=100;
int b=50;
%>
<%
int c;
c=a+b;
%>
<html>
<head><title>JSP Test</title></head>
<body>
[JSP TEST OK]<br>
a=<%=a%><br>
b=<%=b%><br>
a+b=<%=c%>
</body>
</html>
########

웹사이트 주소에 접속을 시도해 본다.

http://192.168.0.5

정상적으로 apache+tomcat 연동이 되었다.