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

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 31

Notice

    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 좋은느낌/원철
    2009. 6. 11. 17:44 개발/Linux 계열

    아파치 톰켓 연동하기

     OS =  linux redhat 9.0
    아파치 버젼 : 1.3.31
    Tomcat 버젼 : 5.0.28
    Connectors  : jakarta-tomcat-connectors-jk2-2.0.4-src

    1. 아파치 설치
     가. tar -xvzf apache_1.3.31.tar.gz
     나. ./configure --prefix=/usr/local/apache --enable-rule=SHARED_CORE --enable-shared=max --enable-module=so
     다. make
     라. mkke install
     설치 완료

    2. connector 만들기(mod_jk2.so)
     가. tar xvzf jakarta-tomcat-connectors-jk2-src-current.tar.gz
     나. apr-0.9.4.tar.gz , apr-util-0.9.4.tar.gz 파일이 필요함
        참고 http://mirror.apache.or.kr/apr/apr-0.9.4.tar.gz
             http://mirror.apache.or.kr/apr/apr-util-0.9.4.tar.gz
        위 2개 파일을 받아 압축을 푼다.
     다. cd jakarta-tomcat-connectors-jk2-2.0.4-src/jk/native2/
     라. ./buildconf.sh 
     마. ./configure --with-apxs=/usr/local/apache/bin/apxs --with-apr=/경로/apr-0.9.4 --with-apr-util=/경로/apr-util-0.9.4
     바. make 
     사. cd jakarta-tomcat-connectors-jk2-2.0.4-src/jk/build/jk2/apache13 로 이동
     아. cp mod_jk2.so /usr/local/apache/libexec/mod_jk2.so
     자. chmod 755 /usr/local/apache/libexec/mod_jk2.so
     차. cp jakarta-tomcat-connectors-jk2-2.0.4-src/jk/conf/workers2.properties /usr/local/apache/conf 에 복사

    3. apahce 환경 설정
     가. /usr/local/apahce/conf/httpd.conf 수정
         # Apache Tomcat5 Connector
           LoadModule jk2_module         libexec/mod_jk2.so
           AddModule mod_jk2.c
           추가
     나. User nobody --> xxx 사용자로
         Group nobody --> xxx 그룹 사용자로 이걸 수정하는 이유는 기본적으로 apache는 nobody 유저로 나중에권한문제가
          생길수 있기때문에 변경한다. 보통 403 에러가 나타남.

     다. DocumentRoot "/usr/local/apache/htdocs" 는 jsp 파일이 놓일 위치다 변경가능 (tomcat의 context 위치와 같게 설정한다.)
         같이 변경
     
     라. 
     DirectoryIndex index.html index.jsp -> index.jsp 추가한다. 
     

     마. Options Indexes FollowSymLinks MultiViews 이부분을 주석으로 막는다.( http://www.xxx.com/ 이런경우 주석으로 처리하면 
           파일리스트 목록이  보이는 현상을 제거한다.

    4. /usr/local/apache/conf/workers2.properties 수정
       
     [logger]
     level=DEBUG

     [config:]
     file=${serverRoot}/conf/workers2.properties
     debug=0
     debugEnv=0

     [uriMap:]
     info=Maps the requests. Options: debug
     debug=0

     # Alternate file logger
     #[logger.file:0]
     #level=DEBUG
     #file=${serverRoot}/logs/jk2.log

     [shm:]
     info=Scoreboard. Required for reconfiguration and status with multiprocess servers
     file=${serverRoot}/logs/jk2.shm
     size=1000000
     debug=0
     disabled=0

     [workerEnv:]
     info=Global server options
     timing=1
     debug=0
     # Default Native Logger (apache2 or win32 )
     # can be overriden to a file logger, useful
     # when tracing win32 related issues
     #logger=logger.file:0

     [lb:lb]
     info=Default load balancer.
     debug=0

     [lb:lb_1]
     info=A second load balancer.
     debug=0
     [channel.socket:localhost:8009]

     info=Ajp13 forwarding over socket
     debug=0
     tomcatId=localhost:8009

     [channel.socket:localhost:8019]
     info=A second tomcat instance.
     debug=0
     tomcatId=localhost:8019
     lb_factor=1
     group=lb
     group=lb_1
     disabled=0

     [channel.un:/opt/33/work/jk2.socket]
     info=A second channel connecting to localhost:8019 via unix socket
     tomcatId=localhost:8019
     lb_factor=1
     debug=0

     [channel.jni:jni]
     info=The jni channel, used if tomcat is started inprocess

     [status:]
     info=Status worker, displays runtime informations

     [vm:]
     info=Parameters used to load a JVM in the server process
     #JVM=C:\jdk\jre\bin\hotspot\jvm.dll
     classpath=${TOMCAT_HOME}/bin/tomcat-jni.jar
     classpath=${TOMCAT_HOME}/server/lib/commons-logging.jar
     OPT=-Dtomcat.home=${TOMCAT_HOME}
     OPT=-Dcatalina.home=${TOMCAT_HOME}
     OPT=-Xmx128M
     #OPT=-Djava.compiler=NONE
     disabled=1

     [worker.jni:onStartup]
     info=Command to be executed by the VM on startup. This one will start tomcat.
     class=org/apache/jk/apr/TomcatStarter
        #ARG=start
     # For Tomcat 5 use the 'stard' for startup argument
        ARG=stard
     disabled=1
     stdout=${serverRoot}/logs/stdout.log
     stderr=${serverRoot}/logs/stderr.log

     [worker.jni:onShutdown]
     info=Command to be executed by the VM on shutdown. This one will stop tomcat.
     class=org/apache/jk/apr/TomcatStarter
     ARG=stop
     disabled=1

     [uri:/jkstatus/*]
     info=Display status information and checks the config file for changes.
     group=status:

     [uri:127.0.0.1:8003]
     info=Example virtual host. Make sure myVirtualHost is in /etc/hosts to test it
     alias=myVirtualHost:8003

     [uri:127.0.0.1:8003/ex]
     info=Example webapp in the virtual host. It'll go to lb_1 ( i.e. localhost:8019 )
     context=/ex
     group=lb_1


     [ajp13:localhost:8009]
     channel=channel.socket:localhost:8009

     [uri:/*.jsp]
     info=All jsp page  mapping


     [uri:localhost/*.jsp]
     info=All jsp page  mapping
     worker=ajp13:localhost:8009

     [uri:/servlet/*]
     info=All Servlet  page  mapping

     [uri:/*]

     위와 같이 설정했음.

    5. Tomcat5 설치
     가. tar -xvzf jakarta-tomcat-5.0.28.tar.gz  
        나. conf/server.xml 수정
       
          위 부분 주석처리

       
                   port="8009" minProcessors="5" maxProcessors="75"
                   enableLookups="true" redirectPort="8443" acceptCount="10"
                   debug="0" connectionTimeout="20000" useURIValidationHack="false"
                   protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" />
          위 부분 추가

        
                  위 부분 주석 해제

       
        위 부분 주석처리

          appBase="webapps" 를 -- >"/" 수정했음.
          unpackWARs="true" autoDeploy="true"
          xmlValidation="false" xmlNamespaceAware="false">
        
         
         위 부분 추가
     
     6. conf/jk2.properties  수정
        # Set the desired handler list
      handler.list=apr,request
     # handler.list=apr,request,channelJni
     #
     # Override the default port for the socketChannel
      channelSocket.port=8019
     # Default:
     # channelUnix.file=${jkHome}/work/jk2.socket
     # Just to check if the the config  is working
      shm.file=${jkHome}/work/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

      위 와같이 설정했음.

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

     

      httpd.conf 파일은 크게 세부분으로 나누어져 있다.

        Section 1: Global Environment  : 아파치 전체적인 영향이 미치는 설정
        Section 2: 'Main' server configuration : 주 서버에 대한 설정
        Section 3: Virtual Hosts : 가상 호스트에 대한 설정

      자, 그럼 이제부터 이 아파치웹서버의 모든 환경을 설정하는 아파치환경파일 httpd.conf파일의 설정방법에 대해서 상세히 알아보도록 하자.

     

     ### Section 1: Global Environment

      전제환경설정 파트로 Section 1에서 설정하는 것들은 아파치 웹서버에 
    전반적인 영향을 미친다.

    ServerType standalone

      서버의 구동방법으로는 standalone과 inetd방식이 있는데,  standalone 
    방식은 하나의 웹데몬(아파치서버)이 클라이언트의 접속을 모두 처리하는 
    방식으로 응답속도가 빠른 방법으로 주로 이방식을 사용한다. inetd 방식은 
    inetd라는 시스템의 /etc디렉토리 끝에 존재하는 inetd라는 슈퍼데몬이 
    클라이언트의 접속요구가 있을 때마다 웹서버를 구동하는 방식이다. 
    일반적으로 응답속도가 빠르고 효율적인 standalone으로 설정하여 사용한다.


    ServerRoot "/usr/local/apache"

      아파치서버의 홈디렉토리를 지정하며 절대경로로 지정한다. 이후로 나오는 
    대부분의 패스들은 이 경로에 대한 상대경로로 지정이 된다. 예를 들어 
    환경설정파일, 에러로그파일등의 상대경로의 기준이 되는 위치이다.


    LockFile logs/accept.lock

      아파치 컴파일시 USE_FCNTL_SERIALIZED_ACCEPT나 
    USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때 사용되는 
    LockFile의 경로지정시에 사용된다. 가급적 기본값으로 사용한다.


    PidFile logs/httpd.pid

      PidFile 설정은 ServerType을 Standalone으로 설정했을때만 유효한 
    것으로 아파치 서버의 프로세스가 생성되어 있을 때 그 프로세서ID(PID)를 
    기록하는 파일을 지정한다.  당연히 아파치서버가 재시작되거나 과부하로 
    인해 PID가 바뀌게 될 경우에는 이 파일의 PID값도 바뀌게 된다.  즉 
    다시말해서 여기서 지정된 파일(httpd.pid)에 실행되고 있는 아파치서버의 
    프로세스번호(PID)값이 기록된다고 하면 정답이다. ServerRoot를 기준으로한 
    상대경로로 지정된다.  절대경로로 지정하려면 "/"로 시작하는 절대경로를 
    적어주면 된다.

     


    ResourceConfig conf/srm.conf 
    AccessConfig conf/access.conf

      아파치 서버의 환경설정파일은 3개이au httpd.conf, srm.conf, access.conf 
    가 그것이다. 그러나 하나의 설정파일로 하는 것이 효율적이기 때문에 
    지금은 httpd.conf파일안에 3개의 파트(Section)로 나누어서 하나의 
    파일안에서 설정을 하고 있다. srm.conf와 access.conf파일의 내용은 현재 
    비어있는 상태이지만, 필요하다면 이 파일 내에도 설정을 할 수 있다. 
    아파치 서버가 실행이 될 때는 httpd.conf, srm.conf, access.conf 순으로 
    언제나 이 3개의 파일을 모두 읽고 난뒤에 실행이 되기 때문이다. 만약 이 
    두 개의 파일을 서버가 무시하도록 하려면 다음과 같이 하거나 "#"으로 붙여 
    두면 주석처리되어 무시된다.

    ResourceConfig /dev/null
    AccessConfig /dev/null


    Timeout 300

      클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와 
    서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 
    초단위로 설정한다. 초기값은 1200이며 보통은 300초로 지정을 한다. 
    네트웍의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋다.

    KeepAlive On

      접속한 채로 특별한 요청없이 지속적인 연결을 허용할 것인지를 설정한다. 
    허용하지 않으려면 off

    MaxKeepAliveRequests 100

      클라이언트가 접속된 시간동안 아파치서버에 요청할 수 있는 최대의 
    개수를 지정한다. 0을 지정하면 제한없음을 의미하며, 서버의 성능향상을 
    위하여 가능한 높은 값이 좋다.
     
    KeepAliveTimeout 15

      아파치 서버는 같은 접속상태의 클라이언트에서 여기서 지정한 초만큼의 
    요청이 없었을 때 접속을 끊게 된다.

    MinSpareServers 5
    MaxSpareServers 10

      아파치 웹서버는 성능향상과 빠른 응답속도를 위해 유휴서버(현재 
    서비스대기 중인 프로세스)를 만들게 되는데 이 유휴서버의 개수는 시스템의 
    상황에 따라 달라지게 된다. 유휴서버가 MinSpareServers의 개수(5) 보다 
    적게되면 추가로 생성을 하게 되며 MaxSpareServers의 개수(10)보다 많게 
    되면 죽이게 된다. 즉, 유휴서버의 개수를 적절히 조절하기 위한 것이라 
    생각하면 된다.


    StartServers 5  

      아파치 웹데몬이 구동될 때 자식프로세스를 몇 개로 할 것인가를 
    지정한다. 시작할 때 동시에 띄우게 될 웹데몬의 개수이다. 그러나 웹데몬이 
    구동되고 난 뒤엔 시스템의 상황(부하율등)에 따라 대부분 합리적인 
    개수만큼 동적으로 생성되었다가 죽기도 하므로 큰 의미를 가지는 것은 
    아니다.

    MaxClients 150

      아파치웹서버에 접근할 수 있는 클라이언트의 최대갯수는 이 상한값으로 
    제한한다. 여기서 지정한 개수이상의 클라이언트의 요청이 생긴다면 
    아파치는 응답하지 않고 이 요청을 무시한다.  이를 제한하는 이유는 
    시스템의 자원을 아파치 웹서버가 무한정 차지하는 것을 방지하기 위한 
    것이다.

    MaxRequestsPerChild 30

      아파치 웹서버의 자식프로세스들이 클라이언트의 요청 개수를 지정한다. 
    만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 이 
    자식프로세스는 자동으로 죽게된다. 이 값이 0으로 설정이 된다면 
    자식프로세스가 자동으로 죽는일은 없을 것이다. 그러나 0아닌 다른 값으로 
    설정함으로서 프로세스의 수를 적절히 조절하여 시스템의 부하조절과 
    자원낭비를 어느정도 방지 할 수 있다.

    Listen 3000
    Listen 12.34.56.78:80

      시스템의 기본값이외에 다른 IP Address와 포트에 대해서도 연결할 수 
    있도록 해 준다. 환경설정파일(httpd.conf) 맨뒤에 나오는 가상호스트(Virtual 
    Host)부분에서 설정되는 가상호스트를 설정하기 위해 필요하다.


    BindAddress *

      서버가 응답할 수 있는 IP Address를 설정하는 것이다. 하나의 시스템에 
    있는 아파치웹서버 하나로 여러 웹서버처럼 관리하는 웹호스팅서비스등에서 
    많이 이용하는 것으로 여러 IP Address를 인식할 수 있게 한다. "*"으로 
    설정이 되었다면 모든  IP Address에 대해 응답할 수 있으며, IP Address를 
    지정한다면 지정한 IP Address에 대해서만 응답할 수 있게 된다.  여러개의 
    IP Address를 ISP로부터 할당받아서 웹호스팅서비스를 하고자 한다면 
    이부분에서 지정해 주면된다. 이 설정파일의 맨 뒷부분에 나오는 
    <VirtualHost>~</VirtualHost>부분의 IP bind 가상호스트부분에서 아파치 
    웹서버가 응답할 수 있도록 하려면 여기서 IP Address를 지정해 줘야 한다.

    ExtendedStatus On

      server-status로 아파치웹서버의 상태를 상태를 모니터링 할 때 
    "자세한상태정보"기능을 제공할 것인지(On) 아닌지(Off)를 설정하는 것이다.

    ### Section 2: 'Main' server configuration

      Section 2에서 설정하는 항목들은 아파치의 주된서버가 사용할 값들을 
    지정한다. <VirtualHost>에 정의된 가상호스트들에서 지정하지 않는 것은 
    여기서 지정된 값이 기본값으로 적용된다. 또한 여기서 지정하는 값을 각 
    <VirtualHost>내에도 지정할 수 있으며 이경우엔 각<VirtualHost>내에서 
    지정한 값이 우선적용된다.

    Port 80

      아파치웹서버의 기본포트를 지정한다. 특별하게 사용하는 것이 아니라면 
    80번으로 해둬야 한다. 사용가능한 포트는 0 ~ 65535이며 1024이하의 
    포트번호는 시스템에서 특별하게 예약되어 있으므로 80번 이외의 다른 
    포트를 사용하려면 1024이상의 포트번호를 지정해서 사용해야 할 것이다. 
    특별한 지정이 없다면 <VirtualHost>에 정의된 각각의 가상호스트들의 
    기본포트가 된다. 만약 <VirtualHost> 내에서 Port가 지정이 된다면 그 
    포트번호가 우선한다.

    (특별히 PORT를 따로 지정해 줄 필요가 있을 때는 따로 지정해 주며, 
    이때는 웹서버로 접근할 때 반드시 따로지정한 PORT번호로 접근해야 한다. 
    예를들어 Port 1234로 지정했다면, 접근시 : http://www.domain.co.kr:1234 
    로 접속해야한다. 단, 80번은 default이므로 Port번호를 입력하지 않아도 
    도메인만으로 그냥 접근할 수 있다. 예: http://www.domain.co.kr )

    User nobody 
    Group nobody

      아파치 웹데몬이 요청을 받았을 때 여기서 지정한 user와 group으로 
    응답을 하게된다. 이 설정은 ServerType이 Standalone방식이며, 아파치의 
    실행이 root권한으로 실행이 되었을 때 유효한 것이다. 많은 
    웹서버관리자들이 nobody로 설정을 해 두고 있으며, 만약 시스템에 nobody 
    user가 없다면 새로생성(useradd)을 해야 할 것이다. 단, root로 설정하는 
    것은 절대로 있어서는 안되며 nobody이외의 다른 시스템사용자 id로 지정을 
    한다면 정말 신중히 모든면(시스템 보안 및 자원사용등)에서 깊게 고려를 
    해봐야 한다.

    ServerAdmin webmaster@www.domain.co.kr

      여기서 지정하는 email address는 웹문서 로딩에러등의 문제에서 
    클라이언트측으로 보내질 메일주소값이다. 대부분 
    웹서버관리자의 email address로 설정을 한다.

    ServerName new.host.name

      클라이언트에게 보여주는 호스트이름을 지정한다. www를 쓰지않는 
    호스트에서 www를 쓰는 것처럼 보이게 할 수 있다. 예를 들어 
    bbs.manualand.co.kr을 www.manualand.co.kr로 지정해서 쓸 수 있다. 
    이곳에 IP Address를 적게 되면 클라이언트에는 Ip Address를 보여준다.

    DocumentRoot "/usr/local/apache/htdocs"

      아파치 웹서버의 웹문서가 있는 경로를 지정한다. 예를 들어 
    "http://www.manualand.co.kr/index.html"의 초기 문서라면 이 초기문서의 
    절대 경로는 여기서 지정된 "/usr/local/apache/htdocs/index.html"이 된다. 
    경로의 맨 마지막에 "/"를 추가해서는 안된다. Alias를 사용하여 다른 위치를 
    지정할 수도 있다.

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>      
                    

    <Directory>에서 지정되는 값에 대한 옵션은 다음과 같은 의미를 가지고 
    있다.
            None : 일단 모든허용을 하지 않는다.
            All : 모든허용을 한다.
            Indexes :
            Includes :
            FollowSymlinks :
            ExeCGI :
            MultiViews :


    UserDir public_html

      하나의 아파치 웹서버에서 여러 사용자의 홈페이지를 별도로 만들어 
    관리할 때 필요한 개별 가입자의 홈페이지 디렉토리이름이다. 예를 들어 
    sspark이란 계정가입자의홈페이지는 "http://manualand.co.kr/~sspark"라는 
    홈페이지를 가지고 있을 때 sspark의 계정에서 "public_html"이란 
    디렉토리가 홈디렉토리가 되어 이 디렉토리에 있는 초기문서 index.html을 
    불러서 보여주게 된다.

    <Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit
        Options MultiViews Indexes SymLinksIfOwnerMatch 
    IncludesNoExec
        <Limit GET POST OPTIONS PROPFIND>
            Order allow,deny
            Allow from all
        </Limit>
        <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY 
    MOVE LOCK UNLOCK>
            Order deny,allow
            Deny from all
        </Limit>
    </Directory>

    계정사용자의 홈페이지(public_html)의 접근에 대한 옵션을 지정한 것이다.


    DirectoryIndex index.html

      디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게될 문서의 순서를 
    지정해 준다. 즉, 디렉토리 이름만을 지정하더라도 여기서 지정한 
    index.html을 찾아서 웹브라우즈에 보여준다. 여러개의 파일을 지정할 수 
    있으며, 이런 경우에는 순서대로 찾아서 보여준다. 예를 들어 
    "DirectoryIndex index.html index.htm"로 지정했다면 먼저 "index.html"을 
    찾아서 있다면 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"을 
    찾아서 로딩해 준다.

    AccessFileName .htaccess

      디렉토리별로 접근제어할 정보(ID, Password)를 담고 있는 파일을 
    지정한다. 디렉토리별로 인증을 거쳐서 접근할 수 있는 설정을 하기위한 
    것이다. 예를 든다면 어떤 홈페이지의 전부나 혹은 일부에로 접근하려고 할 
    때 ID, Password를 묻는 창이 뜨면서 맞게 입력한 경우에만 접근허용하는 
    것이다.  보안상의 이유로 이 파일의 이름을 다른 이름으로 바꾸로 싶다면 
    ".htaccess"대신에 다름이름을 적어주면 된다.

    <Files ~ "^\.ht">
        Order allow,deny
        Deny from all
    </Files>

      바로위에서 설정한 파일(".htaccess")의 내용을 볼 수 없게 할 때 사용하는 
    옵션이다. 보안상의 이유로 이 옵션은 설정해 두는 것이 좋다. 만약 이 
    옵션을 주석처리해 둔다면 ".htaccess"파일에 대한 보안은 누구도 장담할 수 
    없을 것이다.


    UseCanonicalName On

     

    TypesConfig conf/mime.types

    웹서버의 mime type을 지정한 파일을 지정한다. mime.types파일은 서버에 
    의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

    DefaultType text/plain

    mime.types 파일에 정의 되어있지 않은 파일형식에 대한 요청을 받았을 때 
    알 수 없는 문서타입에 대하여 사용할 기본적인 mime 타입을 정해둔다.


    HostnameLookups Off

      웹서버의 로그(access_log)를 지정하는 Format에서 "DNS Lookup"으로 
    지정하였을 때, domain으로 남길 것인가, IP Address로 남길 것인가를 
    지정한다. Default로 Off는 IP Address로 남기는 것이며, Domain으로 변경할 
    필요가 없으므로 on으로 설정한 것보다는 속도가 조금빠르다.on으로 하게 
    되면 IP address를 IP Domain으로 변환해야 하므로 속도가 조금 느릴 수 
    있다.

    ErrorLog logs/error_log

      아파치 웹서버의 에러로그 기록파일을 지정한다.  참고할 사항은 맨 
    마지막에 설정하는 <VirtualHost>부분에서 각서버에 대한 에러파일을 
    지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게 
    되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.

    LogLevel warn

      바로위에서 설정한 에러로그 파일에 얼마나 자세하게 적을 것인지를 
    결정한다. 다음에 해당하는 순서대로 중요도가 정해진다. " debug → info → 
    notice → warn → error → crit → alert! → emerg "

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" 
    \"%{User-Agent}i\"" combind
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent

      바로 아래에서 사용할 CustomLog에서 사용할 몇가지 로그형식의 별명을 
    정한 곳이다.
    웹서버의 관리자나 서버관리자는 이 부분을 특히 유심히 봐둬야 한다. 
    웹서버의 로그를 어떤 식으로 남길 것인가를 결정하는 Format을 지정하는 
    곳이다. 원하는 정보를 지정해서 볼 수 있으므로, 관리자에게 필요한 
    Format으로 설정해야 하며, 또한 접속통계를 내기에 적당한 Format으로 
    설정해 둬야 한다.

    CustomLog logs/access_log common

      위에서 정한 로그형식(여기선 common)대로 로그를 남기게 된다. 
    맨마지막에서 지정하는 <VirtualHost>부분에서도 아파치 1.3.9버전 부터는 
    CustomLog를 가상호스트별로 지정할수 있도록 CustomLog를 제공한다. 
    <VirtualHost>에서 CustomLog를 지정하지 않으면 여기서 지정한 형식대로 
    로그를 남기게 되며 <VirtualHost>부분에서 CustomLog를 지정했을 
    경우에는 여기서 지정한 로그형식은 무시된다.

    #CustomLog logs/referer_log referer
    #CustomLog logs/agent_log agent
    #CustomLog logs/access_log combined

      위에서 지정한 4가지의 로그형식(combind, common, referer, agent)중에서 
    원하는 부분의 #(주석행)을 제거하면 지정된다.

    ServerSignature On

      서버가 생성하는 문서(error documents, FTP directory listings, 
    mod_status and mod_info output etc., but not CGI generated documents)의 
    trailing footer line의 설정을 가능하게 한다.

    Alias /icons/ "/usr/local/apache/icons/"

      필요한 만큼의 디렉토리 별칭을 만들어 쓸 수 있다. 사용하는 형식은 
    다음과 같다. 
    Alias fakename(가상이름) realname(진짜이름)

    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

      ScriptAlias는 서버스크립트를 포함한다. ScriptAlias는 실제디렉토리 안에 
    들어있는 문서를 서버에 의해 응용프로그램으로 취급되어 실행되는 것을 
    제외하고는 근본적으로 Aliases와 같다.

     
    IndexOptions FancyIndexing

      IndexOPtions는 디렉토리목록을 표시할 때 사용할 옵션을 지정한다. 
    Standard는 표준적인 디렉토리를 나타내며, FancyIndexing은 좀더 예쁜 
    디렉토리목록을 표시해 준다.

     

      아래에서 지정하는 AddIcon으로 시작하는 설정은 바로위에서 설정한 
    디렉토리인덱싱 옵션을 FancyIndexing으로 한 경우에 해당하며 디렉토리 
    목록을 표시할 때 각 파일 확장자에 따라서 어떤 아이콘을 선택하여 보여줄 
    것인지를 지정한다.

    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
    AddIconByType (TXT,/icons/text.gif) text/*
    AddIconByType (IMG,/icons/image2.gif) image/*
    AddIconByType (SND,/icons/sound2.gif) audio/*
    AddIconByType (VID,/icons/movie.gif) video/*

    AddIcon /icons/binary.gif .bin .exe
    AddIcon /icons/binhex.gif .hqx
    AddIcon /icons/tar.gif .tar
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
    AddIcon /icons/a.gif .ps .ai .eps
    AddIcon /icons/layout.gif .html .shtml .htm .pdf
    AddIcon /icons/text.gif .txt
    AddIcon /icons/c.gif .c
    AddIcon /icons/p.gif .pl .py
    AddIcon /icons/f.gif .for
    AddIcon /icons/dvi.gif .dvi
    AddIcon /icons/uuencoded.gif .uu
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
    AddIcon /icons/tex.gif .tex
    AddIcon /icons/bomb.gif core

    AddIcon /icons/back.gif ..
    AddIcon /icons/hand.right.gif README
    AddIcon /icons/folder.gif ^^DIRECTORY^^
    AddIcon /icons/blank.gif ^^BLANKICON^^


    DefaultIcon /icons/unknown.gif

      여기서 지정한 확장가가 아닌 경우에 여기서 지정한 기본아이콘으로 
    보여준다.

    AddDescription "GZIP compressed document" .gz
    AddDescription "tar archive" .tar
    AddDescription "GZIP compressed tar archive" .tgz

      AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을 
    표시할 때 사용한다. 이 설정은 IndexOptions가 FancyIndexing으로 
    설정되었을때만 표시되며, 설정형식은 다음과 같다.
    형식 : AddDescription "표시할 설명" 파일확장자

    ReadmeName README

      ReadmeName은 디렉토리목록표시 뒤에 붙여서 보여줄 README파일의 
    이름을 지정한다.(일종의 꼬릿말)

    HeaderName HEADER

      HeaderName은 디렉토리목록표시 앞에 붙여질 파일의 이름을 지정한다. 
    (일종의 머릿말)

    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

      디렉토리목록을 인덱싱할 때 제외할 파일명을 지정한다. 즉 디렉토리 
    목록에 포함하지 않을 파일을 지정한다. 쉘스타일의 와일드카드(*, ?)가 
    허용된다.

    AddEncoding x-compress Z
    AddEncoding x-gzip gz tgz

      AddEncoding은 특정브라우즈(Mosaic/X 2.1+)에서 받고있는 중에 정보에 
    대한 압축해제를 할 수 있도록한다. 단 모든 웹브라우즈에서 이 기능을 
    제공하는 것은 아니다.

    AddLanguage en .en
    AddLanguage fr .fr
    AddLanguage de .de
    AddLanguage da .da
    AddLanguage el .el
    AddLanguage it .it

      AddLanguage는 문서의 언어를 지정하게 한다.

    LanguagePriority en fr de

      언어의 우선순위를 내림차순으로 지정한다.

    AddType application/x-httpd-php3 .php3
    AddType application/x-httpd-php3-source .phps
    AddType application/x-tar .tgz

      AddType은 mime.types의 실제 편집없이도 mime을 설정할 수 있다.

    AddHandler cgi-script .cgi

      AddHandler는 파일확장자를 처리기(Handler)에 매핑(연결)시켜주게 된다.

    AddType text/html .shtml
    AddHandler server-parsed  .shtml

      SSI(Server Side Include)문서를 인식하게 하기위한 설정이다. SSI코드가 
    들어가 있는 문서는 확장자가 *.shtml이다. 시스템의 날짜와 카운터등 
    CGI프로그램을 하지 않아도 HTML문서에서 단 몇줄로 CGI의 효과를 낼 수 
    있는 SSI기능을 인식하게끔 하는 설정이다. "7장. 아파치와 SSI"편에서 자세히 
    설명되어 있다.


    #Format: Action media/type /cgi-script/location
    #Format: Action handler-name /cgi-script/location

      Action은 매칭되는 파일이 호출될때마다 스크립트를 실행시킬 수 있도록 
    미디어 타입을 정의한다.

    MetaDir .web

      MetaDir은 아파치가 찾을 메타정보파일들의 디렉토리이름을 지정한다. 이 
    파일들은 문서를 전송할 때 포함되는 HTTP 헤더정보가 포함되어 있다.

    MetaSuffix .meta

      MetaSuffix는 메타정보를 포함하고 있는 접미어의 이름을 지정한다.


    에러발생시 응답을 정의할 수 있는 방법을 3가지 나타내고 있다.

        1) 일반적인 텍스트

    ErrorDocument 500 "The server made a boo boo.

        2) 지역적인 방향전환

    ErrorDocument 404 /missing.html
    ErrorDocument 404 /cgi-bin/missing_handler.pl

        3) 외부 방향전환

    ErrorDocument 402 
    http://some.other_server.com/subscription_info.html


      다음의 BrowserMatch는 keepalives기능을 쓰지못하게 하며 HTTP 
    헤드방식을 설정한다.

    BrowserMatch "Mozilla/2" nokeepalive

      이 설정은 Netscape 2.x 또는 이를 따르는 브라우즈에 대하여 KeepAlive 
    기능을 쓰지 못하게한다.

    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 
    force-response-1.0

      이 설정은 잘못구현된 HTTP/1.1과 301또는 302반응에 대하여 
    KeepAlive를 적절히 제공하지 못하는 마이크로소프트 인터넷익스플로러 
    4.0b2d에 관한 것이다.

    BrowserMatch "RealPlayer 4\.0" force-response-1.0
    BrowserMatch "Java/1\.0" force-response-1.0
    BrowserMatch "JDK/1\.0" force-response-1.0

      위의 3가지 설정은 기본적인 1.1반응도 처리하지 못하며 HTTP/1.0 스팩을 
    제한하고 있는 브라우즈에 대하여 HTTP/1.1반응을 하지 못하게 한 것이다.

    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from www.manualand.co.kr
    </Location>

      서버의 상태를 점검할 수 있게하는 설정이다. 이는 
    "http://www.manualand.co.kr/server-status"와 같은 형식으로 서버의 상태를 
    점검할 수 있다. "6장. 아파치서버 모니터링"편에서 자세히 설명되어 있다. 
    여기서 지정한 "SetHandler server-status"의 설정으로 인해 서버 
    모니터링을 할 수 있는 것이다.

    <Location /server-info>
        SetHandler server-info
        Order deny,allow
        Deny from all
        Allow from www.manualand.co.kr
    </Location>

      이설정을 위해서는 mod_info.c가 적재되어야 하며, 이는 
    "http://www.manualand.co.kr/server-info"와 같은 방식으로 서버의 정보를 
    볼 수 있다. 위에서 설정한 server-status와 함께 실행중인 웹서버의 
    상태점검을 위한 것이다.

    <Location /cgi-bin/phf*>
        Deny from all
        ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
    </Location>

      아파치 1.1이전 버전의 오래된 버그에 대한 악용이 있을시에는 지정한곳 
    (http://phf.apache.org/phf_abuse_log.cgi) 으로 방향을 전환시킨다.


    <IfModule mod_proxy.c>
    ProxyRequests On

      아파치 웹서버를 Proxy서버로 사용할 때 on을 해줘야 한다. 즉   
    프락시서버 지시자로서 프락시서버를 on 시킨다.

    <Directory proxy:*>
        Order deny,allow
        Deny from all
        Allow from .your_domain.com
    </Directory>

    ProxyVia On

      HTTP/1.1 "Via:"헤드처리를 활성화시킬 것인지 비활성화 시킬것인지를 
    지정한다. Off, On, Full, Block중 하나가 올 수 있으며 Full은 서버버전을 
    포함하며, Block은 나가는 모든 것에 대해 Via:헤더를 제거한다.

    CacheRoot "/usr/local/apache/proxy"
    CacheSize 5
    CacheGcInterval 4
    CacheMaxExpire 24
    CacheLastModifiedFactor 0.1
    CacheDefaultExpire 1
    NoCache a_domain.com another_domain.edu joes.garage_sale.com

      이 설정은 캐시기능을 활성화 하기 위한 것이다.

    ### Section 3: 가상호스트 설정

      여러분의 시스템에서 여러개의 도메인이나 호스트네임을 설정하여 
    관리하고자 한다면 <VirtualHost>부분을 설정해 줘야 한다. 가상호스트에 
    대한 정보는 http://www.apache.org/docs/vhosts/를 참조해 보면 좀더 
    자세한 정보를 얻을 수 있다.  '-S'옵션을 사용함으로써 가상호스트의 설정에 
    대한 점검을 할 수 있다.  name-based 가상호스트를 사용하길 원한다면 
    적어도 한 개이상의 IP Address를 정의할 필요가 있다. "4-2절의 내용"과 
    "10장.웹호스팅 서비스를 위한 가상호스트"편에서 자세히 설명되어 있다.

    NameVirtualHost 12.34.56.78:80
    NameVirtualHost 12.34.56.78

    <VirtualHost www.manualand.co.kr>
        ServerAdmin webmaster@manualand.co.kr
        DocumentRoot /home/sspark/public_html
        ServerName www.manualand.co.kr
        ErrorLog /home/sspark/public_html/aw/error_log
        CustomLog /home/sspark/public_html/aw/access_log common
    </VirtualHost>

            ServerAdmin은 해당서버의 관리자 전자우편이며, 
            DocumemtRoot는 해당서버의 홈디렉토리이며, 
            ServerName은 해당서버의 도메인이며, 
            ErrorLog는 해당서버의 에러파일 위치이며
            CustomLog는 로그파일위치와 포맷을 지정한 것이다.

    <VirtualHost _default_:*>
    </VirtualHost>

      Default 가상호스트 설정으로 위에서 설정되지 않은 다른 모든 호스트에 
    대해서 응답을 하고자 할 경우설정해 준다

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

    httpd_2.0.55 with mod_ssl PHP 

    2006/05/18 11:21

    복사 http://blog.naver.com/jjy8476/70004318523

    ./apache_install 옵션 추가

    --enable-ssl \
    --with-ssl=/usr/share/ssl/lib (rpm으로 설치된경우)

     

     

     

    ./apache_install

    make

    make install

     

    아파치 설정파일을 수정한다. 
    #: cd /usr/local/apache 
    #: vi conf/httpd.conf

     

    Change the following line: 
     Group #-1 => Group nobody

     

    Default 시작페이지 설정을 수정해 줍니다
    Documentroot "/var/www/html"

    DirectoryIndex index.php index.php3  index.html index.htm

    Section 2의 단락에서 아래 내용을 추가합니다.
    ................................
    # And for PHP 4.x, use:
    AddType application/x-httpd-php .php .php3 .inc .ph .htm
    AddType application/x-httpd-php-source .phps
    .................................

    환경설정 수정후 저장을 합니다.
    $ /usr/local/apache/bin/httpd -t        엔터를 두드리고  다음과 같은 메시지만 있으면 아파치 환경이 잘 설정되었습니다.
    Syntax OK  

     

    아파치 서버를 시작한다.
    #: /usr/local/apache/bin/apachectl start

     

     

    SSL Key and Certificate 만든다. 
    (.key 생성)

    openssl genrsa -des3 1024 > /usr/local/apache/conf/localhost.key

     

    (.csr 생성)

    openssl req -new -key /usr/local/apache/conf/localhost.key > \ 
    /usr/local/apache/conf/localhost.csr

     

    (.crt 생성)

    openssl req -x509 -days 3650 -key \ 
    /usr/local/apache/conf/localhost.key \ 
    -in /usr/local/apache/conf/localhost.csr > \ 
    /usr/local/apache/conf/localhost.crt

     

    vi /usr/local/apache/conf/ssl.conf

    Find the following lines in the ssl.conf file: 
    DocumentRoot "/usr/local/apache/htdocs" 
    ServerName new.host.name:443 
    SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt 
    SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key

     

    Change the respective lines so that they are as follows: 
    DocumentRoot "/usr/local/apache/htdocs-secure" 
    ServerName localhost:443 
    SSLCertificateFile /usr/local/apache/conf/localhost.crt 
    SSLCertificateKeyFile /usr/local/apache/conf/localhost.key


    #: mkdir /usr/local/apache2/htdocs-secure

     

    Create a simple home page (e.g. Home, Secure Home) 
    #: vi /usr/local/apache/htdocs-secure/index.html 
    Save index.html and exit vi 
    #: chmod a+rx /usr/local/apache/htdocs-secure/ 
    #: chmod a+r /usr/local/apache/htdocs-secure/index.html

     

    Remove the encryption from the RSA private key 
    #: cd /usr/local/apache/conf 
    #: cp localhost.key server.key.org 
    #: /usr/local/ssl/bin/openssl rsa -in server.key.org -out localhost.key 
    #: chmod 400 localhost.key

     

    Test the Apache https server. 
    #: /usr/local/apache/bin/apachectl stop 
    #: /usr/local/apache/bin/apachectl startssl

     

     

     

     

    php install

    ./php_install

    [출처] httpd_2.0.55 with mod_ssl|작성자 지우맘

    posted by 좋은느낌/원철
    2009. 6. 10. 20:24 개발/Linux 계열

    아파치 웹서버를 운영하는데 있어서 기본이 HTML 서비스를 기본으로 하고 있다. PHP 기반에서 보통 APM을 설치한다. 그외에 자바 서버를 운영하기 위하여 Tomcat을 설치해서 서블릿과 jsp를 활용할 수 있다. 
    그리고 데이터 전송의 보안을 위하여 mod_ssl 기반의 https://를 활용해 보자 




    목차 

    1.PGCC 설치 
    2.MYSQL 설치 
    3.JDK 설치 
    4.Tomcat 설치 
    5.Imap 설치 
    6.GD 설치 
    7.apache 초기 작업 
    8.openssl 설치 
    9.mm 설치 
    10.mod_ssl 설치 
    11.apache & mod_gzip 
    12.SSL 인증서 수동으로 만들기 
    13.Apache+mod_ssl 을 자동시작 하려면 
    14.DSO PHP 설치 
    15.Zend Optimizer 설치 
    16.apache & tomcat 연동 mod_webapp.so 설치 
    17.최종 연동 테스트 
    18.후기 


    _______________________________________________________________________________ 


    1.PGCC 설치 

    [바이너리 화일 다운] 

    http://www.goof.com/pcg/binaries-linux.html 

    [설치] 

    - /usr/local/pgcc 경로로 설치 후 설치되 이름을 pgcc로 변경한다. 

    # 풀면서 특정 경로에 푼다. 
    [root@vm_master PGCC]# tar zxvfp pgcc-2.95.3-linux-x86-glibc2.1.tar.gz -C / 
    ./ 
    ./usr/ 
    ./usr/local/ 
    ./usr/local/pgcc/ 
    ./usr/local/pgcc/bin/ 
    ./usr/local/pgcc/bin/gcov 
    ./usr/local/pgcc/bin/cpp 
    ./usr/local/pgcc/bin/i686-pc-linux-gnu-gcc 
    ./usr/local/pgcc/bin/protoize 
    ./usr/local/pgcc/bin/unprotoize 
    - 중략 - 
    ./usr/local/pgcc/man/ 
    ./usr/local/pgcc/man/man1/ 
    ./usr/local/pgcc/man/man1/gcc.1 
    ./usr/local/pgcc/man/man1/cccp.1 

    # 이름 구별을 위하여 pgcc, pcpp로 변경한다. 
    [root@vm_master bin]# cd /usr/local/pgcc/bin/ 
    [root@vm_master bin]# ls 
    cpp gcc gcov i686-pc-linux-gnu-gcc protoize unprotoize 
    [root@vm_master bin]# mv gcc pgcc 
    [root@vm_master bin]# mv cpp pcpp 
    [root@vm_master bin]# ls 
    gcov i686-pc-linux-gnu-gcc pcpp pgcc protoize unprotoize 


    _______________________________________________________________________________ 

    2.MYSQL 설치 

    [소스 화일 다운] 

    http://www.mysql.com/downloads/mysql.html 

    [최적화 옵션] 

    http://www.mysql.com/doc/C/o/Compile_and_link_options.html 
    http://www.mysql.com/doc/c/o/configure_options.html 
    http://www.mysql.com/doc/M/y/MySQL_binaries.html 
    http://www.mysql.com/doc/W/h/Which_version.html 

    http://tunelinux.pe.kr/mysql/manual/10.txt 
    http://database.sarang.net/database/mysql/tuning/optimize_mysql.html 
    http://www.phpleader.co.kr/study/studycontent.php?study2_seq=47 

    [설치] 

    # 다음과 같은 내용의 스크립트를 작성해서 실행 시킨다. 

    [root@vm_master mysql-3.23.47]# vi pgcc_mysql.sh 
    #!/bin/bash 

    # 옵션 설정 시작 - 펜티엄 최적화 
    CC="/usr/local/pgcc/bin/pgcc" 
    CFLAGS="-O6 -mpentiumpro -mstack-align-double -fomit-frame-pointer -march=pentiumpro" 
    CXX="/usr/local/pgcc/bin/pgcc" 
    CXXFLAGS="-O6 -mpentiumpro -march=pentiumpro -mstack-align-double -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" 

    # 초기화 설정 - 디렉토리지정, 클라이언트,서버 정적 라이브러화" 
    # - 문자셑지정, 디버깅하지 않음, 트랜잭션사용" 
    ./configure --prefix=/usr/local/mysql --with-client-ldflags=-all-static 
    --with-mysqld-ldflags=-all-static --with-charset=euc_kr --without-debug 
    --enable-assembler --with-innodb 

    #PGCC를 mysql 세팅을 한다. 
    [root@vm_master mysql-3.23.47]# chmod +x pgcc_mysql.sh 
    [root@vm_master mysql-3.23.47]# ./pgcc_mysql.sh 
    - 생략 - 
    # 컴파일 
    make 

    # 설치 
    make install 

    # 데이터 베이스 설치 
    [root@vm_master support-files]#/usr/local/mysql/bin/mysql_install_db 

    # 설치 후에 시스템에 맞추어서 시스템 최적화 옵션 화일을 /etc/ 로 복사한다. 
    # 다음은 128메모리를 사용하는 경우이다. 
    [root@vm_master mysql-3.23.47]# cd support-files 
    [root@vm_master support-files]# cp my_medium.cnf /etc/my.cnf 
    # 512 M 이면 
    [root@vm_master support-files]# cp my-large.cnf /etc/my.cnf 
    # 1G이면 
    [root@vm_master support-files]# cp my-huge.cnf /etc/my.cnf 


    # mysql 계정 및 그룹 생성 및 퍼미션 권한을 변경해준다. 
    [root@vm_master support-files]# groupadd mysql 
    [root@vm_master support-files]# useradd -g mysql mysql 
    [root@vm_master support-files]# chown -R root /usr/local/mysql 
    [root@vm_master support-files]# chown -R mysql /usr/local/mysql/var 
    [root@vm_master support-files]# chgrp -R mysql /usr/local/mysql 


    # 라이브러들을 등록해준다. 
    [root@vm_master lib]# echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf 
    [root@vm_master lib]# ldconfig 

    #redhat인 경우 데몬 스크립트를 복사를 해준후 링크를 걸어 준다. 
    [root@vm_master support-files]# cd /etc/rc.d/init.d/ 
    [root@vm_master init.d]# vi mysqld 
    #!/bin/sh 

    PATH=/sbin:/usr/sbin:/bin:/usr/bin 
    basedir=/usr/local/mysql 
    bindir=/usr/local/mysql/bin 
    datadir=/usr/local/mysql/var 
    pid_file=/usr/local/mysql/var/mysqld.pid 
    log_file=/usr/local/mysql/var/mysqld.log 
    # Run mysqld as this user. 
    mysql_daemon_user=mysql 
    export PATH 

    mode=$1 

    if test -w / # determine if we should look at the root config file 
    then # or user config file 
    conf=/etc/my.cnf 
    else 
    conf=$HOME/.my.cnf # Using the users config file 
    fi 

    # The following code tries to get the variables safe_mysqld needs from the 
    # config file. This isn't perfect as this ignores groups, but it should 
    # work as the options doesn't conflict with anything else. 

    if test -f "$conf" # Extract those fields we need from config file. 
    then 
    if grep "^datadir" $conf >/dev/null 
    then 
    datadir=`grep "^datadir" $conf | cut -f 2 -d= | tr -d ' '` 
    fi 
    if grep "^user" $conf >/dev/null 
    then 
    mysql_daemon_user=`grep "^user" $conf | cut -f 2 -d= | tr -d ' ' | head -1` 
    fi 
    if grep "^pid-file" $conf >/dev/null 
    then 
    pid_file=`grep "^pid-file" $conf | cut -f 2 -d= | tr -d ' '` 
    else 
    if test -d "$datadir" 
    then 
    pid_file=$datadir/`hostname`.pid 
    fi 
    fi 
    if grep "^basedir" $conf >/dev/null 
    then 
    basedir=`grep "^basedir" $conf | cut -f 2 -d= | tr -d ' '` 
    bindir=$basedir/bin 
    fi 
    if grep "^bindir" $conf >/dev/null 
    then 
    bindir=`grep "^bindir" $conf | cut -f 2 -d= | tr -d ' '` 
    fi 
    if grep "^log[ t]*=" $conf >/dev/null 
    then 
    log_file=`grep "log[ t]*=" $conf | cut -f 2 -d= | tr -d ' '` 
    fi 
    fi 


    # Safeguard (relative paths, core dumps..) 
    cd $basedir 

    case "$mode" in 
    'start') 
    # Start daemon 

    if test -x $bindir/safe_mysqld 
    then 
    # Give extra arguments to mysqld with the my.cnf file. This script may 
    # be overwritten at next upgrade. 
    $bindir/safe_mysqld 
    --log-update=update.log -O max_connections=500 -O max_connect_error=999999999 
    --user=$mysql_daemon_user --datadir=$datadir --pid-file=$pid_file --log=$log_file & 
    else 
    echo "Can't execute $bindir/safe_mysqld" 
    fi 
    ;; 

    'stop') 
    # Stop daemon. We use a signal here to avoid having to know the 
    # root password. 
    if test -f "$pid_file" 
    then 
    mysqld_pid=`cat $pid_file` 
    echo "Killing mysqld with pid $mysqld_pid" 
    kill $mysqld_pid 
    # mysqld should remove the pid_file when it exits, so wait for it. 

    sleep 1 
    while [ -s $pid_file -a "$flags" != aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ] 
    do [ -z "$flags" ] && echo "Wait for mysqld to exitc" || echo ".c" 
    flags=a$flags 
    sleep 1 
    done 
    if [ -s $pid_file ] 
    then echo " gave up waiting!" 
    elif [ -n "$flags" ] 
    then echo " done" 
    fi 
    else 
    echo "No mysqld pid file found. Looked for $pid_file." 
    fi 
    ;; 

    *) 
    # usage 
    echo "usage: $0 start|stop" 
    exit 1 
    ;; 
    esac 


    [root@vm_master init.d]# chmod +x mysqld 

    # 리부팅후 자동으로 시작하세 초기화 스크립트에 링크를 걸어 준다. 
    [root@vm_master init.d]# cd /etc/rc3.d/ 
    [root@vm_master rc3.d]# ln -s ../init.d/mysqld S98mysqld 
    [root@vm_master rc3.d]# cd /etc/rc5.d/ 
    [root@vm_master rc5.d]# ln -s ../init.d/mysqld S98mysqld 

    #데이터 베이스를 시작한다. 
    [root@vm_master init.d]# ./mysqld start 
    [root@vm_master init.d]# Starting mysqld daemon with databases from 
    /usr/local/mysql/var 

    #프로세스를 확인해서 제대로 프로세스가 뜨는지 확인 한다. 
    [root@vm_master init.d]# pstree | grep mysql 
    |-safe_mysqld---mysqld---mysqld---mysqld 

    # 루트 패스워드를 넣는다. 
    [root@vm_master /bin]# mysqladmin -u root password '패스워드' 

    [[ 패스워드 분실시 ]] 

    [root@vm_master /bin]# killall mysqld 
    [root@vm_master /bin]# ./safe_mysqld --skip-grant & 
    [root@vm_master support-files]# mysql 
    mysql> UPDATE user SET Password=PASSWORD('패스워드') WHERE user='root'; 
    mysql> FLUSH PRIVILEGES; 

    _______________________________________________________________________________ 

    3.JDK 설치 


    [프로그램 다운로드] 

    http://java.sun.com/j2se/1.3/download-linux.html 

    [설치] 

    # 리눅스용 화일을 받아서 풀고 디렉토리를 옮긴다. 
    [root@vm_master AJS]# ls -al j2sdk-1_3_1_02-linux-i386.bin 
    -rw-rw-r-- 1 root root 26311391 Jan 7 2002 j2sdk-1_3_1_02-linux-i386.bin 
    [root@vm_master AJS]# chmod +x j2sdk-1_3_1_02-linux-i386.bin 
    [root@vm_master AJS]# ./j2sdk-1_3_1_02-linux-i386.bin 
    - 중 략 - 
    [root@vm_master AJS]# mv jdk1.3.1_02/ /usr/local/jdk 



    # 전체 환경에 자바와 톰켓를 사용할 수 있게 설정을 한다. 
    [root@vm_master root]# vi /etc/profile 
    #JDK & Tomcat Setting 
    export JAVA_HOME="/usr/local/jdk" 
    export CLASSPATH=".:$JAVA_HOME/lib/tools.jar:/usr/local/jakarta-tomcat/lib/servlet.jar:$JAVA_HOME/jre/lib/rt.jar" 
    export PATH="$PATH:$JAVA_HOME/bin" 

    # 새로 로긴후 java 라고 쳐서 테스트 한다. 


    [문제해결] 

    # 다음과 같은 에러는 아래의 패키지를 설치한다. 
    [root@vm_master AJS]# java 
    /usr/local/jdk/bin/i386/native_threads/java: error while loading shared libraries: 
    libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory 

    # CD-ROM 마운트후 다음 패키지를 설치 한다. 
    [root@vm_master AJS]# cd /mnt/cdrom/RedHat/RPMS/ 
    [root@vm_master RPMS]# ls com* 
    compat-libstdc++-6.2-2.9.0.16.i386.rpm 
    [root@vm_master RPMS]# rpm -ivh compat-libstdc++-6.2-2.9.0.16.i386.rpm 
    Preparing... ########################################### [100%] 
    1:compat-libstdc++ ########################################### [100%] 


    # Jaf & JavaMail 설치 

    [다운로드] 
    JavaBeans Activation Framework : http://java.sun.com/beans/glasgow/jaf.html 
    JavaMail : http://java.sun.com/products/javamail/index.html 

    [참고 자료] 
    http://www.javastudy.co.kr/docs/lec_java/javamail/javamail.html 

    [설치] 

    # 압축을 풀고 디렉토리 이름을 바꾼다. 

    [root@vm_master AJS]# cp jaf1_0_1.zip /usr/local/ 
    [root@vm_master AJS]# cp javamail-1_2.zip /usr/local/ 
    [root@vm_master local]# cd /usr/local/ 
    [root@vm_master local]# unzip jaf1_0_1.zip 
    [root@vm_master local]# unzip javamail-1_2.zip 
    [root@vm_master local]# mv jaf-1.0.1/ jaf/ 
    [root@vm_master local]# mv javamail-1.2/ javamail/ 

    # /etc/profile 에 다음을 추가 한다. 
    [root@vm_master root]# vi /etc/profile 
    # jaf & javamail Setting 
    export CLASSPATH="$CLASSPATH:/usr/local/javamail/mail.jar:/usr/local/jaf/activation.jar" 


    _______________________________________________________________________________ 

    4.Tomcat 설치 

    [바이너리 다운로드] 
    http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.1/bin/ 

    # 아파치와 연동하기 위하여 webapp_modules를 받어 놓는다. 
    http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.1/bin/linux/i386/ 


    [설치] 

    # 화일을 풀고 이름을 바꾼다. 
    [root@vm_master AJS]# tar zxvfp jakarta-tomcat-4.0.1.tar.gz -C /usr/local 
    [root@vm_master AJS]# cd /usr/local/ 
    [root@vm_master local]# mv jakarta-tomcat-4.0.1/ jakarta-tomcat/ 

    _______________________________________________________________________________ 

    5.Imap 설치 

    [소스 다운로드] 
    http://www.planetmirror.com/pub/imap/ 

    [설치] 

    # 패키지 확인 후 없으면 컴파일, 설치하고 필요 라이브러리를 카피한다. 
    [root@vm_master AJS]# rpm -qa | grep imap 
    [root@vm_master AJS]# tar zxvf imap.tar.Z 

    # 디렉토리를 /usr/local/imap으로 이동 시킨다. 
    [root@vm_master AJS]# mv imap-2001a/ /usr/local/imap 
    [root@vm_master AJS]# cd /usr/local/imap 
    [root@vm_master imap]# make slx 
    [root@vm_master imap]# cp ipopd/ipop[23]d /usr/sbin/ 
    [root@vm_master imap]# cp imapd/imapd /usr/sbin/ 

    # 아파치가 imap을 인식하도록 
    [root@vm_master imap]# cp ./c-client/c-client.a /usr/lib/libc-client.a 
    [root@vm_master imap]# cp ./c-client/mail.h /usr/local/include/ 
    [root@vm_master imap]# cp ./c-client/rfc822.h /usr/local/include/ 
    [root@vm_master imap]# cp ./c-client/linkage.h /usr/local/include/ 

    # imap을 서버에서 운영가능하도록 xinetd 설정 화일을 만든다. 
    [root@vm_master xinetd.d]# cat imapd 
    service imap 
    { 
    disable = no 
    socket_type = stream 
    protocol = tcp 
    wait = no 
    user = root 
    server = /usr/sbin/imapd 
    } 

    # 서비스 확인 
    [root@vm_master xinetd.d]# netstat -at 
    Active Internet connections (servers and established) 
    Proto Recv-Q Send-Q Local Address Foreign Address State 
    tcp 0 0 *:imap *:* LISTEN 

    _______________________________________________________________________________ 

    6.GD 설치 

    [소스 다운로드] 
    http://freshmeat.net/projects/gd/homepage/ 

    [설치] 

    # 화일을 풀고 컴파일을 한후 디렉토리를 통으로 옮긴다. 
    [root@vm_master AJS]# tar zxvf gd-1.8.4.tar.gz 
    [root@vm_master AJS]# cd gd-1.8.4 
    [root@vm_master gd-1.8.4]# make 
    [root@ns gd-1.8.4]# cd .. 
    [root@vm_master AJS]# mv gd-1.8.4 /usr/local/gd 

    _______________________________________________________________________________ 

    7.apache 초기 작업 

    [소스 다운로드] 
    http://www.apache.org/dist/httpd/ 

    # 아파치를 간단히 기본 설치 디렉토리를 세팅한다. 
    [root@vm_master apache_1.3.22]# tar zxvf apache_1.3.22.tar.gz 
    [root@vm_master apache_1.3.22]# cd apache_1.3.22.tar.gz 
    [root@vm_master apache_1.3.22]# ./configure --prefix=/usr/local/apache 

    _______________________________________________________________________________ 

    8.openssl 설치 

    [소스 다운로드] 
    http://www.openssl.org/source/ 

    [설치] 

    # 소스 풀고 컴파일 한다. 인스톨은 하지 않는다. 
    [root@vm_master AJS]# tar zxvf openssl-0.9.6b.tar.gz 
    [root@vm_master AJS]# cd openssl-0.9.6b/ 
    [root@vm_master openssl-0.9.6b]# ./config 
    [root@vm_master openssl-0.9.6b]# make;make install 

    _______________________________________________________________________________ 

    9.mm 설치 

    - 공유 메모리 관련 라이브러리 

    [소스 다운로드] 
    http://www.engelschall.com/sw/mm/ 

    [설치] 


    [root@vm_master AJS]# tar zxvf mm-1.1.3.tar.gz 
    [root@vm_master AJS]# cd mm-1.1.3 
    [root@vm_master mm-1.1.3]# ./configure 
    [root@vm_master mm-1.1.3]# make 
    [root@vm_master mm-1.1.3]# make install 
    [root@vm_master mm-1.1.3]# cd .. 
    [root@vm_master AJS]# mv mm-1.1.3 /usr/local/ 

    _______________________________________________________________________________ 

    10.mod_ssl 설치 

    [소스 다운로드] 
    http://www.modssl.org/source/ 

    [설치] 
    [root@vm_master AJS]# tar zxvf mod_ssl-2.8.5-1.3.22.tar.gz 
    [root@vm_master AJS]# cd mod_ssl-2.8.5-1.3.22 
    [root@vm_master mod_ssl-2.8.5-1.3.22]# ./configure 
    > --with-apache=../apache_1.3.22 
    > --with-ssl=/usr/local/ssl --enable-shared=ssl 
    > --with-mm=/usr/local/mm-1.1.3 

    _______________________________________________________________________________ 

    11.apache & mod_gzip 

    [ mod_gzip모듈 다운로드 ] 
    http://www.remotecommunications.com/apache/mod_gzip/ 에서 mod_gzip.c 

    [ mod_gzip 참고 사이트] 
    http://www.apache.kr.net/documents/mod_gzip_kr.html 

    [소스 수정] 

    # 최대 클라이언트 접속수 조정 
    [root@vm_master apache_1.3.22]# vi src/include/httpd.h 

    #ifndef HARD_SERVER_LIMIT 
    #ifdef WIN32 
    #define HARD_SERVER_LIMIT 1024 
    #elif defined(NETWARE) 
    #define HARD_SERVER_LIMIT 2048 
    #else 
    #define HARD_SERVER_LIMIT 256 // 이곳의 숫자값을 512로 변경 
    #endif 
    #endif 

    # 버전 정보를 변경한다. 

    #define SERVER_BASEVENDOR "Apache Group" //적당히 다른 이름으로 
    #define SERVER_BASEPRODUCT "Apache" //다른 이름으로 
    #define SERVER_BASEREVISION "1.3.22" //버전을 적당히 고친다. 

    #mod_gzip.c를 받어서 아파치 디렉토리의 다름 경로로 이동 시킨후 설정 내용에 
    #mod_gzip에 관한 내용을 집어 넣는다. 
    [root@vm_master AJS]# cp mod_gzip.c apache_1.3.22/src/modules/extra/ 
    [root@vm_master AJS]# echo "AddModule modules/extra/mod_gzip.o" >> apache_1.3.22/src/Configuration.tmpl 

    [root@localhost AJS]# cd apache_1.3.22 
    [root@vm_master apache_1.3.22]# EAPI_MM="/usr/local/mm-1.1.3" SSL_BASE="/usr/local/ssl" 

    #만약 php를 DSO방식으로 처리를 하고 싶다면 아파치를 먼저 컴파일 한다. 
    [root@vm_master apache_1.3.22]# ./configure --prefix=/usr/local/apache 
    > --enable-rule=SHARED_CORE --enable-shared=ssl 
    > --enable-module=ssl --enable-module=so --enable-shared=max 

    #만약 php를 DSO로 하지 않는 경우 php를 먼저 컴파일 하고 다음 옵션을 넣는다. 
    [root@vm_master /AJS]#tar zxvf php-4.1.1.tar.gz 
    [root@vm_master /AJS]#cd php-4.1.1 
    [root@vm_master /php-4.1.1]#./configure --prefix=/usr/local/php 
    --with-apache=../apache_1.3.22 
    --with-mysql=/usr/local/mysql 
    --with-imap=/usr/local/imap 
    --with-gd=/usr/local/gd 
    --enable-track-vars 
    --with-language=korean 
    --with-config-file=/usr/local/php/lib 
    --with-charset=euc_kr 
    --disable-debug 
    --with-xml --enable-magic-quotes 
    [root@vm_master /php-4.1.1]#make;make install 

    ## php.ini와 기타 설정은 하단 PHP DSO방식으로 하기 참조 ## 

    #php를 먼저 컴파일 하고 아파치에서 옵션을 넣는다. 
    [root@vm_master apache_1.3.22]# ./configure --prefix=/usr/local/apache 
    --enable-rule=SHARED_CORE --enable-shared=ssl 
    --enable-module=ssl --enable-module=so --enable-shared=max 
    --activate-module=src/modules/php4/libphp4.a 

    [root@vm_master apache_1.3.22]# make 

    # 이과정에서 서버를 묻는다.. 정확히 자신의 https 서버이름을 지정해야 한다. 
    [root@vm_master apache_1.3.22]# make certificate TYPE=custom 

    [root@vm_master apache_1.3.22]# make install 

    #설치후 mod_gzip 설정 화일을 httpd.conf에 넣는다. 참고로 옆에 있는 #있는 주석은 모두 지운다. 


    mod_gzip_on Yes 
    mod_gzip_dechunk Yes 
    mod_gzip_min_http 1000 # 1000 = HTTP/1.0, 1001 = HTTP/1.1 
    mod_gzip_minimum_file_size 300 # 압축할 최소 Size 
    mod_gzip_maximum_file_size 0 
    mod_gzip_maximum_inmem_size 100000 
    mod_gzip_keep_workfiles No 
    mod_gzip_item_include file .html$ # 압축할 파일들 설정 
    mod_gzip_item_include file .htm$ 
    mod_gzip_item_include file .jsp$ 
    mod_gzip_item_include file .php$ 
    mod_gzip_item_include file .pl$ 
    mod_gzip_item_include mime ^text/.* 
    mod_gzip_item_include mime ^text/.html # 설명서에는 이렇게 되있는데 
    # 다음줄을 넣어야 되더군요. 
    mod_gzip_item_include mime ^text/html$ # HTML 형식 모두 압축 
    mod_gzip_item_include mime ^application/x-httpd-php # PHP 스크립트 압축 
    mod_gzip_item_include mime ^httpd/unix-directory$ 
    mod_gzip_item_include handler ^perl-script$ 
    mod_gzip_item_include handler ^server-status$ 
    mod_gzip_item_include handler ^server-info$ 
    mod_gzip_item_exclude file .css$ # 압축 제외 파일들. 
    mod_gzip_item_exclude file .js$ 
    mod_gzip_item_exclude mime ^image/.* 

    mod_gzip_temp_dir /dev/shm # 이것 Linux용이고요 보통 '/tmp'하시면됩니다. 
    LogFormat "%h %l %u %t "%V %r" %>s %b mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n Out:%{mod_gzip_output_size}n:%{mod_gzip_compression_ratio}npct." common_with_mod_gzip_info2 
    CustomLog logs/mod_gzip common_with_mod_gzip_info2 




    _______________________________________________________________________________ 

    12. SSL 인증서 수동으로 만들기 

    [아파치에서 make certificate에서 인증서 자동으로 생성된다. 하지만 잘 안되는 경우는 
    다음과 같이 해서 인증서를 만든다. ] 


    # 여러가지 묻는데 "."로 하면 그냥 넘어간다. 혹은 메세지에 맞게 항목을 넣는다. 
    [root@vm_master apache_1.3.22]# cd /usr/local/ssl/bin/ 
    [root@vm_master bin]# ./openssl req -new > new.cert.csr 
    [root@vm_master bin]# ./openssl rsa -in privkey.pem -out new.cert.key 
    [root@vm_master bin]# ./openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 999 

    # 키값을 복사한다. 

    [root@vm_master bin]# cp new.cert.key /usr/local/apache/conf/ssl.key/server.key 
    [root@vm_master bin]# cp new.cert.cert /usr/local/apache/conf/ssl.key/server.crt 

    _______________________________________________________________________________ 

    13. Apache+mod_ssl 을 자동시작 하려면 

    [참고 사이트] 
    http://linux.sarang.net/board/?p=read&table=qa&no=105693&page=3&o[at]=s&o[sc]=a&o[ss]=mod_ssl&o[st]=a 


    'httpd.conf' 파일을 열어서 'SSLPassPharaseDialog'란 부분을 
    찾아서 그 뒷부분에다가 'exec:실행파일명' 형식으로 적어주시고 
    그 '실행파일'을 만들어주심 됩니다. 이 '실행파일'이 하는 일은 
    단순히 SSL Private Key에 대한 패스워드를 Clean Text 형식으로 
    출력해주는 것입니다. 
    아래는 예입니다. (패스워드가 'password'라고 가정함) 

    ------------ httpd.conf 의 부분 ---------------------- 
    SSLPassPhraseDialog exec:/usr/local/sbin/ssl_pass.sh 
    ------------ 이 부분에서 자르세요 -------------------- 

    ------------ ssl_pass.sh ----------------------------- 
    #!/bin/sh 
    echo password 
    ------------ 이 부분에서 자르세요 -------------------- 

    여기서 반드시 주의하실 점은 'ssl_pass.sh'의 권한 설정입니다. 
    절대적으로 root만 읽고 실행할 수 있어야 합니다. 

    # chown root.root ssl_pass.sh 
    # chmod 500 ssl_pass.sh 


    위에서 예를 든 방법 외에 그냥 바로 'httpd.conf' 파일내에 
    패스워드를 적어주는 방법도 있지만, 보안 상 그다지 추천할 
    만한 방법은 아닌 것 같습니다. 
    좀 더 자세한 정보를 얻고 싶으시면, mod_ssl 홈페이지에 
    가셔서 'SSLPassPharaseDialog'란 키워드로 검색을 해보심 
    됩니다. 



    14.DSO PHP 설치 

    [소스 다운로드] 
    http://www.php.net/downloads.php 

    # 소스를 풀고 설정을 한다. 
    [root@vm_master php-4.1.1]# CFLAGS='-O2 -I/usr/local/ssl/include' ./configure 
    --prefix=/usr/local/php 
    --with-apxs=/usr/local/apache/bin/apxs 
    --with-mysql=/usr/local/mysql 
    --with-imap=/usr/local/imap 
    --with-gd=/usr/local/gd 
    --enable-track-vars 
    --enable-magic-quotes 
    --with-openssl=/usr/local/ssl 
    --with-language=korean 
    --with-charset=euc_kr 
    --disable-debug 
    --with-xml 

    # 설치 한다. 
    [root@vm_master php-4.1.1]# make ;make install 

    [root@vm_master php-4.1.1]# cp php.ini-dist /usr/local/php/lib/php.ini 

    # 다음 php 관련 내용이 아파치 설정 화일에 있는지 확인 한다. 
    [root@vm_master conf]# cat httpd.conf | grep php 
    LoadModule php4_module libexec/libphp4.so 
    AddModule mod_php4.c 
    DirectoryIndex index.html index.php 
    # http://www.php.net) will typically use: 
    #AddType application/x-httpd-php3 .php3 
    #AddType application/x-httpd-php3-source .phps 
    AddType application/x-httpd-php .php .phtml .html .htm .ph 
    AddType application/x-httpd-php-source .phps 

    mod_gzip_item_include file .php$ 
    mod_gzip_item_include mime ^application/x-httpd-php 


    _______________________________________________________________________________ 

    15.Zend Optimizer 설치 

    [다운로드] 
    http://www.zend.com/store/products/zend-optimizer.php 

    # 소스를 풀고 디렉토리를 만들고 php.ini를 수정한다. 
    [root@vm_master AJS]# tar zxvf ZendOptimizer-1[1].2.0-PHP_4.1.0-Linux_glibc21-i386.tar.gz 
    [root@vm_master AJS]# mkdir -p /usr/local/Zend 
    [root@vm_master AJS]# mkdir -p /usr/local/Zend/lib 
    [root@vm_master AJS]# cd ZendOptimizer-1.2.0-PHP_4.1.0-Linux_glibc21-i386/data 
    [root@vm_master data]# cp ZendOptimizer.so /usr/local/Zend/lib/ 

    # 다음 라인을 추가한다. 
    [root@vm_master data]# vi /usr/local/php/lib/php.ini 
    [Zend Optimizer] 
    zend_optimizer.optimization_level=7 
    zend_extension="/usr/local/Zend/lib/ZendOptimizer.so" 

    _______________________________________________________________________________ 

    16.apache & tomcat 연동 mod_webapp.so 설치 

    [ 모듈 다운로드 ] 
    http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.1/bin/linux/i386/ 

    # 소스를 풀고 모듈을 설치 한다. 
    [root@vm_master AJS]# tar zxvf webapp-module-1.0-tc40-linux-glibc2.2.tar.gz 
    [root@vm_master AJS]# cd webapp-module-1.0-tc40 
    [root@vm_master webapp-module-1.0-tc40]# cp mod_webapp.so /usr/local/apache/libexec/ 

    # 아파치 설정 화일에 다음 라인을 추가 한다. 
    [root@vm_master webapp-module-1.0-tc40]# cat /usr/local/apache/conf/httpd.conf | grep web 
    LoadModule webapp_module libexec/mod_webapp.so 
    AddModule mod_webapp.c 

    # 아파치 설정 화일에서 도규먼트 루트 디렉토리를 톰켓 디렉토리로 변경한다. 
    # 그리고 ssl 가상 호스트 또한 변경을 한다. 

    [root@vm_master webapp-module-1.0-tc40]# cat /usr/local/apache/conf/httpd.conf | grep DocumentRoot 
    # DocumentRoot: The directory out of which you will serve your 
    #DocumentRoot "/usr/local/apache/htdocs" 
    DocumentRoot "/usr/local/jakarta-tomcat/webapps/ROOT" 

    # This should be changed to whatever you set DocumentRoot to. 
    # even if you change the DocumentRoot. Comment it if you don't want to 
    # DocumentRoot /www/docs/dummy-host.example.com 
    #DocumentRoot "/usr/local/apache/htdocs" 
    DocumentRoot "/usr/local/jakarta-tomcat/webapps/ROOT" 


    # 아파치와 톰켓을 연결하는 부분이다. 이부분을 맨 마지막 부분에 넣는다. 
    [root@vm_master bin]# cat /usr/local/apache/conf/httpd.conf | grep WebApp 
    WebAppConnection conn warp localhost:8008 
    WebAppDeploy examples conn /examples 
    WebAppInfo /webapp-info 


    # 최종 테스트 순서 톰켓을 먼저 구동한 다음에 아파치를 구동한다. 

    [root@vm_master bin]# cd /usr/local/jakarta-tomcat/bin/ 
    [root@vm_master bin]# ./startup.sh 
    Guessing CATALINA_HOME from catalina.sh to ./.. 
    Setting CATALINA_HOME to ./.. 
    Using CLASSPATH: ./../bin/bootstrap.jar:/usr/local/jdk/lib/tools.jar 
    Using CATALINA_BASE: ./.. 
    Using CATALINA_HOME: ./.. 
    Using JAVA_HOME: /usr/local/jdk 

    # 아파치 실행 할때 에러 메세지가 난다. 이것은 무시해도 된다. 잘 되네요. 
    [root@vm_master bin]# /usr/local/apache/bin/apachectl start 
    [Thu Jan 17 07:56:38 2002] [warn] Loaded DSO libexec/mod_webapp.so uses plain Apache 1.3 API, 
    this module might crash under EAPI! (please recompile it with -DEAPI) 
    /usr/local/apache/bin/apachectl start: httpd started 

    _______________________________________________________________________________ 

    17.최종 연동 테스트 

    http://hostname/ 
    https://hostname/ 

    두가지가 모두 잘나온다면 성공.. 추카.. ^^; 

    # 아파치 구동시 문제가 있더라도 만약 다음과 에러가 나오더라도 이상 없는 것이다. 
    [Thu Jan 17 07:52:34 2002] [warn] Loaded DSO libexec/mod_webapp.so uses plain Apache 1.3 API, 
    this module might crash under EAPI! (please recompile it with -DEAPI) 
    posted by 좋은느낌/원철
    2009. 5. 29. 15:28 시사/요즘 세상은

    "건호 아버지 보세요" 

    건호 아버지! 

    이렇게 당신에게 편지를 써 보는 것도 참 오랜만이네요.이 나이에 당신한테 편지를 쓴다는 게 쑥스럽지만 마주보고 하지 못하는 말을 글로 대신합니다.

    새벽에 잠시 눈을 붙이고 집을 나서는 당신의 뒷모습을 오랫동안 쳐다보았습니다.그동안 당신과 제게 많은 시련과 역경이 스치고 지나갔지만 씩씩하던 그 걸음걸이는 여전하더군요.

    여보 힘드시죠? 

    항상 강한 줄만 알았던 당신이 국민들이 한 푼 두 푼 모은 금쪽같은 희망돼지 저금통을 받고는 눈물을 글썽거렸습니다.

    그 날 당신 곁에 서 있는 동안 정치를 한다는 것은 결국 사람을 사랑하고 희망을 주는 일이라는 것을.그리고힘들어도 그 길은 가야만 한다는 것을 다시 한번 깨달았습니다. 대통령이 되기 위해 사랑하는 아내를 버려야 한다면 차라리 대통령 안 하겠다고 그 많은 사람들 앞에서 당당히 말하던 당신,무뚝뚝하기만 하던 당신의 속 깊은 사랑에 저는 말없이 감동의 눈물을 흘렸습니다.

    30년 당신을 지켜 온 바위같이 앞으로도 당신 곁을 지키고 있겠습니다.

    여보, 끝까지 힘내세요.

    -당신의 아내 권양숙-

    2002.11.19" 
    posted by 좋은느낌/원철
    2009. 5. 29. 15:20 시사/요즘 세상은

    노무현 대통령님.

     

    대통령은 지금 어디에 계십니까?

     

    얼마나 긴 고뇌의 밤을 보내셨습니까? 얼마나 힘이 드셨으면, 자전거 뒤에 태우고 봉하의 논두렁을 달리셨던, 그 어여쁜 손녀들을 두고 떠나셨습니까?

     

    대통령님. 얼마나 얼마나 외로우셨습니까? 떠안은 시대의 고역이 얼마나 고통스러웠으면, 새벽빛 선연한 그 외로운 길 홀로 가셨습니까?

     

    유난히 푸르던 오월의 그날, '원칙과 상식' '개혁과 통합'의 한길을 달려온 님이 가시던 날, 우리들의 갈망도 갈 곳을 잃었습니다. 서러운 통곡과 목 메인 절규만이 남았습니다.

     

    어린 시절 대통령님은 봉화산에서 꿈을 키우셨습니다. 떨쳐내지 않으면 숨이 막힐 듯한 가난을 딛고 남다른 집념과 총명한 지혜로 불가능할 것 같던 꿈을 이루었습니다.

     

    님은 꿈을 이루기 위해 좌절과 시련을 온몸으로 사랑했습니다. 어려울수록 더욱 힘차게 세상에 도전했고, 꿈을 이룰 때마다 더욱 큰 겸손으로 세상을 만났습니다. 한없이 여린 마음씨와 차돌 같은 양심이 혹독한 강압의 시대에 인권변호사로 이끌었습니다.

     

    불의에 대한 분노와 정의를 향한 열정은 6월 항쟁의 민주투사로 만들었습니다.

     

    그렇게 삶을 살아온 님에게 '청문회 스타'라는 명예는 어쩌면 시대의 운명이었습니다.

     

    '이의 있습니다!' 3당 합당을 홀로 반대했던 이 한마디! 거기에 '원칙과 상식'의 정치가 있었고 '개혁과 통합'의 정치는 시작되었습니다.

     

    '원칙과 상식'을 지킨 대가는 가혹했습니다. 거듭된 낙선으로 풍찬노숙의 야인 신세였지만, 님은 한 순간도 편한 길, 쉬운 길을 가지 않았습니다.

     

    '노사모' 그리고 '희망돼지저금통' 그것은 분명 '바보 노무현'이 만들어낸 정치혁명이었습니다.

     

    노무현 대통령님!

     

    님은 언제나 시대를 한 발이 아닌 두세 발을 앞서 가셨습니다. 그러나 우리가 사는 세상은 너무나 험악할 뿐이었습니다. 수많은 왜곡과 음해들도 마다하지 않았습니다. 어렵다고 돌아가지 않았고 급하다고 건너뛰지 않았습니다.

     

    항상 멀리 보며 묵묵하게 역사의 길을 가셨습니다.

     

    반칙과 특권에 젖은 이 땅의 권력문화를 바꾸기 위해 스스로 권력을 내려놓으셨습니다. 화해와 통합의 미래를 위해 국가공권력으로 희생된 국민들의 한을 풀고 역사 앞에 사과하는 데 주저하지 않았습니다.

     

    님이 대통령으로 계시는 동안, 대한민국에선 분명 국민이 대통령이었습니다.

     

    동반성장, 지방분권, 균형발전 정책으로 더불어 잘사는 따뜻한 사회라는 큰 꿈의 씨앗들을 뿌려놓았습니다.

     

    흔들림 없는 경제정책으로 주가 2천, 외환보유고 2500억 달러, 무역 6천억 달러, 국민소득 2만 달러 시대를 열었습니다.

     

    군사분계선을 걸어 넘어 한반도 평화를 한 차원 높였고 균형외교로 유엔사무총장을 배출해 냈습니다.

     

    컴퓨터를 자유자재로 쓰는 세계 첫 대통령으로 이 나라를 인터넷 강국, 지식정보화시대의 세계 속 리더국가로 자리 잡게 했습니다.

     

    이 땅에 창의와 표현, 상상력의 지평이 새롭게 열리고 아시아는 물론 아프리카까지 한류가 넘치는 문화르네상스 시대를 열었습니다.

     

    대통령님이 떠난 지금에 와서야 님이 재임했던 5년을 돌아보는 것이 왜 이리도 새삼 행복한 것일까요.

     

    열다섯 달 전, 청와대를 떠난 님은 작지만 새로운 꿈을 꾸셨습니다. 고향으로 돌아와 잘사는 농촌사회를 만드는 한 사람의 농민, '진보의 미래'를 개척하는 깨어있는 한 사람의 시민이 되겠다는 소중한 소망이었습니다.

     

    엄마 아빠 손을 잡고 봉하마을을 찾는 아이들의 초롱한 눈을 보며 아이들의 미래를 위해 무엇을 할 수 있을까, 고뇌하고 또 고뇌했습니다.

     

    그러나 모진 세월과 험한 시절은 그 소박한 소망을 이룰 기회마저 허용치 않았습니다.

     

    자신의 문제에 대해선 한없이 엄격하고 강인했지만 주변의 아픔에 대해선 속절없이 약했던 님.

     

    '여러분은 이제 저를 버리셔야 합니다.'는 글을 접하고서도 님을 지키지 못한 저희들의 무력함이 참으로 통탄스럽습니다.

     

    대통령님, 지켜드리지 못해서 죄송합니다.

     

    그래도 저희들은 꿈을 키우던 어린 시절의 자연인으로 돌아가겠다는 마지막 꿈만큼은 이루어질 것으로 생각했습니다.

     

    그런데 어인 일입니까? 세상에 이런 일이 있습니까? 잔인한 세상은 '인간 노무현'으로 살아갈 마지막 기회조차도 빼앗고 말았습니다.

     

    님은 남기신 마지막 글에서 '책을 읽을 수도 글을 쓸 수도 없다'고 하셨습니다. 최근 써놓으신 글에서 "지금은 할 수 있는 일이 실패 이야기를 쓰는 것이 맞는것 같다"고 하셨습니다.

     

    이 말씀이 남아 있는 저희들을 더욱 슬프고 부끄럽게 만듭니다.

     

    대통령님! 님은 실패하지 않았습니다. 대통령님, 보이지 않습나까? 끊이지는 않은 저 추모의 행렬을...

     

    대통령을 위해 날리려고 들고있는 노란 풍선이 보이지 않습니까? 님에게 사랑을 보이고 있지 않습니까?

     

    설령 님의 말씀처럼 실패라고 하더라도 이제 걱정하지 마십시오.

     

    이제 저희들이 님의 자취를 따라, 님의 꿈을 따라 우리 국민 모두가 손에 손을 잡고 대한민국의 꿈을 이루겠습니다. 그래서 님은 온 국민의 가슴 속에 영원히 남아있는 대통령이 될 것입니다.

     

    대통령님. 생전에 그렇게 하셨던 것처럼, 분열로 반목하고 있는 우리를 화해와 통합으로 이끄소서. 대결로 치닫고 있는 남북 간의 갈등을 평화로 이끌어주소서.

     

    그리고 우리의 민주주의를 다시금 꽃피우게 해주소서.

     

    이제 우리는 대통령님을 떠나보냅니다. 대통령님이 언젠가 말씀하셨듯이, 다음 세상에서는 부디 대통령 하지 마십시오. 정치하지 마십시오. 또 다시 '바보 노무현'으로 살지 마십시오.

     

    그래서 다음 세상에서는 부디 더는 혼자 힘들어 하시는 일이 없기를, 더는 혼자 그 무거운 짐 안고 홀로 가시는 길이 없기를 빌고 또 빕니다.

     

    노무현 대통령님! 님을 놓아드리는 것으로 저희들의 속죄를 대신하겠습니다. 이제 마지막 가시는 길, 이승에서의 모든 것을 잊으시고, 저 높은 하늘로 훨훨 날아가십시오.

     

    대통령님! 죄송합니다.

    대통령님! 사랑합니다.

    대통령님! 행복했습니다.

    대통령님! 편안히 가십시오.

     

    2009년 5월 29일

    고 노무현 전 대통령 국민장 장의위원회 위원장 한명숙


    posted by 좋은느낌/원철
    2009. 5. 27. 19:51 개발/JavaScript
    출처 : http://enzine.tistory.com/entry/50%EA%B0%9C-%EC%9D%B4%EC%83%81%EC%9D%98-Ajax-%EC%98%88%EC%A0%9C%EB%93%A4

    Ajax Forms

    ShoutBox

    Validate a Username AJAX

    Ajax 메신저

    Ajax 탭 컨텐트

    Ajax 장바구니

    Ajax 별점 매기기

    Ajax 인라인 에디트

    Ajax 프로그레스 바

    Ajax 페이징

    Ajax 파일 브라우저 & 관리자

    Ajax 캘린더

    Ajax 사진 관리

    Ajax 이미지 갤러리와 슬라이드쇼

    Ajax 파일 업로드

    Ajax 자동완성

    웹에디터

    투표

    테이블 데이터 관리

    기타


    posted by 좋은느낌/원철