로그인

Language :
제목Apache mod_jk VirtualHost 설정
글쓴이이지섭작성일2018-02-04수정일2019-08-01조회수10566

[ httpd.conf ]

httpd-vhosts.conf 파일을 Include 하고,

mod_jk.conf 설정 파일을 만들어서 또 Include 한다.

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

...(중략)...

Include conf/mod_jk.conf

[ mod_jk.conf ]

컴파일 하여 설치한 mod_jk.so 모듈을 로딩한다.

JkMount 같은 방법도 있지만 JkMountFile 옵션을 써서 톰캣에서 연동할 URI 패턴을 설정한다.

LoadModule jk_module modules/mod_jk.so

<IfModule jk_module>
    JkWorkersFile    conf/workers.properties
    JkLogFile        logs/mod_jk.log
    JkLogLevel       info
    JkMountFile      conf/uri.properties
</IfModule>

[ workers.properties ]

mod_jk 모듈에서 톰캣에 연동할 때 동작할 worker 의 이름과 포트, 타입 등을 설정한다.

ajp13 프로토콜의 포트는 톰캣의 server.xml 파일에서 설정할 수 있다.

worker (톰캣) 가 여러 대일 경우 워커명을 콤마(,)로 구분하여 worker.list 에 나열한다.

worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

[ uri.properties ]

첫번째 설정 (/*) 에서 모든 파일을 Tomcat 에서 처리하도록 한 후,

! (Exclude) 패턴을 사용하여 Tomcat 이 아닌 Apache 에서 처리할 URI 패턴을 지정한다.

/*=worker1

/*.jsp=worker1

/*.do=worker1

!/=worker1

!/*.htm=worker1
!/*.Htm=worker1
!/*.hTm=worker1
!/*.htM=worker1
!/*.HTM=worker1
!/*.hTM=worker1
!/*.HtM=worker1
!/*.HTm=worker1

!/*.html=worker1
!/*.htmL=worker1
!/*.htMl=worker1
!/*.htML=worker1
!/*.hTml=worker1
!/*.hTmL=worker1
!/*.hTMl=worker1
!/*.hTML=worker1

!/*.Html=worker1
!/*.HtmL=worker1
!/*.HtMl=worker1
!/*.HtML=worker1
!/*.HTml=worker1
!/*.HTmL=worker1
!/*.HTMl=worker1
!/*.HTML=worker1

!/*.ico=worker1
!/*.icO=worker1
!/*.iCo=worker1
!/*.iCO=worker1
!/*.Ico=worker1
!/*.IcO=worker1
!/*.ICo=worker1
!/*.ICO=worker1

!/*.jpg=worker1
!/*.Jpg=worker1
!/*.jPg=worker1
!/*.jpG=worker1
!/*.JPG=worker1
!/*.jPG=worker1
!/*.JpG=worker1
!/*.JPg=worker1

!/*.png=worker1
!/*.Png=worker1
!/*.pNg=worker1
!/*.pnG=worker1
!/*.PNG=worker1
!/*.pNG=worker1
!/*.PnG=worker1
!/*.PNg=worker1

!/*.gif=worker1
!/*.Gif=worker1
!/*.gIf=worker1
!/*.giF=worker1
!/*.GIF=worker1
!/*.gIF=worker1
!/*.GiF=worker1
!/*.GIf=worker1

!/*.js=worker1
!/*.Js=worker1
!/*.jS=worker1
!/*.JS=worker1

!/*.css=worker1
!/*.Css=worker1
!/*.cSs=worker1
!/*.csS=worker1
!/*.CSS=worker1
!/*.cSS=worker1
!/*.CsS=worker1
!/*.CSs=worker1

!/*.txt=worker1

!/*.json=worker1

[ httpd-vhosts.conf ]

mod_jk.conf 에서 적용한 uri.properties 설정을 각 VirtualHost 에 적용해주는데 (JkMountFile),

각 VirtualHost 설정의 마지막 부분에 JkMountFile conf/uri.properties 구문을 추가한다.

참고로 SSL 설정 예는 conf/extra/httpd-ssl.conf 파일에 나와 있다.

# Virtual Hosts
#
# Required modules: mod_log_config

# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any  block.
#
<VirtualHost *:80>
    ServerAdmin webmaster@some.net
    DocumentRoot "/usr/local/apache-tomcat-8.5.24/webapps/ROOT"
    ServerName some.net
    ServerAlias www.some.net

    ErrorLog "logs/some.net-error_log"
    CustomLog "logs/some.net-access_log" common

    JkMountFile  conf/uri.properties

</VirtualHost>


<VirtualHost *:443>
    ServerAdmin webmaster@some.net
    DocumentRoot "/usr/local/apache-tomcat-8.5.24/webapps/ROOT"
    ServerName some.net
    ServerAlias www.some.net

    ErrorLog "logs/some.net-ssl-error_log"
    CustomLog "logs/some.net-ssl-access_log" common

    SSLEngine on

    SSLCertificateFile /etc/pki/tls/private/some.net_20180107B19T.crt.pem
    SSLCertificateKeyFile /etc/pki/tls/private/some.net_20180107B19T.key.pem
    SSLCertificateChainFile /etc/pki/tls/certs/chain-bundle.pem
    SSLCACertificateFile /etc/pki/tls/certs/AddTrustExternalCARoot.crt

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "/usr/local/apache2/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

    CustomLog "/usr/local/apache2/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

    JkMountFile  conf/uri.properties

</VirtualHost>

Apache 와 Tomcat 을 mod_jk 모듈로 연동할 때 mod_jk.conf 에서

JkMountFile 설정을 사용하여 각각의 서버에서 담당할 URI 패턴을 지정하는데,

VirtualHost 설정 구문에서도 각각의 서버에서 담당할 URI 패턴을 지정해 주어야 한다는 점이

포인트이다.

그렇게 해주어야 jsp 파일을 톰캣에서 처리해주게 된다.

 

하나의 아파치 웹 서버에서 여러 대의 톰캣을 연동할 경우

톰캣 별로 워커명을 지정하여 포트와 IP 를 설정하고 각 uri.properties 파일을 만들어서

호스트 별로 VirtualHost 에서 JkMountFile 에 각 매핑 파일을 지정해 줄 수 있다.

 

uri.properties 파일에서 worker 를 지정하기 때문에

여러 대의 톰캣을 연동할 수 있다.

 

(환경)

 아파치 : httpd-2.4.29

 mod_jk : tomcat-connectors-1.2.42

 톰캣 : apache-tomcat-8.5.24

 

[참조한 웹 페이지]

  http://tomcat.apache.org/connectors-doc/reference/uriworkermap.html

  https://www.lesstif.com/pages/viewpage.action?pageId=12943367

  http://truepia.tistory.com/276

  http://algina.tistory.com/158

댓글

이름               비밀번호 
내용
덕분에 좋은 내용 잘 보고 갑니다.
정말 감사합니다.
작성자 - 행인
Jul 18 2023
비밀번호를 확인합니다.

댓글 등록시 입력한 비밀번호를 입력해주시기 바랍니다.