CentOS 5.8 -> 6.x , 7.x
어댑터1 : NAT
어댑터2 : 호스트전용 어댑터
서버\리눅스\서버\tomcat
- 리눅스에 업로드
apache-tomcat-7.0.59.tar.gz
jdk-8u31-linux-i586.tar.gz
웹서버 : 정적 컨텐츠 제공
WAS(Web Application Server) : 동적 컨텐츠 제공 JSP
웹서버 + WAS + DBMS
+ PHP + DBMS
http://java.sun.com
# wget 192.168.20.87/apache-tomcat-7.0.59.tar.gz
# wget 192.168.20.87/jdk-8u31-linux-i586.tar.gz
- jsp 파일은 client가 접근시 모두 java 소스로 변경해서
- class 파일로 컴파일한다.
/home/tomcat/tomcat/work/Catalina/localhost/_/org/apache/jsp
$ ll
합계 57
-rw-rw-r-- 1 tomcat tomcat 4302 10월 14 12:10 hello_jsp.class
-rw-rw-r-- 1 tomcat tomcat 3578 10월 14 12:10 hello_jsp.java
-rw-rw-r-- 1 tomcat tomcat 16626 1월 29 2015 index_jsp.class
-rw-rw-r-- 1 tomcat tomcat 28905 1월 29 2015 index_jsp.java
==================================================================
LAB> CentOS 6.3 에 tomcat 설치하기
CentOS 6.3 + tomcat + Oracle
# /etc/init.d/oracle-xe stop
# su - tomcat
$ startup.sh
$ exit
# /etc/init.d/oracle-xe start
==================================================================
==================================================================
LAB> CentOS 5.8 에 tomcat 설치하기
CentOS 5.8 + tomcat + mysql
# su - tomcat
$ startup.sh
$ exit
# /etc/init.d/mysqld start
o Apache & Tomcat 연동이란 ?
- 일반적으로 Web Server(Apache)와 Servlet Container(Tomcat)간의
연동은 아래와 같다.
+---------+ +---------+
index.jsp | | | |
------> | Apache -----------> Tomcat |
| mod_jk |
| (AJP13) |
| 8009 |
| <----------- html로 |
| | | 변환 |
+---------+ +---------+
mod_jk : 아파치와 톰캣을 연동하기 위한 모듈 (다리)
AJP13 : 아파치와 톰캣을 서로 통신하기 위한 프로토콜 (version 1.3)
8009 : 아파치와 톰캣을 서로 통신 포트
o Web Server(Apache)와 Servlet Container(Tomcat) 통신 포트 확인
- 아파치를 통해서 Tomcat에 접속 (방화벽 설정 전)
http://192.168.56.101 O
- 아파치를 통해서 Tomcat에 접속 (방화벽 설정 후)
- 서로의 통신 포트인 8009를 차단했으므로 접근이 안된다.
# iptables -A INPUT -p tcp --dport 8009 -j DROP
http://192.168.56.101 X
- 아파치를 통하지 않고 Tomcat에 바로 접속 과정
http://192.168.56.101:8080 O
o 아파치와 톰캣의 처리 플로우
1. 서버에서 설정
- 아파치를 설치하고, 톰캣을 설치하고, 서로 연동한다.
아파치 웹서버의 httpd.conf에 톰캣 연동을 위한 설정을 추가하고
톰캣에서 처리할 요청을 지정함.
2. 사용자가 웹페이지 요청
- 사용자는 아파치 웹서버(보통 80포트)에 접속해 웹페이지를 요청한다.
3. 아파치 웹서버가 톰캣에게 전달
- 아파치 웹서버는 사용자의 요청이 톰캣에서 처리하도록 지정된
요청인지 확인하고
톰캣에서 처리해야 하는 경우에는 아래처럼
톰캣의 AJP포트(보통 8009포트)에 접속해서 요청을 전달
4. 아파치의 요청을 처리하고 결과를 돌려줌
- 톰캣은 아파치 웹서버로부터 요청을 받아 처리한 후, 처리 결과를
아파치 웹서버에게 다시 돌려준다.
5. 아파치가 사용자에게 페이지를 전송
- 아파치 웹서버는 톰캣으로부터 받은 웹페이지의 처리 결과를
사용자에게 전송한다.
o 아파치와 톰캣 연동시 css와 image가 깨지는 원인
- 서로간의 연동은 잘 되었지만 DocumentROOT(웹루트 디렉토리)가 서로
다르게 설정되어서 발생하는 문제이다.
- 일반적으로 mod_jk를 설정하면 확장자를 선택하여 어떤 확장자에
대해서 jk모듈을 이용하여 tomcat으로 보낼지를 결정하게 된다.
- 이때 둘 사이의 ROOT 디렉토리가 다르기 때문에 문제가 발생한 것이다.
- .jsp 파일인 index.jsp는 tomcat으로 넘기지만 index.jsp에 포함되는
css파일과 이미지들은 Apache에서 처리하게 되는 것이다.
이때 Apache가 ccs파일과 이미지들을 자신의 DocumentROOT 디렉토리인
/usr/local/apache/htdocs 에서 찾는데 당연히 파일이 없기 때문에
안되는 것이다.
o 해결방법
이를 해결하기 위해 Apache와 Tomcat의 DocumentRoot 디렉토리를
동일하게 설정하면 된다.
-- 작업 순서 --
1. 아파치 웹서버 설정파일 수정
2. 아파치 웹서버 재시작
3. tomcat 디렉토리 권한 변경
-- 작업 순서 --
1. 웹서버 설정파일 수정
- apache + jsp 연동한 후에 httpd.conf 파일을 아래와 같이 수정한다.
# vi /usr/local/apache/conf/httpd.conf
-- /usr/local/apache/conf/httpd.conf --
:
:
# DocumentRoot 지시자의 값을 tomcat 의 기본 디렉토리로 변경한다.
# DocumentRoot "/usr/local/apache/htdocs"
DocumentRoot "/home/tomcat/tomcat/webapps/ROOT"
:
:
<Directory "/usr/local/apache/htdocs">
:
:
</Directory>
# 아래 <Directory> ~ </Directory>를 추가한다.
<Directory "/home/tomcat/tomcat/webapps/ROOT">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
:
:
# 아래 index.jsp를 추가한다.
<IfModule mod_dir.c>
DirectoryIndex index.html index.jsp
</IfModule>
-- /usr/local/apache/conf/httpd.conf --
2. 아파치 웹서버 재시작
- 설정파일의 문법을 확인한 후 Syntax OK가 출력되면 아파치를 재시작한다.
# apachectl configtest
Syntax OK
# apachectl restart
3. tomcat 디렉토리 권한 변경
- nobody가 접근할 수 있도록 권한을 변경한다.
# chgrp nobody /home/tomcat
# chmod g+x /home/tomcat
4. 접속 확인
- 홈페이지 접속시 JSP 고양이가 뜨면 연동이 성공된 것이다.
http://IP주소/
http://IP주소/hello.jsp
o workers.properties 분석
worker.list는 사용할 woker(톰캣) 인스턴스들의 리스트다.
이름은 임의로 지정해주면 되며
worker.woker이름.속성=값 의 형태로 정의해 주면 된다.
아래 설정을 보면
포트는 8009를 사용하며
프로토콜은 ajp13 프로토콜을 사용하며,
host는 localhost 를 사용한다라는 의미이다.
-- workers.properties --
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
# 또 다른 예
#worker.list=ajp13
#worker.ajp13.port=8009
#worker.ajp13.host=localhost
#worker.ajp13.type=ajp13
-- workers.properties --
o Apache JServ Protocol (AJP)
- AJP는 웹서버 뒤에 있는 어플리케이션 서버로부터 웹서버로 들어오는
요청을 위임할 수 있는 바이너리 프로토콜이다.
원문 : http://en.wikipedia.org/wiki/Apache_JServ_Protocol
어플리케이션 서버로 핑을 할 수 있는 웹서버의 모니터링 기능을 지원한다.
웹 개발자들은 대체로 AJP를 여러 웹서버로 부터 여러개 어플리케이션
서버로의 로드 밸런스 구현에 이용한다.
세션들의 각각의 어플리케이션 서버 인스턴스의 이름을 갖는 라우팅
메카니즘을 사용하는 현재 어플리케이션 서버로 리다이렉트된다.
이 경우 어플리케이션 서버를 위한 리버스 프록시로 웹서버는 동작한다.
AJP는 mod_jk를 사용하는 Apache HTTP Server 1.x 와 Proxy AJP를
사용하는 Apache 2.x 와 mod_proxy와 proxy 밸런써 모듈에서 같이
실행된다.
아직 릴리즈 되지 않은 lighttpd 1.5 버전과 ngix, grizzly 2.1
그리고 iis에도 사용할 수 있다.
또 AJP는 Jetty 서블릿 컨테이너로 동작하는 Apache Tomcat servlet
컨테이너에도 사용할 수 있다.
==================================================================
'OS > [Linux] CentOS' 카테고리의 다른 글
[CentOS] 16. APM2 설치 (0) | 2016.07.30 |
---|---|
[CentOS] 15. APM 설치 (0) | 2016.07.23 |
[CentOS] 14-1 패키지 관리 - tomcat 환경설정 (0) | 2016.07.10 |
[CentOS] 14. 패키지 관리 (0) | 2016.07.10 |
[CentOS] 13-2. 사용자 생성 (0) | 2016.07.10 |