Apache의 설정은 /etc/httpd/conf/httpd.conf 파일인데 vi 에디터로 오픈합니다.
vi에디터 창에서 / 를 누르고 LoadModule 단어를 검색 키워드로 찾아(엔터후 n버튼을 누르면 다음찾기가 됩니다.) 그 아래쪽에 다음의 내용을 추가합니다.
httpd.conf 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
...
# # Dynamic Shared Object (DSO) Support # # To be able to use the functionality of a module which was built as a DSO you # have to place corresponding `LoadModule' lines at this location so the # directives contained in it are actually available _before_ they are used. # Statically compiled modules (those listed by `httpd -l') do not need # to be loaded here. # # Example: # LoadModule foo_module modules/mod_foo.so # Include conf.modules.d/*.conf
LoadModule jk_module modules/mod_jk.so // 추가
...
Apache의 가상 호스트 /etc/httpd/conf/extra/httpd-vhosts.conf 파일도 아래 코드를 추가 합니다.
httpd-vhosts.conf 파일은 httpd.conf 에 가상호스트 include 설정이 되어 있어야 합니다.
httpd-vhosts.conf 파일
1 2 3 4 5 6 7 8 9
<VirtualHost *:80> ServerName localhost
# 확장자 jsp, json, xml, do를 가진 경로는 woker worker1 으로 연결하는 구문입니다. JkMount /*.jsp worker1 JkMount /*.do worker1 JkMount /*.json worker1 JkMount /*.xml worker1 </VirtualHost>
화면에 보시면 conf.modules.d 경로가 include가 된 것을 볼 수 있습니다.
/etc/httpd/conf.modules.d 경로에 진입하여 vi mod_jk.conf 를 실행하여 새로운 설정파일을 오픈 합니다.
1
$ vi /etc/httpd/conf.modules.d/mod_jk.conf
1 2 3 4 5 6 7 8 9 10 11 12
<IfModule mod_jk.c> # 워커 설정파일 위치 JkWorkersFile conf/workers_jk.properties # 공유 메모리파일 위치 반드시 Selinux 보안때문에 run에 위치 필수 JkShmFile run/mod_jk.shm # log 위치 JkLogFile logs/mod_jk.log # 로그레벨 설정 JkLogLevel info # 로그 포맷에 사용할 시간 형식을 지정한다. JkLogStampFormat "[%y %m %d %H:%M:%S]" </IfModule>
/etc/httpd/conf/httpd.conf 파일을 열어 기본 인덱스 설정에 index.jsp 를 추가 합니다.
1 2 3 4 5 6 7 8 9 10 11 12
# # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # // 변경 전 <IfModule dir_module> DirectoryIndex index.html </IfModule>
# 변경 후 <IfModule dir_module> DirectoryIndex index.html index.jsp </IfModule>
그러면 보시는 바와 같이 톰캣 페이지가 응답이 되지만, CSS, image 등이 제외된 상태로 HTML 문서만 응답이 됩니다.
그 이유는 아파치 환경 설정에서 tomcat connection 에서 설정한 JkMount 옵션 때문입니다. .jsp 파일만 worker가 처리하도록 보냈기 때문에, 정적 파일들은 아파치에서 응답해야 합니다. 하지만 아파치에는 톰캣 페이지에서 제공해야 하는 정적 파일들이 없기 때문에 톰캣에서 받아온 HTML 문서만 응답할 수 밖에 없습니다.
이로 미루어 보아, worker를 통해 아파치가 톰캣으로부터 jsp파일만 가져온 것을 확인할 수 있습니다. 즉, 아파치와 톰캣이 연동된 것입니다.
간단한 애플리케이션이 있다면 worker를 수정해서 80포트로 접근했을 때 애플리케이션을 응답할 수 있도록 설정할 수 있습니다. Tomcat Manager에서 웹 애플리케이션을 deploy 했을 때, 그 이름을 example 이라고 하겠습니다. 그러면 JkMount를 다음과 같이 수정해서 웹 애플리케이션이 아파치와 연동되서 실행될 수 있습니다
<!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL HTTP/1.1 Connector on port 8080 --> <!-- // 변경 전 --> <Connectorport="8080"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<!-- // 변경 후 --> <Connectorport="80"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />