본문으로 바로가기

Java & Tomcat & Apache 연동

category 서버 & 시스템/Linux 2017. 10. 15. 03:01
반응형


[톰캣 Apache Tomcat]


우선 아파치는 흔히들 말하는 웹서버이다.

정확히 말하면 웹서비스 데몬이라고 하는데 아파치는 통상 http를 이용하여 클라이언트에게 웹서비스를 제공해 준다.

쉽게 말하면 인터넷 익스플로러에서 http://~~.html 이라는 문서를 보여 달라 그러면 아파치가 내부적으로 처리를 해서 그에 맞는 결과를 html 형식으로 보여주는 역할을 하게 된다.


그런데 아파치는 정적인 페이지, 말그대로 적혀 있는데로만 보여주는 역할만 수행하는데 적합하기 때문에 게시판과 같은 사용자가 뭔가를 입력하고 거기에 따라 다른 결과를 보여주는 동적인 페이지에 대해서는 톰캣과 같이 프로그램을 수행해주는 것과 연동을 해야한다.

아파치는 동적인 처리가 필요한 문서는 톰캣과 같은 컨테이너에 넘겨주고 처리한 결과만 다시 익스플로러로 보내준다.


톰캣은 자바 서블릿 컨테이너이다. 일종의 프로그램 집합체 이다.
톰캣의 역할은 아파치에서 넘어온 동적인 페이지를 읽어들여 프로그램을 실행하고 그 결과를 다시 html로 재구성하여 아파치에게 되돌려 준다. 

문서의 재구성이라고 할 수 있다.

톰캣은 서블릿 컨테이너 이며 자체 웹서버 기능도 포함하고있지만, 대부분의 사람들은 서블릿 컨테이너로써만 톰캣을 사용하고 있다. 



- 웹서버와 연동하여 실행할수 있는 JAVA환경을 제공

- 웹서버로 사용되기보단 웹어플리케이션(WAS)로 사용

- 클라이언트의 요청이 들어왔을때 내부의 프로그램을 통해 결과를 만들고 다시 클라이언트에게 전달을 해주는 역할을 하는 것



왜 아파치와 함께 같이 쓰는가?


- html같은 정적인 페이지를 로딩하는데 웹 서버보다 수행속도가 느리기 때문에 아파치와 연동하여 이를 해결

(아파치 - www서버용 소프트웨어, 웹 서버의 한 종류)

- 이미지나 단순한 html파일과 같은 리소스를 제공하는 서버는 웹서버를 통하면 WAS를 이용하는 것보다 빠르고 안정적

- 톰캣은 동적인 데이터를 처리하는 서버, db와 연결되어 데이터를 주고받거나 프로그램으로 데이터 조작이 필요한 경우에는 was를 활용

- 사용자요청은 http웹 서버를 통해 받고, 내부의 프로그램은 was를 통해 처리하는식으로하면 정적인 데이터와 동적인 데이터를 효과적으로 처리가 가능


클라이언트의 요청 순서

클라이언트 > 브라우저 > 웹서버 > WAS > DB











설치환경

CentOS release 6.8 (Final)

Server version: Apache/2.4.3 (Unix)

java version "1.7.0_45"

Apache Tomcat/7.0.42




1. JAVA 설치 및 설정

# cd /usr/local/src

# jdk1.7.0_45-x86_64.tar.gz \\ 설치파일 다운로드

# tar -zxvf jdk1.7.0_45-x86_64.tar.gz \\ 압축 풀기

# mv jdk1.7.0_45 /usr/local/java \\ java로 이름 변경


# vi /etc/profile \\ 해당 파일 열어 상단에 아래 내용 입력

JAVA_HOME=/usr/local/java

CLASSPATH=.:$JAVA_HOME/lib/tools.jar

PATH=$PATH:$JAVA_HOME/bin

export JAVA_HOME CLASSPATH PATH


# source /etc/profile \\ 해당 명령어를 통해 수정된 파일을 적용


# java -version \\ 해당 명령어로 자바버전 확인 , 아래처럼 나오면 자바가 잘못 연동이 제대로 안된 것

java version "1.5.0"

gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-18)


Copyright (C) 2007 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 



* 오류발생

** 오류 **

# java -version

java version "1.5.0" \\ 버전이 1.7.0이 아닌 1.5.0이 나옴

gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-18)


** 해결방법 **

# which java \\ 현재 자바버전 확인

# ls -l /usr/bin/java \\ 자바 링크경로 확인

# unlink /usr/bin/java \\ 새로운 버전 링크지정하기 위해 기존 링크 해제

# ln -s /usr/local/java/bin/java /usr/bin/java  \\ 링크 다시 걸어주기

# java -version \\ 해당 명령어로 최종확인

java version "1.7.0_45"

Java(TM) SE Runtime Environment (build 1.7.0_45-b18)

Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)



2. Tomcat 설치 및 설정

# cd /usr/local/src

# apache-tomcat-7.0.42.tar.gz \\ 다운로드

# tar -zxvf apache-tomcat-7.0.42.tar.gz 

# mv apache-tomcat-7.0.42 /usr/local/tomcat \\ 해당 경로에 옮기기


# vi /etc/profile \\ java가 설치되어 있어야 하며, 파란색 부분 추가

JAVA_HOME=/usr/local/java

CATALINA_HOME=/usr/local/tomcat

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib-jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar

PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

export JAVA_HOME CLASSPATH PATH CATALINA_HOME


# source /etc/profile \\ 해당 명령어로 profile 수정내용 갱신


# /usr/local/tomcat/bin/startup.sh \\ 해당명령어로 해당파일 실행 , 아래처럼 메시지 나올시 정상

Using CATALINA_BASE: /usr/local/tomcat

Using CATALINA_HOME: /usr/local/tomcat

Using CATALINA_TMPDIR: /usr/local/tomcat/temp

Using JRE_HOME: /usr/local/java

Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar 


# cp -arp /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat \\ tomcat 실행파일 init.d에 등록


# vi /etc/init.d/tomcat \\ 해당 파일 열어서 아래 내용을 추가해줘야 chkconfig 등록할때 에러발생 안함

# chkconfig: 345 90 90

# descripttion: init file for tomcat

# processname: tomcat


# chkconfig –-add tomcat \\ 해당 명령어로 리부팅시 자동으로 올라오도록 설정



3. 방화벽 설정

# vi /etc/sysconfig/iptables \\ 8005, 8009, 8080 포트 등록

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 8005 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 8009 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT


# /etc/init.d/iptables restart



4. Java & Tomcat & Apache 연동

1)  apache connector 설치 및 연동

# cd /usr/local/src

# wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz

# tar -zxvf tomcat-connectors-1.2.42-src.tar.gz 

# cd tomcat-connectors-1.2.42-src/native \\ 해당 디렉터리로 진입

# ./configure --with-apxs=/usr/local/apache/bin/apxs \\ 컴파일, 아파치경로 설

# make && make install


# cd /usr/local/apache/conf/


# vi workers.properties \\ 해당 파일생성

workers.tomcat_home=/usr/local/tomcat \\ tomcat 경로

workers.java_home=/usr/local/java \\ java 경로

# BEGIN workers.properties

worker.list=ajp13 \\ list이름으로 맵핑

worker.ajp13.port=8009 \\ 서비스할 포트 지정, 기본포트는 8080, 아파치 포트로 들어가는 jsp요청은 ajp13프로토콜을 이용해 8009포트로 톰캣에 보내짐

worker.ajp13.host=localhost \\ 톰캣이 동작하고 있는 호스트 지정

worker.ajp13.type=ajp13 \\ 커넥터 연결방식 지정 (아파치, 톰캣 통신 프로토콜)

worker.ajp13.lbfactor=1

# END workers.properties




2) httpd.conf 파일 수정

아파치는 기본적으로 html을 읽고 tomcat은 그 외 파일(jsp 등)을 읽음, 부하를 줄이기 위해 분산을 시켜놓는데 아파치와 톰캣이 각각 다른 포트를 쓰게하고 

아파치 포트로 들어온 jsp파일 요청 내용을 톰캣 포트로 링크 걸어주는 것는 것이다. 이를 연결해주는 것이 mod_jk


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


AddType application/x-httpd-php .php4 .php .phtml .ph .inc .html .htm .jsp \\ jsp가 있는지 확인


<IfModule dir_module> \\ index.jsp 있는 지 확인

    DirectoryIndex index.html index.php index.jsp

</IfModule>


LoadModule jk_module modules/mod_jk.so \\ mod_jk.so 모듈을 추가


<IfModule jk_module>

JkWorkersFile conf/workers.properties \\ JK설정 파일 위치 및 이름

JkShmFile logs/mod_jk.shm

JkLogFile logs/mod_jk.log \\ JK에 대한 로그 파일 위치, 절대경로로 남겨도 상관없음 (/usr/local/java/logs/~)

JkLogLevel info \\ 로그 레벨 지정

JkLogStampFormat "[%a %b %d %H :%M :%S %Y]" \\ 로그를 어떠한 형태로 남길지 지정

JkMount /*.jsp ajp13 \\ 해당 확장자를 처리할 worker지정, 웹에서 *.jsp 요청이 들어올 경우 톰캣으로 넘기라는 설정, 이때 workers.properties에 정의한 이름이 기입된다

</ifModule> 




3) 가상호스트 설정

가상호스트설정없이 기본 도큐먼트로 설정이 되어있는경우 해당 IP로 질의하였을때 아파치와 톰캣이 연동되어있기 때문에 톰캣화면이 보여지게 된다.

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

 <VirtualHost *:80>

DocumentRoot "/home/java/" \\ 원하는위치로 설정, 정적 데이터 처리를 위한 서비스 경로

ServerName [아이피 or 도메인]

ErrorLog "logs/[아이피 or 도메인]_error_log"

CustomLog "logs/[아이피 or 도메인]_access_log" common

JkMount /*.jsp ajp13

</VirtualHost>



vhost 설정은 일반설정과 동일하지만 하단에 JkMount 를 이용하여 인식시켜줘야 한다.

그래야 아파치로 jsp코드를 질의하였을 때 정상적으로 jsp같은코드들을 인식할수 있다.

위처럼 php와 jsp 모두를 사용하고 싶다면 아파치에서 php를 호출하고 톰캣에서 jsp를 호출 하도록 구성하여 상호 보완적 동작을 수행하도록 구성해야 한다.



4) 톰캣 Context path 설정

# vi /home/java/index.jsp \\ index.jsp 파일 생성

 <% out.println("Hello Linux"); %>



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

       </Host>

        <Host name="[아이피 or 도메인]"  appBase="/home/java/"

            unpackWARs="true" autoDeploy="true">

      </Host>



# cd /usr/local/tomcat/conf/Catalina/ \\ server.xml에서 설정한 hostname으로 만들어져있음

합계 8

drwxr-xr-x 2 root root 4096 2017-10-15 00:26 [아이피 or 도메인]

drwxr-xr-x 2 root root 4096 2017-10-14 22:51 localhost


# cd 115.68.221.178 

# vi ROOT.xml \\ ROOT.xml 생성

 <?xml version='1.0' encoding='utf-8'?>

<Context

    docBase="/home/java/" \\ index.jsp 파일이 있는 위치

    debug="0"

    privileged="true"

    reloadable="true">

</Context>



# /etc/init.d/apachectl restart

# /etc/init.d/tomcat stop

# /etc/init.d/tomcat start 



5) 접속확인




* 참고 (톰캣 로드밸런싱 설정)

http://fruitdev.tistory.com/25


반응형

'서버 & 시스템 > Linux' 카테고리의 다른 글

vsftpd 설치 및 설정  (1) 2017.11.27
MySQL binlog 설정 및 삭제, 복구  (0) 2017.10.28
iptables 설정  (0) 2017.10.11
WordPress 설치  (0) 2017.10.10
phpMyAdmin 설치 및 설정  (0) 2017.10.10