by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

Apache 설정 및 톰캣 연동




Apache 설정 및 톰캣 연동

1. 아파치, 톰캣 설치

1.1 윈도우에서 설치

1.1.1 Tomcat 설치

1.1.2 Apache 설치

1.1.3 mod_jk 다운로드

1.2 리눅스에서 설치

1.2.1 리눅스 아파치 설치

1.2.2 linux 에서 mod_jk 생성

① Source Compile
② Binaries Download

2. 아파치, 톰캣 연동

참고1. server.xml의 구조
<Server>
      |     
      +---<Service>
                  |
                  +---<Connector>
                  |
                  +---<Engine>
                              |
                              +---<DefaultContext>
                              |
                              +---<Realm>
                              |
                              +---<Logger>
                              |
                              +---<Host>
                                          |
                                          +---<Context>
                                          |
                                          +---<Value>
                                          |
                                          +---<Realm>
                                          |
                                          +---<Logger>

2.1 Tomcat Connectors 복사

  • 다운로드한 mod_jk(mod_jk-1.2.28-httpd-2.X.X.so)파일을 %APACHE_HOME%/modules 안에 복사한다.

2.2 workers.properties 파일 설정

참고2. Tomcat Worker
  • 톰캣 워커는(Tomcat worker) 웹서버로부터의 서블릿 요청을 톰캣 프로세스(Worker)에게 전달하여 요청을 처리하는 톰캣 인스턴스이다.
  • 대부분 하나의 worker를 사용하나, load 밸런싱이나 site 파티셔닝을 위해 여러개의 worker를 사용 할 수 있다.
  • 서로 다른 톰캣 워커에 의해 서로 다른 context를 서비스 할 수 있다.
  • 워커 타입에는 ajp12, ajp13, jni, lb 등이 있다.
  • http://tomcat.apache.org/connectors-doc/reference/workers.html
  • apache와 tomcat를 연동하기위해서는 workers.properties 파일을 설정해야 한다.
  • %APACHE_HOME%/conf/workers.properties
workers.properties 예제
workers.tomcat_home=D:\tomcat5.5
workers.java_home=C:\jdk1.5
ps=/

worker.list=oracleclub, wiki, dev

#local.www.gurubee.net
worker.oracleclub.port=7003
worker.oracleclub.host=localhost
worker.oracleclub.type=ajp13

#wiki.gurubee.net
worker.wiki.port=7004
worker.wiki.host=localhost
worker.wiki.type=ajp13

#dev.www.gurubee.net
worker.dev.port=7005
worker.dev.host=localhost
worker.dev.type=ajp13
참고3. 톰캣의 <Connector> 요소
  • 사용자의 요청을 <Engine>에 보내주는 역할을 하는것이 <Connector>이다. <Service>는 하나 이상의 <Connector>를 가져야 한다.
  • 사용자는 HTTP 또는 HTTPS/SSL등 여러가지 방법으로 <Engine>에 요청을 보내는데, 이들의 접속 처리는 <Connector>에 맡겨진다.
  • 각 프로토콜에 대해 복수의 <Connector>를 가지며, 어떤 요청이 와도 <Engine>이 동일하게 처리하고, 응답을 <Connector>에 맡길 수 있다.

2.3 httpd.conf 파일 설정

  • %APACHE_HOME%/conf/httpd.conf 파일을 수정
    • jk_module 추가
    • workers.properties 파일 추가
    • virtualhost 설정 추가 (이 문서에서는 "conf/vhosts/*.conf" 파일로 추가 하였음)
httpd.conf
# jk_module 추가
LoadModule jk_module modules/mod_jk-apache-2.0.58.so

# workers.properties 파일 추가
JkWorkersFile "C:\Program Files\Apache Group\Apache2\conf\workers.properties"

# virtualhost 설정 추가 
include "conf/vhosts/*.conf"

2.4 가상 호스트 설정

  • %APACHE_HOME%/conf/vhosts/dev.conf 파일을 생성 한 후 아래의 내용을 추가한다.
dev.conf
<VirtualHost 127.0.0.1:80>
  ServerName dev.www.gurubee.net
  ServerAlias www.gurubee.net
  ServerAlias web.www.gurubee.net

  DocumentRoot C:\struts2\webapp
    
  ErrorLog logs/dev.www.gurubee.net-error.log
  CustomLog logs/dev.www.gurubee.net-access.log common

  JkMount /*.ok  dev
</VirtualHost>
  • mod_jk의 JkMount 지시자를 사용해 지정된 URL 들을 Tomcat으로 할당할 수 있다.
  • JkMount /*.ok dev URI에 .ok로 오는 요청은 workers.properties에 설정된 dev worker로 보낸다.

2.5 톰캣 server.xml 파일 수정

  • workers.properties의 AJP/1.3 포트와 톰캣 Connector의 포트를 일치 시킨다.
server.xml
 
 <?xml version="1.0" encoding="UTF-8"?>

<Server port="20005" shutdown="SHUTDOWN">
  <Service name="Tomcat-Apache-mod_jk">

    <Connector port="7005"
               enableLookups="false" redirectPort="10445" 
               protocol="AJP/1.3" URIEncoding="euc-kr"  />

    <Engine name="webhosting" defaultHost="localhost">

      <Host name="dev.www.gurubee.net" appBase="oracleclub"
       unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
       
      <Alias>www.gurubee.net</Alias>
      <Alias>web.www.gurubee.net</Alias>

       <Context path="" docBase="C:/struts2/webapp" reloadable="true" workDir="C:/struts2/webapp/WEB-INF/work" />

      </Host>

    </Engine>

  </Service>
</Server>

2.6 hosts 파일 변경

  • 127.0.0.1 dev.www.gurubee.net

3. 가상 호스트 예제

하나의 IP로 여러개의 가상 호스트를 설정하는 방법을 알아보도록 하자.

3.1 이름 기반 가상 호스트 설정

  • Apache는 HTTP의 Host 헤더를 이용하여 여러개의 호스트명을 하나의 IP 주소로 사용하는 것을 가능하게 한다.
  • httpd.conf파일에 NameVirtualHost 를 설정하여 이름기반의 가상 호스트를 사용 할 수 있다.(꼭 설정해야 함)
  • 아래 코드는 이름기반 가상 호스트 설정 예제이다.
httpd.conf

# 127.0.0.1에 연결되는 모든 요청을 Host 헤더의 내용을 기준으로 처리한다. 
NameVirtualHost 127.0.0.1:80
Listen 80

<VirtualHost 127.0.0.1:80>
  ServerName dev.www.gurubee.net
  DocumentRoot C:\struts2\webapp
</VirtualHost>

<VirtualHost 127.0.0.1:80>
  ServerName local.www.gurubee.net
  DocumentRoot C:\oracleclub\webapp
</VirtualHost>

<VirtualHost 127.0.0.1:80>
  ServerName wiki.gurubee.net
  DocumentRoot D:\confluence-2.7-std\confluence
</VirtualHost>

3.2 IP 기반 가상 호스트 설정

  • 각 호스트별로 하나의 IP 주소를 할당하는 방법.
httpd.conf
 
 Listen 192.168.1.1:80
 Listen 192.168.1.2:80

<VirtualHost 192.168.1.1:80>
  DocumentRoot C:\struts2\webapp
</VirtualHost>

<VirtualHost 192.168.1.2:80>
  DocumentRoot C:\oracleclub\webapp
</VirtualHost> 

4. Rewrite Rule

  • mod_rewrite module은 주소 재작성 패턴을 URL에 적용한다.
  • 패턴은 정규 표현식(regular expression)을 의미하며 이 정규식에 match가 되는 pattern을 요청한 url에서 출력 하게 된다.

4.1 mod_rewrite 설치

  • apache 설치시 Configure 실행시에 --enable-rewrite 옵션을 추가한다.
  • apache 설치 이후 추가 설치시
    • 아파치 압축 푼 디렉토리로 이동 : cd /usr/local/httpd-2.0.63/modules/mappers
    • apxs를 이용해 새 모듈 추가 : /usr/local/apache2/bin/apxs -aic mod_rewrite.c

4.2 Rewrite 모듈 지시자

RewriteEngine

  • Rewriteing 엔진을 사용할지 여부를 설정
  • 디폴트 설정은 Off, RewriteEngine On 으로 설정하지 않는 이상 Rewritng 엔진을 사용할 수 없다.
  • 설정문법 : RewriteEngine On|Off

RewriteRule

  • Rewrite 모듈의 실질적인 Rewrite 규칙들을 적용 한다.
  • Input URL을 Return URL로 변경하기 위한 규칙들을 설정 한다.
  • 아래는 RewriteRule을 이용해 퍼머링크를 만드는 예제다.
 <IfModule mod_rewrite.c>  
  RewriteEngine On
  RewriteRule ^/$ /main.ok [R]  
  RewriteRule ^/community/([0-9]+)$ /articlelist.ok?article.communityId=$1 [PT]
  RewriteRule ^/article/([0-9]+)$  /articleview.ok?article.articleId=$1 [PT]
</IfModule>

  • RewriteRule 플래그
    • F(forbidden) : 요청하는 페이지를 403 에러로 redirect 시킵니다.
    • G(gone) : 요청하는 페이지를 410 에러로 redirect 시킵니다.
    • R(redirect) : Return URL로 redirect 한다.
    • PT(passthrough) : Input URL을 그대로 유지하며 Return URL을 실행한다.
    • http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

RewriteCond

참고4. 정규표현식 기초
. : 다수의 한문자
? : 0개 이상의 한문자
* : 0개 이상의 문자 또는 문자열
+ : 1개 이상의 문자 또는 문자열
^ : 문자열의 첫문(열)을 지정합니다.
$ : 문자열의 끝 문자(열)을 지정합니다.
(역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거합니다.(예:(, ), [, ] . 등)
{n} : 정확히 n번 반복
{n,} : n번 이상 반복
{n,m} : n 이상 m 이하 반복
[chars] : 문자들의 범위 또는 표현할 수 있는 문자들을 설정합니다.
예) [a-z] : a 부터 z 까지의 소문자, [tT] : 소문자 t 또는 대문자 T

 정규표현식 단축표현들
[:alpha:] : 알파벳. [a-zA-Z] 와 같은 표현
[:alnum:] : 알파벳과 숫자. [a-zA-Z0-9] 와 같은 표현
[:digit:] : 숫자 [0-9] 와 같은 표현
[:upper:] : 대문자. [A-Z] 와 같은 표현

5. 데모 및 실습

문서에 대하여

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.