[Linux] Apache HTTP 서버와 Tomcat 서버의 연동
Apache HTTP 서버와 Tomcat 서버의 연동
Web Server인 Apache와 WAS 서버인 Tomcat 을 연동하는 방법에 대해 포스팅하겠습니다.
1. 아파치, 톰캣 연동의 이유
Tomcat은 WAS 서버이지만 Web 서버의 기능도 갖추고 있는 WAS 서버입니다.
그러나 톰캣의 Web 서버 기능은 아파치보다 느린 속도처리를 보였고, 이로 인해
정적인 페이지는 Apache가 처리하고, 동적인 페이지를 Tomcat이 처리함으로써 부하를 분산하는 이유에서 Apache와 Tomcat을 연동하였습니다.
그러나 이는 옛날 얘기이고.. 지금은 Tomcat이 많이 발전해 Tomcat 내의 Web 서버가 아파치에 절대 뒤쳐지지
않을만큼의 역할을 수행합니다.
그럼에도 불구하고 아직도 Apache와 Tomcat을 연동하여 사용하는 이유는, 아파치 내에서만 설정할 수 있는 부분이라던가
아파치에서 제공하는 유용한 모듈들을 톰캣에서 사용할 수 없기 때문입니다.
- AJP, mod_jk
- 아파치와 톰캣이 연동하기 위해선 AJP를 통해 서로 통신을 하여야 합니다.
- AJP란 아파치가 웹서버와 외부 서비스(톰캣 등)과 연동하기 위해 정한 규약(프로토콜) 입니다. 현재 1.3까지 나와있습니다.
- 아파치는 이를 사용하여 80포트로 들어오는 요청은 자신이 받고, 이 요청중 서블릿을 필요로 하는 요청은 톰캣에 접속하여 처리합니다.
-
우리는 아파치 톰캣 연동을 위해 mod_jk 라는 모듈을 사용할건데, 이는 AJP 프로토콜을 사용하여 톰캣과 연동하기 위해 만들어진 모듈입니다.
-
처리 플로우
- 아파치 웹서버의 httpd.conf 에 톰캣 연동을 위한 설정을 추가하고 톰캣에서 처리할 요청을 지정함.
-
사용자의 브라우저는 아파치 웹서버(보통 80포트)에 접속해 요청
-
아파치 웹서버는 사용자의 요청이 톰캣에서 처리하도록 지정된 요청인지 확인. 요청을 톰캣에서 처리해야 하는 경우
-
아파치 웹서버는 톰캣의 AJP포트(보통 8009포트)에 접속해 요청을 전달
-
톰캣은 아파치 웹서버로부터 요청을 받아 처리한 후, 처리 결과를 아파치 웹서버에 되돌려줌
-
아파치 웹서버는 톰캣으로부터 받은 처리 결과를 사용자에게 전송
-
톰캣 Server.xml 수정
server.xml
- 아파치 workers.properties 수정
workers.properties worker.list=worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009
- ajp13 프로토콜을 사용하며, host는 localhost이며, 포트는 8009(아까 확인하셨죠?)를 사용합니다.
- 아파치 http.conf 파일 수정
httpd.conf LoadModule jk_module modules/mod_jk.so // 모듈 위치 JkWorkersFile conf/workers.properties // workers.properties 파일 위치 JkLogFile logs/mod_jk.log // 로그파일 위치 JkLogLevel info // 로그 레벨 JkMount /* worker1 -> JkMount 뒤에 오는 /* 는 모든 url의 요청을 의미
- 연동 테스트
http://localhost 로 접속