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

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. 30. 10:20 개발/JSP/Servlet

    Apache 와 Tomcat 을 연동시 아파치에서는 정적인파일 (이미지, js, html 등등) 을 처리하게 하고 톰캣에서는 동적인 파일들을 처리하도록 하는것이 가장 중요한 포인트입니다.

    대용량 트래픽을 유발하는 서비스의 경우는 이미지 파일 이나, js 파일 등을 아래와 같이 서브 도메인으로 만들어서 물리적으로 다른서버에 두게 하는경우가 일반적인 적용 가능한 경우입니다.

    예) 이미지, js 파일 등등 -> img.onjava.co.kr  (일반적으로 이미지 서버 또는 파일서버)
         동적인 파일             -> www.onjava.co.kr (웹서버)
         www.onjava.co.kr 내의 html 에서 img 를 호출시 <img src="http://img.onjava.co.kr/xxx/xx.jpg"> 와 같은 형태로
         처리.


    하지만, 비용적인 측면이나 많은 트래픽이 생기지 않는 웹서버의 경우에는 하나의 물리적인 서버에서 아파치와 톰캣의 역할을 적절하게 나눠서 운영한다면 효과적인 서버운영을 할수가 있습니다.


    1. 아파치 WebRoot가 /usr/local/apache/htdocs 이고,
        톰캣 WebRoot 가 /home/web/source/onjava/WebRoot 인 
    경우
        
        - 톰캣에서는 파일 확장자가 jsp인 파일만 처리하도록 

        - 아파치에서는 jsp 파일 외의 파일들 (이미지 파일, html 파일 등등) 을 처리하도록 하기 위해서 아래와 같이 설정해준다.
       
        httpd.conf 파일내에서 
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------     
      DocumentRoot "/usr/local/apache/htdocs"
        
      <Directory "/usr/local/apache/htdocs">
        #
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs/2.2/mod/core.html#options
        # for more information.
        #
         Options FollowSymLinks

        #
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        #
         AllowOverride None

        #
        # Controls who can get stuff from this server.
        #
         Order allow,deny
         Allow from all

    </Directory>

    # 아래와 같이 WebRoot 경로를 하나더 추가해 준다.

    <Directory "/home/web/source/onjava/WebRoot">
        #
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        #
    http://httpd.apache.org/docs/2.2/mod/core.html#options
        # for more information.
        #
         Options FollowSymLinks

        #
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        #
         AllowOverride None

        #
        # Controls who can get stuff from this server.
        #
         Order allow,deny
         Allow from all

    </Directory>

    # 톰캣과 연동을 위한 추가 소스 부분 (httpd.conf 파일의 맨 마지막 부분에 추가)

    <IfModule mod_jk.c>
      JkWorkersFile "/usr/local/apache/conf/workers.properties"
    </IfModule>

    # mod_jk.so 파일은 아파치사이트에서 다운받으면 된다.
    LoadModule jk_module "/usr/local/apache/modules/mod_jk.so" 

    #Configure mod_jk

    JkWorkersFile conf/workers.properties
    JkLogFile logs/mod_jk.log
    JkLogLevel info

    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

    JkRequestLogFormat "%w %V %T"

    #Root context

    JkMount /*.jsp ajp13           -> 톰캣에서는 jsp 만 처리한다. (JkMount 에 추가된 파일만이 톰캣에서 처리하게 된다)
    #JkMount /*.html ajp13           -> 주석처리된 부분들은 모두 아파치에서 처리하게 된다.
    #JkMount /*.js ajp13
    #JkMount /*.jpg ajp13
    #JkMount /*.gif ajp13
    #JkMount /*.jpeg ajp13

    AddDefaultCharset UTF-8

    ----------------------------------------------------------------------------------------------------------------
    workers.properties 파일
        workers.tomcat_home=/usr/local/tomcat
        workers.java_home=/usr/local/java
        ps=\
        worker.list=ajp13
        worker.ajp13.port=8009
        worker.ajp13.host=localhost
     


    2. 위의 설정후에 jsp 파일이외의 이미지, html, js 파일 등은 /usr/local/apache/htdocs 에 위치시켜야 제대로 서비스가 가능하다. 당연히 톰캣에서 처리해야할 jsp 파일들은
    /home/web/source/onjava/WebRoot 에 위치시키면 된다.

    posted by 좋은느낌/원철
    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 좋은느낌/원철
    2009. 6. 29. 16:20 개발/JSP/Servlet

     1  Apache 2.0
    http://httpd.apache.org 에서 httpd-2.0.49.tar.gz 받아서 푼다.


    $ tar xvfz httpd-2.0.49.tar.gz


    INSTALL 파일을 참고하여 apache를 설치하고 실행한다.


    $ ./configure --prefix=PREFIX $ make $ make install $ PREFIX/bin/apachectl start
    여기서 PREFIX는 apache가 설치될 디렉토리이다. --prefix=PREFIX를 생략하면 /usr/local/apache2에 설치된다.
    2003년경의 모 아티클에는 아파치 인스톨시에 configure --prefix=/usr/local/apache --enable-module=so 와 같이
    모듈 옵션을 주라고 하는데 최근 문서로 확인 해 봐야 할 듯.


    이하의 설명에서 PREFIX는 아파치가 설치된 디렉토리를 뜻한다.

    --------------------------------------------------------------------------------

    브라우저를 열고 http://127.0.0.1/을 입력하였을 때, apache web server가 설치되었다는 메시지가 나오면 성공.


    아파치 서버를 끝내려면


    $ PREFIX/bin/apachectl stop
    2 J2SE
    http://java.sun.com에서 J2SE 1.4.2 를 받아 설치한다. SDK를 받아야 된다. JRE만 받으면 안 됨.


    확장자가 bin인데 실행권한을 주고 실행시키면 license에 동의하는지를 묻고 이에 대하여 y를 눌러 대답하면 설치가 된다.


    아래와 같이 심볼릭 링크를 한다.


    $ ln -s /usr/java/j2sdk1.4.2_04 /usr/local/java

    /etc/profile.d/java.sh를 아래의 내용으로 만들어 넣는다. (실행 퍼미션으로 넣어야 한다.)


    JAVA_HOME=/usr/local/java export JAVA_HOME

    3  Tomcat 5
    http://jakarta.apache.org에서 jakarta-tomcat-5.0.19.tar.gz를 받아서 푼다. (5.5.x 버전도 잘 동작함을 확인 함.)

    $ tar xvfz jakarta-tomcat-5.0.19.tar.gz

    RUNNING.txt 파일을 참고하여 tomcat을 실행시킨다.

    $ $CATALINA_HOME/bin/startup.sh여기서 $CATALINA_HOME은 tomcat이 설치된 디렉토리이다.


    아래와 같이 심볼릭 링크를 한다.

    $ ln -s /usr/jakarta-tomcat-5.0.19 /usr/local/tomcat

    브라우저를 열고 http://127.0.0.1:8080/을 입력하였을 때, tomcat이 설치되었다는 메시지가 나오면 성공. tomcat을 끝내려면

    $ $CATALINA_HOME/bin/shutdown.sh

    4  mod_jk2.so


    http://jakarta.apache.org 에서 jakarta-tomcat-connectors-jk2-src-current.tar.gz를 받아서 푼다.


    jk/native2/INSTALL.txt를 참고하여 mod_jk2.so를 만든다.

    $ ./configure --with-apxs2=PREFIX/bin/apxs $ make $ cd ../build/jk2/apache2 $ PREFIX/bin/apxs -n jk2 -i mod_jk2.so* PREFIX는 apache가 설치된 경로로 대개 /usr/local/apache 혹은 /usr/local/apache2 에 위치한다.

     

    5  httpd.conf
    위에서 만든 mod_jk2.so를 PREFIX/modules/에 복사한 다음, PREFIX/conf/httpd.conf 에서

    #LoadModule foo_module modules/mod_foo.so
     와 같은 형식으로 되어 있는 곳을 찾아 그 아래에

    LoadModule jk2_module modules/mod_jk2.so
    를 추가한다.


    DirectoryIndex를 찾아 그 줄에 index.jsp를 추가한다.

    Alias /icons/ "/usr/local/apache2/icons/"와 같은 형식의 행을 찾아 그 아래에

    Alias /jsp-examples/ "/usr/local/tomcat/webapps/jsp-examples/" Alias /servlets-examples/ "/usr/local/tomcat/webapps/servlets-examples/"
    를 추가한다.


    DocumentRoot 행을 찾아

    DocumentRoot "/www"
    로 바꾸고 저장하고 아래와 같이 심볼릭 링크를 한다.

    $ ln -s /usr/jakarta-tomcat-5.0.19/webapps/ROOT /www
    * 이렇게 아파치의 DocumentRoot 와 톰캣의 DocRoot를 바로 연결 하기보단 톰캣의 가상호스트 설정으로 돌리는 쪽이 훨씬
      나은 방법이라고 생각 함.
    *위 방법대로 설정 시 ContextRoot가 / 가 되는 것은 위에 설정한 톰캣 ROOT밖에 없다.
    *위 설명에서와 같이 아파치의 DocumentRoot 와 톰캣의 DocRoot 심볼릭 링크로 걸지 않고 톰캣의 Host설정만으로도 충분함.


    6 workers2.properties
    PREFIX/conf/에 workers2.properties를 아래의 내용으로 만들어 저장한다. ( jk/native2/INSTALL.txt 참고 )
    [channel.socket:localhost:8009] port=8009 host=127.0.0.1  [ajp13:localhost:8009] channel=channel.socket:localhost:8009  [uri:/*.jsp] worker=ajp13:localhost:8009  [uri:/servlets-examples/*] worker=ajp13:localhost:8009
    * 위 5번 httpd.conf 수정시 제 방식대로(아파치 DocumentRoot와 톰캣의 ROOT를 심볼릭으로 엮지않는 방법) 톰캣의 HOST를
    설정하는 방식을 따른다면 아래의 내용을 추가하여 모든 uri에 대해 톰켓이 알 수 있도록 다음을 추가 합니다.

    [uri:/*] worker=ajp13:localhost:8009
     

     

    7  Virtual Host
    # Virtual Host의 경우 아래 URI에서 호스트 명을 넣어야 하고요. server.xml에서 host명을 넣으시면 됩니다.
    [uri:www.kldp.net/*.jsp] worker=ajp13:localhost:8009  [uri:www.kldp.net/servlets-examples/*] worker=ajp13:localhost:8009  [uri:www.kldp.org/*] worker=ajp13:localhost:8009

    8  LB(로드 발란서)
    -- :> 내일 올릴게요.


    9  apache 실행
    $ PREFIX/bin/apachectl start

    10  tomcat 실행
    $ $CATALINA_HOME/bin/startup.sh  또는  $ $CATALINA_HOME/bin/catalina.sh start

    11  확인
    브라우저에서 http://127.0.0.1을 입력하면 톰캣 화면이 나온다. (8080을 입력하지 않은 것을 주목)


    http://127.0.0.1/jsp-examples/을 입력하여 그곳에 있는 jsp 예제를 클릭하여 실행결과가 나타나면 jsp 성공.


    http://127.0.0.1/servlets-examples/를 입력하여 그곳에 있는 servlet 예제를 클릭하여 실행결과가 나타나면 servlet 성공.
    2008/03/07 01:26 2008/03/07 01:26 
     

    posted by 좋은느낌/원철
    2009. 6. 16. 10:43 개발/Linux 계열
    Apache HTTS Setup
    Apache web server에서 SSL(HTTPS)을 사용하기 위해서는 mod_ssl 이라는  
    module을 사용해야합니다.
    mod_ssl은 실제로 OpenSSL을 이용해서 SSL 서비스를 제공합니다.
    따라서, OpenSSL이 설치가 안된 경우 OpenSSL을 먼저 설치하고
    Apache에서 mol_ssl을 설치합니다.
     
    1. OpenSSL 설치
    OpenSSL은 아래 site에서 최신 버전을 download받아서 설치하시면  
    됩니다. 설치하는데 별 문제 없을 거라고 봅니다.
     
        http://www.openssl.org/
     
    2. mod_ssl을 가진 apache 설치하기
    예전 apache에서는 mod_ssl을 따로 받아서 같이 설치했는데,  
    httpd 2.0 이상 version에서는 mod_ssl이 포함되어있기 때문에,
    SSL을 사용할 경우, 'configure'실행시 다음과 같이 추가해주면 됩니다.
    아주 간단하죠..^^
     
    > ./configure --enable-ssl --with-ssl
    > make  
    > make install
     
    3. SSL setting하기
    SSL setting하는 것도 아주 간단한데요. 크게 두가지입니다.
    ssl.conf 파일에 보호하고자 하는 위치를 지정해주고,
    SSL에서 사용할 private key와 public key만 만들어주면 끝납니다.
     
    3.1 ssl.conf setting하기
    SSL 관련 setting은 ./conf/ssl.conf에서 하는데,
    이 파일은 ./conf/httpd.conf에서 include합니다.
     
    ssl.conf 안에 있는 밑에 다음과 같이 SSL인증이  
    필요한 부분을 선언하고, 어떻게 인증을 받을 건지 지정만 해주면 됩니다.  
    아주 간단하죠..^^
     
    ex)
    <Directory "/usr/local/apache2/htdocs/Frontier">
            SSLRequireSSL
            SSLOptions +StdEnvVars
            AuthType        basic
            AuthName        "Human Genome Frontier Protected Area"
            AuthUserFile    conf/protected.passwd
            Require         valid-user
    </Directory>
     
    apache에서 .htaccess 파일로 인증해보신 분들은
    SSL들어간 것만 빼면 똑같다는 느낌을 받지요.
     
    3.2 private, public key 만들기
    key를 만드는 것도 openssl 프로그램이 알아서 해주기 때문에  
    간단합니다.
    먼저 key의 위치는 public key의 경우 일반적으로 ./conf/server.crt에
    private key의 경우 ./conf/server.key 밑에 놓습니다.
    directory가 없는 경우 만들어야겠죠..^^
     
    OpenSSL을 설치했으면, openssl 프로그램이 만들어지는데
    이 프로그램을 이용해 담과 같이 만듭니다.
     
    public key생성:
        > openssl genrsa -out server.key 1024
     
        #키를 사용할때 password를 주고 싶으면 다음과 같이  
        '-des3' 옵션을 추가합니다.
        > openssl genrsa -des3 -out ./conf/ssl.key/server.key 1024
     
    private key 생성:
        > openssl req -new -x509 -days 365
            -key ./conf/ssl.key/server.key  -out ./conf/ssl.crt/server.crt
     
    이 key들이 들어있는 위치는 ssl.conf 파일의 밑에
    다음과 같이 지정되어 있답니다. 머 위치가 맘에 안들면 다른 곳으로
    지정할 수 있겠죠!
     
    SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
    SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
     
    이제 모든 setting이 다 끝났습니다.
     
    마지막으로 apache 시작만 하면 된는데요.
    ./bin directory에서 다음과 같이 실행시키면 됩니다.
     
        > ./bin/apachectl startssl
    posted by 좋은느낌/원철
    2009. 6. 16. 09:07 개발/Linux 계열
    설치버전

    RedHat Linux 기반의 Sulinux 1.5 (http://www.sulinux.net/)
    Apache 2.2.4 (http://www.apache.org/ - httpd)
    Mysql 5.0.37 (http://www.mysql.com/)
    Tomcat 6.0.10 (http://www.apache.org/ - tomcat )
    JDK 6.0 (http://java.sun.com/)
    Apache-Tomcat Connector (Jk Connector 1.2.21) (http://www.apache.org/ - tomcat - connector)

    모두  linux 용, Non-RPM 버전으로 받아서 설치하였음.
    받은 모든 파일들은 /usr/local/ 로 ftp 전송등으로 복사.

    Mysql

    SHELL> tar xzvf mysql파일명.확장자

    SHELL> ln -s /usr/local/mysql디렉토리명  mysql
               
                mysql디렉토리에 대한 링크를 만듬. (윈도우의 바로가기 같은 개념--;)

    SHELL> cd mysql

    SHELL> adduser -M mysql

    SHELL> chown -R root /usr/local/mysql

    SHELL> chown -R mysql /usr/local/mysql/data

    SHELL> ./configure

    자동으로 실행까지 한다.

    SHELL> cp /usr/local/mysql/support-files/my-medium.cnf   /etc/my.cnf

    SHELL> ps  
                (mysqld_safe 가 있는지 확인.)

    SHELL> cd bin  (/usr/local/mysql/bin)

    SHELL> ./mysqladmin -u root password 'mysql root계정 비밀번호'

    SHELL> ./mysql -u root -p
                (비밀번호를 입력하고 접속되는지 확인)

    mysql> show databases;
                (information_schema , mysql , test DB가 있는지 확인 - 절대삭제하지 말것)

    mysql> quit  (빠져나오기)
     
    apache

    SHELL> tar xzvf apache파일명.확장자

    SHELL> cd 풀린apache디렉토리

    SHELL> ./configure --prefix=/usr/local/apache --enable-so --enable-modules=all
                                 --enable-mods-shared=most

    SHELL> make && make install

    SHELL> cd /usr/local/apache/

    SHELL> vi conf/httpd.conf

                httpd.conf 설정내용중 ServerName 부분을 찾아서.
                주석처리되어있는 #를 삭제하여 활성화시키고, 도메인네임이나 IP Address를 적는다.
                예>ServerName www.도메인이름
                     ServerName 2xx.xx.xx.xx

                저장하고 vi편집기 빠져나오기.

    SHELL> cd bin
    SHELL>./apachectl start   아파치 실행.

    웹브라우저를 실행시켜서 설정한 도메인네임이나 IP주소를 쳐서 접속을 한다.

    "It works!!"

    라는 메세지가 뜨면 아파치 설치 성공.

    JDK

    다운로드 받은 JDK파일은 .bin

    SHELL> chmod o+x  jdk파일명
                (실행할 수 있게 권한을 준다)

    SHELL> ./jdk파일명 (엔터)
              
                (아니면 sh jdk파일명)

    Do you agree to the above license terms?

    동의한다고 한다. (yes)

    착하게 알아서 다 설치한다.

    SHELL> ln -s /usr/local/jdk디렉토리명  jdk

    Tomcat

    SHELL> tar xzvf 톰켓파일이름

    SHELL> ln -s /usr/local/tomcat디렉토리이름  tomcat

    환경변수 설정

    SHELL> vi /etc/profile

    profile문서 제일 끝에 아래를 추가 한다.

    JAVA_HOME=/usr/local/jdk
    CATALINA_HOME=/usr/local/tomcat
    APACHE_HOME=/usr/local/apache
    export JAVA_HOME CATALINA_HOME APACHE_HOME

    PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$APACHE_HOME/bin:$PATH
    export PATH=$PATH:/usr/local/bin:/usr/local/tomcat/bin
    export CLASSPATH=$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/servlet-api.jar:$CATALINA_HOME/lib/jsp-api.jar

    저장하고 나가기

    SHELL> source /etc/profile

    SHELL> catalina start
                웹브라우저에서 IPAddress 나 도메인 :8080 으로 접속한다.
                왠 고양이 한마리 나오면 톰켓 설치 완료.

    Tomcat Connector

    SHELL> cd connector디렉토리

    SHELL> cd native

    SHELL> ./buildconf.sh

    SHELL> ./configure --with-apxs=/usr/local/apache/bin/apxs
    SHELL> make && make install

    SHELL> ls /usr/local/apache/modules
                (mod_jk.so 파일이 생성되었는지 확인)

    SHELL> cd /usr/local/apache/conf

    SHELL> vi workers.properties

                아래 내용 작성
               
                workers.tomcat_home=/usr/local/tomcat
                workers.java_home=/usr/java/jdk1.5.0_05
                ps=/
                worker.list=ajp13

                worker.default.port=8009
                worker.default.host=localhost
                worker.default.type=ajp13
                worker.default.lbfactor=1

                저장하고 나가기.

    SHELL> vi httpd.conf

                 LoadModule 부분을 찾는다.
                 LoadModule jk_module modules/mod_jk.so 를 추가한다.
                 
                 DocumentRoot "usr/local/apache2/htdocs" 부분을 찾아서
                 DocumentRoot "/usr/local/tomcat/webapps/ROOT"  로 바꾼다.
                 
                 DirectoryIndex 부분을 찾아서
                 index.jsp 를 추가한다.

                 아래 Mod_Jk Setting 부분
                 문서 제일 밑에 추가

                 # Mod_jk settings -----------------------------------------------------
                 #
                    JkWorkersFile conf/workers.properties
                    JkLogFile logs/mod_jk.log
                    JkLogLevel debug
                    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
                    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
                    JkRequestLogFormat "%w %V %T"

                    JkMount /examples/jsp/* ajp13
                    JkMount /examples/servlets/* ajp13
                    JkMount /*.jsp ajp13
                    JkMount /servlet/* ajp13
                 #---------------------------------------------------------------------

                 저장하고 나가기.

    SHELL> apachectl start
    SHELL> catalina.sh start

    웹브라우저에서 http://자기아이피 or http://도메인주소 로 접속

    :8080을 붙이지 않고 고양이가 나와야하며
    사이드메뉴에 JSP example 과 Servlet example 를 클릭하여
    실행이 모두 되면 연동까지 성공!

    이상있으면 댓글.
    posted by 좋은느낌/원철
    2009. 6. 11. 17:55 개발/Linux 계열

       아파치2 메뉴얼
       아파치 데몬실행파일 : httpd
       웹로그파일(access_log)에서 유일 IP카운트방법
       Apache rewrite Module
       아파치로그 lotate
       아파치로그분석툴(Webalizer, cronolog)
       자주쓰는 아파치 설정사항 정리
       Apache 웹서버 보안관리
    0 0 Jserv 설치
    0 0 아파치-포스트그레스 인증 모듈
    0 0 Apache에서 Tomcat 사용하기 (UNIX/Linux)
    0 0 apache 사용자 인증
    0 0 가상 호스트 설정하기(name base)
    0 0 httpd.conf 설정하기
    0 0 아파치 모니터링(server-status)에 관해 자세히 알고싶다.
    0 0 아파치 웹 서버구축 및 운용
    0 0 SSI사용법과 환경변수사용법
    0 0 사용자인증기법(특정디렉토리의 암호걸기)
    0 0 윈도우에서의 아파치 디렉토리별 사용자인증법
    0 0 Apache + PHP + Mysql + GD + Freetype 동시설치
    0 0 아파치를 활용한 가상호스트 설정법
    0 0 아파치 이야기

    00000Apache와 PHP, Mysql 함께설치하기
    00000Apache와 PHP 설치하기(최신버전)  -Apache 1.3.20-
    00000PHP설치도움말 보기

    0 0 리눅스와 함께 기본적으로 설치되는 아파치 둘러보기
    0 0 리눅스의 RPM으로 아파치 설치하기
    0 0 일반적인 방법으로 아파치 설치하기
    0 0 최신버전 아파치( apache 1.3.14) 설치방법
    0 0 아파치 환경파일(httpd.conf) 완벽가이드
    0 0 아파치웹서버 동작상태 모니터링
    0 0 개인도메인로딩시 틸드(~)기호없이 사용하는 방법
    0 0 아파치의 숨은 기법#1
    0 0 httpd에 대한 몇가지 옵션
    posted by 좋은느낌/원철
    2009. 6. 11. 17:47 개발/Linux 계열

    접속자가 많은 사이트에서는 아파치 로그를 관리하는 것도 만만치 않다.
    Linux, solaris 등에서 로그 파일 크기가 2GB가 넘어서 골치아픈 경우도 발생한다.
    또한 로그 파일이 크면 클수록 서버에 필요없는 무리를 주는 것도 사실이다.


    1) Apache 자체에서 제공하는 rotatelogs를 이용하여 로그를 시간과 용량에 따라
      분리 저장하는 방법
    2) 보다 개선된 형태의 cronolog로 로그를 rotation하는 방법
    3) images 로그와 윈도 OS 관련된 warm 로그를 별도로 저장하는 방법을 소개한다.


    ------------------------------------------------------------------------
    1) weblog를 자동 rotation하기 

    로그를 관리하기 위해 logrotate 를 사용하는 경우가 많지만, 이는 서비스를 일시 중단해야
    한다. 그러나 apache에서 제공하는 rotatelogs는 웹서버 동작중에 (1) 특정시간간격이나
    (2) 특정 크기 단위로 로그를 저장한다.

    예) CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access.log 86400" common

    위는 웹서버를 실행한지 86400초(24시간)간격으로 로그파일을 나눠서 저장한다.
    로그 파일명은 'access.log.????' 형식으로 ???? 는 로그파일 생성시의 timestamp 이다.

    즉, access.log.1060189068, access.log.1060120280 형태로 파일명이 만들어진다.
    이런형태의 파일명이라면 이해하기 힘들 것이다. 좀더 쉽게 파일명을 만들어보자.

    CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log.%m%d-%H%M%S 86400" common
    또는
    CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log.%m%d 86400" common

    이제는 'access_log.월일-시분초' 또는 'access_log.월일' 형태로 생성될 것이다.

    CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log.%m%d-%H%M%S 100M" common

    100M 단위로 로그를 저장할 수도 있다.

    2) cronolog 툴로 개선된 형태로 log rotation하기

    cronolog는 년월일에 따라 다른 디렉토리에 로그를 남길 수도 있다.
    또한 webalizer 같은 웹로그 분석툴은 access_log 와 같이 지정한 파일을 분석하는데,
    access_log.년월일' 처럼 로그 파일이 매번 바뀐다면 로그파일 지정하는게 쉽지않다.
    cronolog 는 심볼릭 링크를 통해 이를 쉽게 해결해주고 있다.

    http://www.cronolog.org/ 에서 cronolog-x.y.z.tar.gz 을 받아

    ./configure
    make
    make install

    을 한다.

    사용은 rotatelogs와 비슷하다.

     (1) 년월 단위로 로테이션한다.

     CustomLog "|/usr/local/sbin/cronolog /usr/local/apache/logs/access_log.%Y%m" common

     년월로 나눠서 'access_log.년월'형식으로 저장을 한다.

     /usr/local/apache/logs/access_log.200307
     /usr/local/apache/logs/access_log.200308

     (2) 다음과 같이 년월에 따라 다른 디렉토리에 로그를 나눌 수도 있다.

     CustomLog "|/usr/local/sbin/cronolog /usr/local/apache/logs/%Y/%m/access_log.%Y%m%d" common

     /usr/local/apache/logs/2003/07/access_log.20030701
     /usr/local/apache/logs/2003/07/access_log.20030702
     /usr/local/apache/logs/2003/07/access_log.20030703
     ...
     /usr/local/apache/logs/2003/08/access_log.20030801

     (3) 로그파일을 access_log로 심볼릭 링크해보자

     CustomLog "|/usr/local/sbin/cronolog --symlink=/usr/local/apache/logs/access_log
     /usr/local/apache/logs/access_log.%Y%m" common

     /usr/local/apache/logs/access_log -> /usr/local/apache/logs/access_log.200308
     /usr/local/apache/logs/access_log.200307
     /usr/local/apache/logs/access_log.200308

    3) images 로그와 warm 로그는 별도로 저장

    웹서버 튜닝 중에 이미지 파일만 별도의 웹서버로 분리하는 방법이 있다.
    이 방법은 Request와 I/O 출력, 트래픽을 분산하는 효과가 있을 것이다.

    이런 튜닝 방법과는 다르지만 images 로그만 별개로 파일로 저장하는 방법을 소개한다.
    다음은 이미지 파일은 images_log에, Codered나 Nimda 등의 warm은 warm_log 에 저장하는 설정이다.

    ---------------------------------
    SetEnvIf Request_URI "\.gif$"      except=images
    SetEnvIf Request_URI "\.jpe?g$"     except=images
    SetEnvIf Request_URI "\.png$"      except=images
    SetEnvIf Request_URI "^/default\.ida"  except=warm   # Codered
    SetEnvIf Request_URI "/root\.exe?"   except=warm   # Nimda
    SetEnvIf Request_URI "/cmd\.exe?"    except=warm
    SetEnvIf Request_URI "^/NULL\.printer" except=warm   #
    SetEnvIf Request_URI "^/NULL\.IDA?"   except=warm
    SetEnvIf Request_URI "^/NULL\.ida?"   except=warm
    SetEnvIf Request_URI "^/NULL\.idq?"   except=warm

    SetEnvIf except   images  images
    SetEnvIf except   warm   warm

    CustomLog logs/access_log common env=!except
    CustomLog logs/images_log common env=images
    CustomLog logs/warm_log  common env=warm
    ---------------------------------
     
    URI 중에 .gif, .jpg, .jpeg, .png 로 끝나는 것은 except 변수에 images값으로 정의하고,
    /default.ida, /root.exe?, /cmd.exe?, /NULL.printer, /NULL.IDA?, /NULL.ida? /NULL.idq?
    등은 윈도의 IIS의 취약점을 이용한 웜 공격으로 except 변수에 warm 값으로 정의한다.
     
    그리고 또한번 변수 except의 값이 images 인 것은 변수 images로 정의
    변수 except의 값이 images 인 것은 변수 warm으로 정의
     
    CustomLog 설정을 보면
    env=!except 에 의해 image와 warm로그(except변수로 정의)를 제외한(=!) 것만 access_log
    에 저장하게 된다.
    마찬가지로 env=images, env=warm에 따라 각각 images_log, warm_log에 저장하게 된다.
     
     
    cronolog 와 함께 쓸 때는 다음과 같이
     
    CustomLog "|/usr/local/sbin/cronolog --symlink=/usr/local/apache/logs/access_log
    /usr/local/apache/logs/access_log.%Y%m" common env=!except
    CustomLog "|/usr/local/sbin/cronolog /usr/local/apache/logs/images_log.%Y%m" common env=images
    CustomLog "|/usr/local/sbin/cronolog /usr/local/apache/logs/warm_log.%Y%m"  common env=warm
    posted by 좋은느낌/원철
    2009. 6. 11. 17:46 개발/Linux 계열

    디렉토리 인덱싱

     

    가. 디렉토리 인덱싱은 index.html, index.asp 등과 같이 웹 서버에서 인덱스 파일로 지정한 파일이 디렉토리에 존재하지 않을경우,

         해당 디렉토리의 하위 디렉토리와 파일의 목록을 열람할 수 있도록 하는 기능이다.

     

    나. 인덱싱 기능이 확성화 되어 있을 경우 웹 브라우져 상에 웹 컨텐츠 디렉토리 내용이 그대로 공개되어, 공격자가 특정 디렉토리에

         존재하는 파일의 목록 정보를 획득할 수 있으며 이를 다운로드 받을수 있다.

     

    옆에 보는거와 같이

    웹주소 URL 다음에

    디렉토리 리스팅으로

    입력하였을 시

    Index of /jsp

    하고 해당 폴더들이 존재한다.

     

    이런경우, 보안에 문제가 생기게된다.

     

    말그대로 해킹해가세요..ㅋㅋ

     

     

     

     

     

     

     

     

     

    다. 또한 운영 환경에 임시적으로 생성해떤 파일 또는 백업을 목적으로 생성한 파일, 웹 서버 또는 웹 어플리케이션을 설치할 때

         테스트 목적의 파일들이 존재할 수 있다. 이러한 파일들이 노출되어 공격자가 다운 받을 경우 환겨설정, 웹 어플리케이션의 소스가

         노출되거나 데이터베이스 정보가 노출될 수 있다.

     

    라. 점검방법

         1) 해당 웹 페이지의 URL에 디렉토리 경로를 직접 입력하여 디렉토리 내용이 보이는지 점검한다.

             http://www.test.com/admin

             http://www.test.com/manager

         2) 웹 어플리케이션 설치 디렉토리 및 웹 디렉토리 이하에서 .bak, .old, .tmp 등의 서비스 제공에 불필요한 파일이나

             임시/백업 파일들이 있는지 검색한다.

         3) 웹 서버나 웹 어플리케이션 서버 설치 시 자동 생성되는 파일 (예, tomcat-docs, 샘플)등 외부에 정보를 노출할 수 있는

             디렉토리나 파일이 존재하는지 검색한다.

     

    마. 시정방법

         1) 웹 서버 혹은 웹 어플리케이션 서버에서 디렉토리 인덱싱 기능을 비활성화 시킨다.

            [tomcat의 예제]

            <!--web.xml-->

               <init-param>

                    <param-name>listings</param-name>

                    <param-value>false</param-value>

               </init-param>

            [apache의 예제]

            <!--httpd.conf-->

    <Directory "/usr/local/apache/htdocs"> 
    # 
    # 
    # This may also be "None", "All", or any combination of "Indexes", 
    # "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews". 
    # 
    # Note that "MultiViews" must be named *explicitly* --- "Options All" 
    # doesn't give it to you. 
    #

    수전전    Options Indexes FollowSymLinks MultiViews

    수정후    Options FollowSymLinks MultiViews 

    # 
    # This controls which options the .htaccess files in directories can 
    # override. Can also be "All", or any combination of "Options", "FileInfo", 
    # "AuthConfig", and "Limit"

    </Directory>

         2) 웹 소스가 위치한 웹 디렉토리에서 임시/백업 파일 및 설치 파일의 존재여부를 조사하여 이를 삭제한다.

         3) 웹 서버나 웹 어플리케이션 서버 설치시 자동 생성되는 파일 중 외부에 정보를 노출할 수 있는 메뉴얼 파일, 샘플등을 조사하여

             이를 삭제한다.

     

    [Tomcat 설정 상태]

     

    [APACHE 설정 상태]

     

    설정 완료 후 Tomcat 과 Apache를 재시작 하기 바란다.

    posted by 좋은느낌/원철
    2009. 6. 11. 17:45 개발/Linux 계열

    apache 공식 사이트 http://httpd.apache.org/ 에서 아파치 소스와 자료를 참고하실 수 있습니다. 
    modssl 공식 사이트 http://www.modssl.org/ 에서는 mod_ssl 소스와 자료를 참고하실 수 있습니다.

    apache 1.3.xx 은 ssl 모듈이 없는 버젼이라서 modssl 모듈을 apache 소스에 패치하는 것으로 설치를 진행하게 됩니다. 이와 같은 기본 구조에서 아래의 설치 과정을 참고 바랍니다. (레드헷 8.0 기반에서 설치 테스트 되었습니다.)

    ※ Apache 1.3.xx + mod_ssl 2.8.xx-1.3.xx 설치 순서

    1. openssl 모듈 설치
    2. 최신 apache 소스, mod_ssl 소스 얻기
    3. mod_ssl 모듈 apache 소스 삽입
    4. apache 설정단계(./configure)
    5. apache 컴파일(make)
    6. apache 테스트 인증서 설치(make certificate)
    7. apache 설치(make install)
    8. apache 설치 예시(Apache 1.3.31 + mod_ssl 2.8.19-1.3.31 )

    1. openssl 모듈 설치

    먼저 openssl 라이브러리가 설치되어 있어야 합니다. 
    openssl 설치 자료는 openssl 설치 가이드를 참고해 주시기 바랍니다.

    2. 최신 apache 소스, mod_ssl 소스 얻기

    apache 소스는 httpd.apache.org/download.cgi 에서 최신 버젼의 소스를 받을 수 있습니다. 

    mod_ssl 소스는 www.modssl.org/source/ 에서 최신 버젼의 소스를 확인합니다. [LATEST] 가 붙어있는 소스가 최신 소스입니다.

    mod_ssl-2.8.18-1.3.31.tar.gz [LATEST] 소스가 있을 경우에 이것은 mod_ssl-2.8.18 버젼이며, apache 1.3.31 버젼에 mod_ssl을 패치하는 소스임을 뜻합니다. 참고바랍니다.
    대부분의 경우에 apache가 먼저 업데이트되므로, mod_ssl에서 지원하는 최신 소스에 맞는 버젼의 apache 를 선택해 주시면 되겠습니다.

    3. mod_ssl 모듈 apache 소스 삽입

    최신 mod_ssl 소스와 그에 맞는 apache 소스를 다운받은 후에 압축을 풀고, 풀려진 mod_ssl 디렉토리에서 apache 소스 mod_ssl 패치를 진행합니다.
    --with-apache 옵션은 압축이 풀려진 아파치 소스 경로 /usr/local/src/apache_1.3.xx 를 설정합니다.
    --with-ssl 옵션의 디렉토리를 /usr/local/openssl 과 같이 openssl 설치시에 --openssldir 설정된 디렉토리를 지정해 줍니다.
    --prefix 옵션은 아파치 설치될 경로 /usr/local/apache-ssl 를 지정해 줍니다. 
    ./configure \
    --with-apache=/usr/local/src/apache_1.3.xx \
    --with-ssl=/usr/local/openssl \
    --prefix=/usr/local/apache-ssl
    

    4. apache 설정단계(./configure)

    apache 소스 컴파일 설정전에 SSL 라이브러리 변수 옵션을 먼저 잡아줍니다.
    SSL_BASE=/usr/local/openssl
    export SSL_BASE
    LDFLAGS=-L/usr/local/openssl/lib
    export LDFLAGS
    CPPFLAGS=-I/usr/local/openssl/include
    export CPPFLAGS
    
    apache 소스 디렉토리로 이동을 합니다. apache 소스는 mod_ssl 패치가 되었으며, apache 컴파일 설정 진행합니다.
    apache 소스 설치에는 두가지 방식으로 모듈을 설치할 수 있습니다. statically linking module, DSO(Dynamic Shared Objects) module 모듈로 설치할 수 있습니다.
    정적설치와 동적설치에 대한 문서는 아파치 문서를 참고해 주시바랍니다.

    --prefix 옵션은 아파치 설치 디렉토리를 설정합니다. 
    --enable-module=ssl 옵션으로 ssl 모듈을 설치하는 것을 설정합니다. 
    1. statically linking module 로 mod_ssl 모듈 설치
    --disable-shared=ssl 옵션은 ssl 모듈을 정적으로 링크시키는 것을 지정합니다.
    그 밖의 모듈과 설정 옵션들을 더 추가하시고, 설정을 진행합니다. 
    ./configure \
    --prefix=/usr/local/apache-ssl \
    --enable-module=ssl \
    --disable-shared=ssl \
    ...
    

    2. DSO(Dynamic Shared Objects) module 로 mod_ssl 모듈 설치
    --enable-shared=ssl 옵션은 ssl 모듈을 동적으로 링크시키는 것을 지정합니다.
    그 밖의 모듈과 설정 옵션들을 더 추가하시고, 설정을 진행합니다. 
    ./configure \
    --prefix=/usr/local/apache-ssl \
    --enable-module=ssl \
    --enable-shared=ssl \
    ...
    

    5. apache 컴파일(make)

    컴파일을 진행합니다.
    make

    6. apache 테스트 인증서 설치(make certificate)

    apache 1.3.xx 는 설치시에 테스트 인증서 설치를 도와 줍니다. 테스트 인증서를 설치합니다. (파란색으로 표시된 것이 입력된 문자입니다.)
    이부분은 CSR 생성 가이드 문서를 참고하시면 좋습니다.
    make certificate TYPE=test
    ...
    STEP 0: Decide the signature algorithm used for certificate
    The generated X.509 CA certificate can contain either
    RSA or DSA based ingredients. Select the one you want to use.
    Signature Algorithm ((R)SA or (D)SA) [R]:R
    
    STEP 1: Generating RSA private key (1024 bit) [server.key] ...
    STEP 2: Generating X.509 certificate signing request [server.csr] ... 1. Country Name (2 letter code) [XY]:KR 2. State or Province Name (full name) [Snake Desert]:seoul 3. Locality Name (eg, city) [Snake Town]:seoul 4. Organization Name (eg, company) [Snake Oil, Ltd]:Dotname Korea 5. Organizational Unit Name (eg, section) [Webserver Team]:Digital Certificate Team 6. Common Name (eg, FQDN) [www.snakeoil.dom]:www.anycert.co.kr 7. Email Address (eg, name@FQDN) [www@snakeoil.dom]:(적당한 이메일 주소를 넣어주세요) 8. Certificate Validity (days) [365]:365
    STEP 3: Generating X.509 certificate signed by Snake Oil CA [server.crt] Certificate Version (1 or 3) [3]:3 ... STEP 4: Enrypting RSA private key with a pass phrase for security [server.key] The contents of the server.key file (the generated private key) has to be kept secret. So we strongly recommend you to encrypt the server.key file with a Triple-DES cipher and a Pass Phrase. Encrypt the private key now? [Y/n]: y writing RSA key Enter PEM pass phrase: (적당한 테스트 비밀번호) Verifying - Enter PEM pass phrase: (적당한 테스트 비밀번호) Fine, you're using an encrypted RSA private key. ...

    7. apache 설치(make install)

    apache 를 설치합니다.
    make install
    apache 컴파일 오브젝트들을 삭제합니다.
    make clean
    apache 컴파일 SSL 옵션 변수들을 해제합니다.
    unset SSL_BASE
    unset LDFLAGS
    unset CPPFLAGS

    8. apache 설치 예시(Apache 1.3.31 + mod_ssl 2.8.19-1.3.31 )

    (리눅스 레드헷 8.0 이상 기준 설치 예시입니다.)
    [root@web1 root]# cd /usr/local/src
    [root@web1 src]# wget http://www.modssl.org/source/mod_ssl-2.8.19-1.3.31.tar.gz
    [root@web1 src]# wget http://ftp.apache-kr.org/httpd/apache_1.3.31.tar.gz
    [root@web1 src]# tar zxf mod_ssl-2.8.19-1.3.31.tar.gz
    [root@web1 src]# tar zxf apache_1.3.31.tar.gz
    [root@web1 src]# cd mod_ssl-2.8.19-1.3.31
    [root@web1 mod_ssl-2.8.19-1.3.31]# ./configure \
    > --with-apache=/usr/local/src/apache_1.3.31 \
    > --with-ssl=/usr/local/openssl \
    > --prefix=/usr/local/apache-ssl
    ...
    [root@web1 mod_ssl-2.8.19-1.3.31]# cd /usr/local/src/apache_1.3.31
    [root@web1 apache_1.3.31]# SSL_BASE=/usr/local/openssl
    [root@web1 apache_1.3.31]# export SSL_BASE
    [root@web1 apache_1.3.31]# LDFLAGS=-L/usr/local/openssl/lib
    [root@web1 apache_1.3.31]# export LDFLAGS
    [root@web1 apache_1.3.31]# CPPFLAGS=-I/usr/local/openssl/include
    [root@web1 apache_1.3.31]# export CPPFLAGS
    [root@web1 apache_1.3.31]# ./configure \
    > --prefix=/usr/local/apache-ssl \
    > --enable-module=ssl \
    ...
    [root@web1 apache_1.3.31]# make
    [root@web1 apache_1.3.31]# make certificate TYPE=test
    ...
    [root@web1 apache_1.3.31]# make install
    [root@web1 apache_1.3.31]# make clean
    
    posted by 좋은느낌/원철
    2009. 6. 11. 17:44 개발/Linux 계열

    톰켓 설치하기

     


    0.미리 설치해야할 것

    JAVA버전이 톰켓에서 지원하는 버전을 설치하여야한다. 보통 기본으로 설치된 자바는 버전이 낮으니 높은 버전의 JAVA를 설치해 보자.

     


    1. 톰켓 다운받기

    tomcat 을 http:/www.apache.org에서 다운 받는다. 이때 우리는 소스 버전과 바이너리 버전을 다운 받을 수 있다. 소스 버전의 경우 ant 등을 설치해서 컴파일해야한다. 바이너리 버전을 다운 받아서 압축을 푼다.


    2.압축풀기

     


    # gzip -dc jakarta-tomcat-5.0.19.tar.gz | tar xvf -

     


    3.톰켓 폴더 옮기기

     


    jakarta-tomcat-5.0.19 디렉토리가 하나 생겼다. 이 디렉토리를 통체로 옮긴다. 옮길 위치는 자신이 설치한 프로그램들이 모여있는곳이 적당하다. (ex: /usr/local/tomcat-5)


    bin 디렉토리에 있는 파일 중 톰켓을 실행 시키는 파일은 startup.sh

    중지 시키는 파일은 shutdown.sh 이다.

    4.톰켓 설정하기

    startup.sh를 수정하자. JAVA의 PATH를 적어넣으면 된다.

    [ns@/usr/local/httpd/tomcat.5/bin] # vi startup.sh

    # -----------------------------------------------------------------------------

    # Start Script for the CATALINA Server

    #

    # $Id: startup.sh,v 1.3 2002/08/04 18:19:43 patrickl Exp $

    # -----------------------------------------------------------------------------


    # ADD PATH

    JAVA_HOME=/usr/j2se

    export JAVA_HOME

    CATALINA_HOME=/usr/local/httpd/tomcat.5

    export CATALINA_HOME 
     


    위 부분을 추가해주자. (참고로 catalina.sh, shutdown.sh도 위와 마찬가지로 수정해주자.)

     


    다시 실행시켜본다.

    [ns@/usr/local/httpd/tomcat/bin] # ./startup.sh

    Using CATALINA_BASE:   /usr/local/httpd/tomcat.5

    Using CATALINA_HOME:   /usr/local/httpd/tomcat.5

    Using CATALINA_TMPDIR: /usr/local/httpd/tomcat.5/temp

    Using JAVA_HOME:       /usr/j2se

     


    인터넷 브라우저를 켜서 한번 확인해본다.

     


    http://homeaddress:8080

     


    ***********************************************
    ***********************************************


    ***********************************************
    ***********************************************

    jakarta-tomcat-connectors 톰켓과 아파치 연동하기

     


    아파치와 톰켓은 8009포트로 통신이 가능하다 이를 이용해서 아파치와 톰켓을 연동하여 사용할 수있다.


    1.jakarta-tomcat-connectors 다운받기

    우선 jk connecter 을 다운 받자 소스로 다운 받아야한다. (참고로 jk가 아니라 jk2 이다.)

    아마 현재 릴리즈 되는 파일의 이름은 분명히 jakarta-tomcat-connectors-jk2-src-current.tar.gz 이것이다.


    2.압축을 푼다.

     


    #gzip -d  jakarta-tomcat-connectors-jk2-src-current.tar.gz

    #tar -xvf jakarta-tomcat-connectors-jk2-src-current.tar

     


    3.컴파일을 한다.

    jakarta-tomcat-connectors-jk2-2.0.4-src 라는 디렉토리가 생성된다.

    커넥터를 컴파일 하기 위해서 /jk/native2디렉토리로 이동한다. 
    # cd jakarta-tomcat-connectors-jk2-2.0.4-src/jk/native2/


    설치에 관한 환경 설정을 하는 buildconf.sh를 먼저 실행해 준다.

     


    # ./buildconf.sh

     


    이후 에러가 뜨지 않는다면 configure 를 실행한다.

     


    # ./configure --with-apxs2=/usr/local/httpd/apache/bin/apxs


    --with-apxs2 라는 옵션을 사용해서 아파치의 apxs 의 위치를 알려준다.

     


    이모든 과정을 끝난 이후. make를 한다. 참고로 make install 은 않된다.

     


    4.mod_jk2.so복사하기

    jakarta-tomcat-connectors-jk2-2.0.4-src/jk/build/jk2/apache2디렉토리로 이동


    mod_jk2,so파일을 아파치 모듈에 추가

     


    # cp mod_jk2.so /usr/local/httpd/apache/modules/


    5.workers2.properties 복사하기

    /usr/local/httpd/apache/conf 에 복사한다.

     


    mod_jk2.so 모듈은 workers2.properties 파일을 참고로 해서 어떻게 작동해야 할지 결정한다.

    6.톰켓설정하기

    톰켓의 conf폴더에는 jk2.properties파일을 수정한다.


    톰켓 5에는 coyote connector 가 기본적으로 설치되어 있다. coyote connector가 하는 역할은 mod_jk2 의 모듈에서 전달하는 정보를 수신 송신하는 역할을 한다. 이것을 설정하는 파일이 jk2.properties 파일이다.  [ns@/usr/local/httpd/tomcat.5/conf] # vi jk2.properties

    ## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED

    ## WHEN YOU EDIT THE FILE.


    ## COMMENTS WILL BE _LOST_


    ## DOCUMENTATION OF THE FORMAT IN JkMain javadoc.


    # Set the desired handler list

    # handler.list=apr,request,channelJni

    #

    # Override the default port for the socketChannel

    channelSocket.port=8009

    # Default:

    # channelUnix.file=${jkHome}/work/jk2.socket

    # Just to check if the the config  is working

    shm.file=/usr/local/httpd/apache/logs/jk2.shm


    # In order to enable jni use any channelJni directive

    # channelJni.disabled = 0

    # And one of the following directives:


    # apr.jniModeSo=/opt/apache2/modules/mod_jk2.so


    # If set to inprocess the mod_jk2 will Register natives itself

    # This will enable the starting of the Tomcat from mod_jk2

     

    apr.jniModeSo=inprocess 
     

     

     

    7.아파치 설정

    httpd.conf의 적절한 곳에 LoadModule jk2_module modules/mod_jk2.so 이 내용을 적는다.

     

     

    8.workers2.properties파일 수정

    톰켓과 아파치가 연동하는 부분을 설정하는 부분이다. 톰켓과 아파치는 8009번포트를 사용해 서로 통신하게 된다.

    [ns@/usr/local/httpd/apache/conf] # vi workers2.properties

    # Shared memory handling. Needs to be set.

    [shm]

    file=/usr/local/httpd/apache/logs/shm.file

    size=1048576


    # Example socket channel, explicitly set port and host.

    [channel.socket:localhost:8009]

    port=8009

    host=127.0.0.1


    # define the worker

    [ajp13:localhost:8009]

    channel=channel.socket:localhost:8009


    # Announce a \"status\" worker

    [status:status]


    # Uri mapping

    [uri:/jsp-examples/*]

    worker=ajp13:localhost:8009


    [uri:/servlets-examples/*] 
     

    worker=ajp13:localhost:8009


    [uri:/tomcat-docs/*]

    worker=ajp13:localhost:8009


    [uri:/*]

    worker=ajp13:localhost:8009


    [uri:/status/*]

    worker=status:status 
     


    설정한 후에 톰켓, 아파치를 다시 실행한다. 위의 것을 그대로 복사해서 만들어도 된다.

    (아마도 리부팅 후 실행하는 것이 좋을 듯하다.)

    그리고 http://homeaddress/ 를 입력해본다.

    http://homeaddress:8080/ 과 같은 화면이 뜬다면

    posted by 좋은느낌/원철