블로그 이미지
좋은느낌/원철
이것저것 필요한 것을 모아보렵니다.. 방문해 주셔서 감사합니다..

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

    2009. 6. 29. 16:35 개발/JSP/Servlet

    Apache 설정 및 톰캣 연동

    1. 아파치, 톰캣 설치

    1.1 윈도우에서 설치

    Tomcat 설치

    Apache 설치

    mod_jk 다운로드

    1.2 리눅스에서 설치

    리눅스 아파치 설치

    linux 에서 mod_jk 생성

    2. 아파치, 톰캣 연동

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

    2.1 Tomcat Connectors 복사

    • 다운로드한 mod_jk(mod_jk.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.oracleclub.com
    worker.oracleclub.port=7003
    worker.oracleclub.host=localhost
    worker.oracleclub.type=ajp13
    
    #wiki.oracleclub.com
    worker.wiki.port=7004
    worker.wiki.host=localhost
    worker.wiki.type=ajp13
    
    #dev.oracleclub.com
    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.oracleclub.com
      ServerAlias oracleclub.com
      ServerAlias web.oracleclub.com
    
      DocumentRoot C:\struts2\webapp
        
      ErrorLog logs/dev.oracleclub.com-error.log
      CustomLog logs/dev.oracleclub.com-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.oracleclub.com" appBase="oracleclub"
           unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
           
          <Alias>oracleclub.com</Alias>
          <Alias>web.oracleclub.com</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.oracleclub.com

    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.oracleclub.com
      DocumentRoot C:\struts2\webapp
    </VirtualHost>
    
    <VirtualHost 127.0.0.1:80>
      ServerName local.oracleclub.com
      DocumentRoot C:\oracleclub\webapp
    </VirtualHost>
    
    <VirtualHost 127.0.0.1:80>
      ServerName wiki.oracleclub.com
      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. 데모 및 실습

    문서에 대하여


    # 이 문서는 오라클클럽에서 작성하였습니다.
    # 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
    # 출처 : http://wiki.oracleclub.com/pages/viewpage.action?pageId=1507883&
    posted by 좋은느낌/원철