Apache와 Tomcat 연동
Tomcat도 단독으로 서비스를 할 수 있으나 보편적으로 Apache와 연동하여 사용하는 경우가 많습니다. 그 이유는 아래와 같습니다.
- 정적컨텐츠의 서비스 속도(이미지 동영상의 경우 Apache가 빠름)
- 여러 대의 Apache와 Tomcat서버의 클러스터링 구성
- Apache 웹서버의 다양한 모듈 확장
- 보안 강화
연동 방식은 mod_jk, mod_proxy, mod_prox_ajp 세가지 방식이 존재한다고 합니다만, 이중에서 mod_jk 방식을 살펴 보겠습니다.대체적으로 보통 mod_jk로 연동하는 경우가 많고, 나머지 2가지에 비해 URL 또는 컨텐츠별 설정이 쉽다고 합니다.
1. mod_jk설치
- mod_jk를 설치 하려면 gcc, gcc-c++, httpd-devel 세가지 패키지가 설치되어 있어야 합니다.
- 아래 명령어를 입력하여 3가지 패키지를 모두 설치합니다.
1 | $ yum install gcc gcc-c++ httpd-devel |
http://tomcat.apache.org/download-connectors.cgi 링크 위치 주소로 방문하여 최신 다운로드 파일 링크를 확인 합니다.

- 화면 중간에 보시면 tar.gz파일의 링크가 있습니다. 우클릭하여
링크 주소 복사를 통해 링크를 카피합니다. - 다운로드 받을 디렉토리 위치로 이동한 후 파일을 아래의 명령어로 다운로드 받습니다.
1 | $ wget -c {{링크카피주소}} |

- 다운로드 받은 파일의 확장자가 tar.gz입니다. 이는 압축파일이며, 압축파일을 해제하기 위해 아래의 명령어를 실행합니다.
1 | $ tar zxvf tomcat-connector* |
- 압축이 풀리며 디렉토리가 생성된 것을 확인할 수 있습니다.

- 생성된 디렉토리 안에 native디렉토리로 들어갑니다.

- Makefile을 생성하기 위해 아래 명령어를 실행합니다.
- 옵션 내용은 Apache확장기능 설치를 도와주는 유틸리티의 경로입니다.
- 기본 설치 경로는
/usr/bin입니다. - 혹, 경로에 찾을수 없다는 에러가 발생하신다면
/usr/sbin의 경로도 한번 살펴보시기 바랍니다.
1 | $ ./configure --with-apxs=/usr/bin/apxs |

- make명령어로 컴파일을 실행합니다.
1 | $ make |
- 컴파일 완료후 install 합니다.
1 | $ make install |
참고로 다음과 같은 명령어를 사용해서 컴파일과 install 을 동시에 실행할 수도 있습니다.
1 | $ make && make install |
- install 후
/etc/httpd/modules/경로의 파일 안에mod_jk.so파일이 생성되어있음을 확인할 수 있습니다.

- Selinux의 보안관련 설정을 변경해주어야 하는데요, 아래의 명령어를 실행합니다.
1 | $ chcon -u system_u -r object_r -t httpd_modules_t /etc/httpd/modules/mod_jk.so |
2. Apache 설정
- Apache의 설정은
/etc/httpd/conf/httpd.conf파일인데 vi 에디터로 오픈합니다. - vi에디터 창에서
/를 누르고 LoadModule 단어를 검색 키워드로 찾아(엔터후 n버튼을 누르면 다음찾기가 됩니다.) 그 아래쪽에 다음의 내용을 추가합니다.
httpd.conf 파일
1 | ... |
- Apache의 가상 호스트
/etc/httpd/conf/extra/httpd-vhosts.conf파일도 아래 코드를 추가 합니다. - httpd-vhosts.conf 파일은 httpd.conf 에 가상호스트 include 설정이 되어 있어야 합니다.
httpd-vhosts.conf 파일
1 | <VirtualHost *:80> |

- 화면에 보시면 conf.modules.d 경로가 include가 된 것을 볼 수 있습니다.
/etc/httpd/conf.modules.d경로에 진입하여vi mod_jk.conf를 실행하여 새로운 설정파일을 오픈 합니다.
1 | $ vi /etc/httpd/conf.modules.d/mod_jk.conf |
1 | <IfModule mod_jk.c> |

- vi 에디터에서
:wq로 저장하고 빠져 나옵니다. - 이제 mod_jk.conf 파일에서 설정한 워커 설정 파일을 만들 차례 입니다.
- 설정한 경로가 /etc/httpd/conf/workers_jk.properties 입니다.
- vi 로 해당경로 를 오픈하여 파일을 생성합니다.
1 | $ vi /etc/httpd/conf/workers_jk.properties |
1 | worker.list=worker1 |
- port를 8009로 설정함은 tomcat의 server.xml설정에 기인합니다. 확인은 아래에서 가능합니다.
1 | $ vi /usr/share/tomcat/conf/server.xml |
tomcat 은 기본 URIEncoding 이 ISO-8859-1 이므로 한글이 깨지므로 모든 커넥터 설정에 URIEncoding="UTF-8" 을 추가해야 합니다.
1 | <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/> |

/etc/httpd/conf/extra/httpd-vhosts.conf파일을 열어 Apache와 Tomcat Document 위치를 맞추어줍니다.- 이부분을 맞추어 주지 않으면 jsp 파일은 보이지만 이미지와 CSS가 로드 되지 않습니다.
- httpd-vhosts.conf 파일을 오픈하여 DocumentRoot 구문에 Tomcat의 문서 경로로 변경해줍니다.
- /usr/share/tomcat/webapps/ROOT 입니다.
1 | $ vi /etc/httpd/conf/extra/httpd-vhosts.conf |
1 | <VirtualHost *:80> |
/etc/httpd/conf/httpd.conf파일을 열어 기본 인덱스 설정에index.jsp를 추가 합니다.
1 | # |
- 마지막으로 아랫부분의 SELinux 설정을 해줍니다.
1 | $ chcon -R --type=httpd_sys_rw_content_t /usr/share/tomcat/webapps/ROOT |
만약 위 명령어 실행 시 에러가 발생하면 setenforce 0 명령어로 SELinux 임시 해제 후 SELinux 설정을 한 후 setenforce 1 명령어로 SELinux 실행 합니다.
1 | $ setenforce 0 // SELinux 끄기 |
- 아파치를 재시작 합니다.
1 | $ systemctl restart httpd |
- 톰캣을 재시작 합니다.
1 | $ systemctl restart tomcat |
- 이제 결과를 확인 하기 위하여 http:///index.jsp로 접속합니다.
- 8080포트 없이 진입했는데 Tomcat화면이 나오시면 성공입니다.

그러면 보시는 바와 같이 톰캣 페이지가 응답이 되지만, CSS, image 등이 제외된 상태로 HTML 문서만 응답이 됩니다.

그 이유는 아파치 환경 설정에서 tomcat connection 에서 설정한 JkMount 옵션 때문입니다.
.jsp 파일만 worker가 처리하도록 보냈기 때문에, 정적 파일들은 아파치에서 응답해야 합니다.
하지만 아파치에는 톰캣 페이지에서 제공해야 하는 정적 파일들이 없기 때문에 톰캣에서 받아온 HTML 문서만 응답할 수 밖에 없습니다.
이로 미루어 보아, worker를 통해 아파치가 톰캣으로부터 jsp파일만 가져온 것을 확인할 수 있습니다.
즉, 아파치와 톰캣이 연동된 것입니다.
간단한 애플리케이션이 있다면 worker를 수정해서 80포트로 접근했을 때 애플리케이션을 응답할 수 있도록 설정할 수 있습니다.
Tomcat Manager에서 웹 애플리케이션을 deploy 했을 때, 그 이름을 example 이라고 하겠습니다.
그러면 JkMount를 다음과 같이 수정해서 웹 애플리케이션이 아파치와 연동되서 실행될 수 있습니다
1 | $ vi /etc/httpd/conf/extra/httpd-vhosts.conf |
Tomcat connection 부분의 JkMount를 아래와 같이 수정합니다.
1 | <VirtualHost *:80> |
다시 아파치를 재시작 합니다.
1 | $ systemctl restart httpd |
브라우저에서 http:///example/~~ )에 접속해봅니다.
만약에 리소스 파일 계속 접근이 안된다면 /usr/share/tomcat/webapps/ROOT 디렉토리의 파일권한을 755로 변경 해줍니다.
Tomcat ROOT 디렉토리로 변경
/usr/share/tomcat/conf/server.xml 파일에서 아래 처럼 변경 후 톰캣 재시작을 합니다.
1 | # // 변경 전 |
WAR 파일 수동 압축 풀기
1 | $ jar xvf <war파일이름>.war 입력 |
:8080포트 차단하기
- vi 에디터로
/usr/share/tomcat/conf/server.xml파일을 오픈 합니다. - Connector port가
8080으로 되어 있는데 이부분을80으로 변경하면 됩니다.
1 | ... |