나정이의 공부/IT

mod.jk를 이용하여 Apache2 + tomcat 다중 연동 배워보기 !

나정_ 2021. 4. 8. 16:58
728x90
반응형

안녕하세요 나정입니다. 

오늘은 apache2와 tomcat을 연동하는 시간을 가지겠습니다. 

연동하는 즉슨 apache로 들어오는 도메인을 tomcat과 연결시켜 사용하기 위함인데요.

apache 내에 가상 호스트를 통해 

1개의 웹서버에서 여러도메인을 연동시켜 사용할 수 있어 비용적으로 매우 효율적이기도 합니다.


[1] 주요설정파일 

 

연동하는데 있어 수정 및 생성해야하는 파일이 존재합니다.

파일에 대한 설명은 다음과 같습니다. 

  파일명 위치 설명
1 httpd.conf {apache설치경로}/conf apache 기본설정파일 
2 workers.properties {apache설치경로}/conf AJP Connector를 통해 서비스하는 Application server를 등록하는 설정파일 
3 mod_jk.conf  다운 Apache와 Tomcat의 연동을 위해 AJP Connector Module을 apache에 load하는 설정파일
4 httpd-vhost.conf {apache 설치경로}/conf/extra 한개의 apache파일에 다수의 tomcat을 설정하기 위해 생성된 관리 파일
5 server.xml  {tomcat설치경로}/conf  tomcat 기본설정파일 

 

[2] mod_jk 다운받기  

 

mod_jk란 위에서도 설명을 했지만 apache와 tomcat을 연동해주는 connector입니다
mod_jk 다운은 http://mirror.apache-kr.org//tomcat/tomcat-connectors/jk/binaries/windows/ 에서 다운가능합니다. 

맨처음 파일을 다운받은 뒤 압축을 풀면 다음과 같이 나옵니다.

위에서 체크한 mod_jk.so 는 {apache설치경로}/conf 밑에 넣어줍니다. 

 


[3] httpd.conf 수정  

빨간색으로 표기되어있는 부분을 수정해준다. 

Listen 80

// 도메인에서 유입되는 포트가 어떤 포트인지 확인한 후 (기본은 80포트) Listen으로 열어준다. 

 

LoadModule access_compat_module modules/mod_access_compat.so

LoadModule actions_module modules/mod_actions.so

LoadModule alias_module modules/mod_alias.so

LoadModule allowmethods_module modules/mod_allowmethods.so

LoadModule asis_module modules/mod_asis.so

LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule authn_core_module modules/mod_authn_core.so

LoadModule authn_file_module modules/mod_authn_file.so

LoadModule authz_core_module modules/mod_authz_core.so

LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

LoadModule authz_host_module modules/mod_authz_host.so

LoadModule authz_user_module modules/mod_authz_user.so

LoadModule autoindex_module modules/mod_autoindex.so

LoadModule cgi_module modules/mod_cgi.so

LoadModule dir_module modules/mod_dir.so

LoadModule env_module modules/mod_env.so

LoadModule include_module modules/mod_include.so

LoadModule isapi_module modules/mod_isapi.so

LoadModule log_config_module modules/mod_log_config.so

LoadModule mime_module modules/mod_mime.so

LoadModule negotiation_module modules/mod_negotiation.so

 

Include conf/mod_jk.conf

// tomcat+apache연동 모듈을 include함 

Include conf/extra/httpd-vhosts.conf

// 가상 호스트 설정 파일 include 함 

 

<IfModule unixd_module>

 

User daemon

Group daemon

 

</IfModule>

 

ServerAdmin admin@example.com

 

ServerName www.example.com:80 

// 사용하는 도메인에 대하여 serverName 설정  

ServerName www.example1.com:80 

// 1개의 웹서버에 여러개 도메인을 연결해주고 싶은경우 추가한뒤 httpd-vhost에서 tomcat과 연동해준다 

<Directory />

    AllowOverride none

    Require all denied

</Directory>

 

 

DocumentRoot "c:/Apache24/htdocs"

<Directory "c:/Apache24/htdocs"> 

    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted

</Directory>

 

<IfModule dir_module>

    DirectoryIndex index.html

</IfModule>

 

<Files ".ht*">

    Require all denied

</Files>

 

ErrorLog "logs/error.log"

 

LogLevel warn

 

<IfModule log_config_module>

    

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

    LogFormat "%h %l %u %t \"%r\" %>s %b" common

 

    <IfModule logio_module>

      # You need to enable mod_logio.c to use %I and %O

      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

    </IfModule>

 

    CustomLog "logs/access.log" common

 

</IfModule>

 

<IfModule alias_module>

   

    ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/"

 

</IfModule>

 

<IfModule cgid_module>

</IfModule>

 

<Directory "c:/Apache24/cgi-bin">

    AllowOverride None

    Options None

    Require all granted

</Directory>

 

<IfModule mime_module>

   

    TypesConfig conf/mime.types

 

    AddType application/x-compress .Z

    AddType application/x-gzip .gz .tgz

 

</IfModule>

 

<IfModule proxy_html_module>

Include conf/extra/proxy-html.conf

</IfModule>

 

 

<IfModule ssl_module>

SSLRandomSeed startup builtin

SSLRandomSeed connect builtin

</IfModule>

 

[4] httpd-vhost.conf 수정   

가상호스트를 설정해주는 파일이다. 해당 설정파일은 {apache 설치경로}/conf/extra에 존재한다. 

빨간색으로 표기되어있는 부분을 수정해준다. 

# TOMCAT 설정

<VirtualHost *:80> // 외부에서 들어오는 아이피 : 포트 

    ServerName www.example.com

    JkMount /ex1 // apache+tomcat 연동시 사용되는 고유 id 값 

    DocumentRoot "C:/apache-tomcat-6.0.37_test01/webapps" // tomcat/webapps 경로 

    <Directory "C:/apache-tomcat-6.0.37_test01/webapps">

    </Directory>

</VIrtualHost>

 

<VirtualHost *:80>

    ServerName www.example1.com

    JkMount /* ex2

    DocumentRoot "C:/apache-tomcat-6.0.37_test02/webapps"

    <Directory "C:/apache-tomcat-6.0.37_test02/webapps">

    </Directory>

</VirtualHost>

이름 설명
virtualhost  들어오는 url:port를 설정해준다
ServerName  도메인명 
JKMount  jsp 요청이 들어오면 tomcat_id(예;ex1)이 그 해당 요청을 tomcat에게 보내는 역할을 한다. 요청을 보낼 때는 특정 파일에 대한 값만 제한하여 보낼 수 있으며 예를들어 jsp파일에 대한 url만 요청하고 싶을 경우 /*.jsp같이 변경하여 설정할 수 있다.

 

[5] workers.properties 설정   

workers.properties는 apache내부에서 제공되는 파일이 아니다.

그러므로 만들어줘야 되며 만들어줄 떄는 다음과 같이 만들어주면 된다

worker.list=ex1,ex2 // httpd-vhost에서 설정해준 id 값을 넣어줌 

worker.maintain=30

 

worker.ex1.type=ajp13 // id에 대한 type 부터 기타 설정을 진행함 

worker.ex1.host=localhost

worker.ex1.port=8471 // tomcat server.xml 내에 설정한 ajp port 를 넣어줘야함 

worker.ex1.socket_keepalive=1

worker.ex1.connection_pool_size=100

worker.ex1.connect_timeout=3000

worker.ex1.prepost_timeout=1000

worker.ex1.socket_timeout=3

worker.ex1.reply_timeout=1000

 

worker.ex2.type=ajp13

worker.ex2.host=localhost

worker.ex2.port=8472

worker.ex2.socket_keepalive=1

worker.ex2.connection_pool_size=100

worker.ex2.connect_timeout=3000

worker.ex2.prepost_timeout=1000

worker.ex2.socket_timeout=3

worker.ex2.reply_timeout=1000

이름 설명
worker.list=tomcat id 값  httpd-vhost에서 설정한 id 값을 넣어준다. 
worker.ex1.type=ajp13  apache http서버와 tomcat서버가 통신하는 protocol은 AJP13이다. 
worker.ex1.connection_timeout=1000 mod_jk와 tomcat instance간 연결이 완료된 후 AJP13프로토콜에서의 cping request에 대한 response timeout 값 (1000 = 1초) 
worker.ex1.propost_timeout=1000 mod_jk와 tomcat instance간의 요청이 전달되기 전에 AJP13프로토콜에서의 cping request에 대한 response timeout 값 (1000 = 1초)
worker.ex1.socket_timeout=3 mod_jk와 tomcat instance간의 응답대기 시간이 3초라면 timeout 
worker.ex1.reply_timeout=1000 mod_jk와 tomcat instance간의 요청과 응답시간에 대해서 timeout을 설정
worker.ex1.port=8471 tomcat 내에서 설정한 AJP 프로토콜  

 

[1]-[5] 설정이 완료되면 다중으로 연동이 되는 것을 확인 할 수 있다.! 

 

끗 

728x90
반응형