[웹서버] APACHE 에 대하여 알아보자 …(아랑)

=========================================================================

APACHE 에 대하여 알아보자 …

                                글쓴이 : 서 진 우(webmaster at sysmng.com)

=========================================================================

2001 년 6월 18일

Apache 에 대하여 자세히 알아보고자 한다.

Apache 는 현재 인터넷 웹서버중 가장 높은 점유률을 차지하는 웹서버이다.

뿐만 아니라 Apache 는 Redhat Linux 의 기본 탑재된 웹서버로서 웹서버중

가장 큰 영향력을 발휘하고 있다.

자 그럼 Apache 설치에 필요한 요구사항을 알아보자.

1. 아파치 설치를 위한 시스템 요구사항

– ANSI C compiler (gcc 2.7.2 이상) 리눅스 기본탑재

– 충분한 디스크 용량

소스의 용량있지만 로그 생성시 로그가 기록될 디스크 용량은 잘 고려해

야 한다. 만일 로그를 생성하지 않는다면 모르지만, 로그 생성시에는 반

드시 로그의 크기를 수시로 확인하여 처리해 주어야 한다. 로그가 너무

크면 서버의 속도가 늦어진다. 아주 큰 용량의 텍스트 파일에 실시간으로

계속적으로 로그를 기록하기 때문에 로그 파일이 크면 클수록 서버에 부

하를 초래하게 된다. 뿐만아니라 디스크 용량의 로그로 인해 full 이 되

었을때 다른 서비스까지도 마비가 될수 있다.

– 충분한 RAM

Apache 는 pool-of-server mode 에서 운영된다. 즉 클라이언트의 요청에

의해서 서버에선 httpd 의 프로세스를 생성하고 그 요청을 처리해 준다.

시스템에서 작동할 서버 프로세스의 수는 MinSpareServers,MaxSpareServers

StartServers 등의 Apache 선언을 통해 설정된다.

한시점에서 운영하고 싶은 최대 서버 프로세스의 수와 각 서버 프로세스에

필요한 RAM의 양을 곱하여 얼마나 많은 RAM 이 필요한지 계산해 보아야 한다.

Apache 에 필요한 memory = 허용된 최대 아파치 프로세스의 수 X

                각 아파치 프로세스에 필요한 memory

보통 각 아파치 서버 프로세스당평균 1.5M 정도로 보면 된다.

이밖에 여러가지 modules 이나 cgi 프로그램을 사용시 memory 역시 추가

해야 한다.

– 기타 요구사항

Apache 1.3 버젼 부터 실행시 모듈을 올리고 내리기 위한 DSO 방식을 지원

한다. 하지만 DSO 방식으로 사용시 서버의 실행속도의 5% 정도 느리게 된다.

2. 인터넷에서 아파치 구하기

아파치 공식 사이트

http://www.apache.org

아파치 한국 사이트

http://www.apache.or.kr

http://www.apache.kr.net

3. Apache 소스 설정하기

아파치 소스를 특정 디렉토리에 풀고 시스템의 환경에 맞추어 소스를 설정해야

한다. 하지만 APACI 를 사용하여 간단하게 설정할수가 있다.

소스의 최상위 디렉토리에 configure 라는 스크립트가 있는데 APACI를 사용해

아파치를 설정시 필요하다. 어떤 설정 옵션등이 있는지 알아보자.

./configure –help

하면 사용가능한 옵션이 출력된다.

아파치 설정에서 첫번째로 설정하는것이 아파치 프로그램의 설치 위치를 정하는

것이다.

./configure –prefix=/usr/local/apache

라고 설정하면 아파치에 관련된 모든 파일들이 /usr/local/apache 밑에 설치가

된다. 시스템에 따라서 특정 파일들을 이디렉토리 밖에 설치해야 한다면 — 옵

션을 이용해서 가능하다.

–exec-prefix=DIR : 지정한 디렉토리(DIR)에 아키텍쳐 의존적인 파일을 설치

        한다.

–logfiledir=DIR : log 파일 데이터를 DIR 에 설치한다.

–proxycachedir=DIR : 프록시 캐쉬 데이터를 DIR 에 설치한다.

예를 들어 아파치 로그 파일을 별도의 디렉토리에 저장하고 싶을 경우에

./configure –prefix=/usr/local/apache –logfiledir=/logs

이와 같이 해줌으로써 /usr/local/apache/logs 에 생성될 로그를 /logs 에

생성하도록 한다.

–layout , –compat 옵션이 있다.

–layout 옵션은 디렉토를를 실제 사용하기 전에 디렉토리 구조를 확인할수 있

게 해준다. –compat 옵션은 1.2 버젼이 설치되어져 있을때 그 설치 디렉토리에

그래도 새버젼이 설치 되어진다. 즉..업그레이드를 할때 사용하는 옵션이다.

이밖에 모듈 설정 옵션이 있다.

기본 모듈은 AddModule 행을 이용해 표준 아파치에 추가 된다. 이 모듈들은

우선 순위가 낮은 순서대로 나열 되어 있다. 즉 가장 우선순위가 낮은 모듈

이 가장 위애 위치하게 된다. 만일 다른 모듈을 추가 하고 싶을땐 src 디렉

토리안에 Configuration.apaci 파일을 열어 보면 AddModule 행이 나열되어

있는데 여기에서 추가 해도 되지만 configure 스크립터를 이용하는 방법이

효율적이다.

기본적으로 구동되어져 있지 않은 모듈을 구동시키려면 –enable-module=NAME

옵션을 사용한다. 모듈을 무력화 시키려면 –disable-module=NAME 옵션을 사용

한다. 예를 들어 CGI 모듈을 무력화 하여 cgi 사용을 못하게 할려면 ……

./configure –prefix=/usr/local/apache –disable-module=cgi

또는 사용자 추적(user-tracking) 모듈을 구동시키려면 ..

./configure –prefix=/usr/local/apache –enable-module=usertrack

위와 같은 방법으로 이용할 모듈을 설정할수 있다.

기본적으로 아파치에서 사용하는 모듈이다.

/usr/local/apache/bin/httpd -l 을 이용하여 알수 있다.

Compiled-in modules:

http_core.c

mod_env.c

mod_log_config.c

mod_mime.c

mod_negotiation.c

mod_status.c

mod_include.c

mod_autoindex.c

mod_dir.c

mod_cgi.c

mod_asis.c

mod_imap.c

mod_actions.c

mod_userdir.c

mod_alias.c

mod_access.c

mod_auth.c

mod_setenvif.c

mod_ssl.c

이제 아차치 컴파일 및 설치를 해보자

설치 방법은 쉽다.

# ./configure –prefix=/usr/local/apache

# make

# make install

순으로 이루어 진다.

Redhat 기반 리눅스 에서는 위와 같이 설치하면 별다른 에러 없이 설치가 가능

하다. 만일 어떤 문제가 발생한다면 아파치 웹사이트의 FAQ 에서 참조하길 바

란다.

아파치 지원툴 컴파일 및 설치 하기

configure 스크립트를 이용하면 일련의 지원툴 역시 자동으로 설치된다.

따라서 지원툴을 설치하기 위해 추가적인 작업은 없다. 하지만 예외가

logresolve.pl 스크립트 이다. 이 Perl 스크립트는 직접설치해야 한다.

만일 지원툴중 설치를 원하지 않은것이 있으면 –without-support 옵션을

지정한다. 지원 툴들은 아파치의 여러 측면을 관리 하는데 매우 도움이 되므로

기본 설치되는 그대로 둘것을 권한다. 지원툴이란 아파치서버를 이용하는데

지원하는 프로그램으로 하나씩 알아보도록 하자.

– apachectl

이 스크립트를 사용하면 아파치를 제어 할수 있게 된다. 몇가지 옵션이 있는데

/usr/local/apache/bin/apachectl help

로 확인 가능하다.

/usr/local/apache/bin/apachectl start

아파치 시작

/usr/local/apache/bin/apachectl stop

아파치 중지

/usr/local/apache/bin/apachectl restart

아파치 재시작

/usr/local/apache/bin/apachectl fullstatus

서버의 다양한 상태 데이터를 담은 페이지가 출력된다.

/usr/local/apache/bin/apachectl configtest

설정 파일인 httpd.conf 에 에러 구문이 있는지 확인한다.

– ab

웹 서버에서 벤치마크를 실행시킬수 있게 해주는 유틸리티이다.

아무 옵션없이 실행하면 사용가능한 옵션이 나타난다.

– apxs

dymamic loading 을 위한 모듈 컴파일시 사용된다. 만일 웹서버에서 DSO가

지원되지 않는다면 필요없는 유틸리티 이다.

– logresolve.pl

이 Perl 스크립트는 자동으로 설치되지는 않지만 src/support 디렉토리의

적당한 곳에 복사 넣으면 사용가능하다. 이스크립트는 아파치 로그파일에

있는 IP 주소를 호스트명으로 해석해준다. 또한 child 프로세스를 발생하

고, parent 프로세스를 사용해 DNS 의 lookup 속도를 높이는 캐쉬 지원을

제공한다.

– logresolve

logresolve.pl 과 같은 기능을 하는 것으로

logresolve [-s statfile] [-c] < input > output

같은 방법으로 사용이 가능하다.

– htpasswd

디렉토리 인증을 걸때 사용되는 명령어다.

사용방법은 다음과 같다.

———————————————————————-

디렉토리에 패스워드를 거는 방법입니다.

A. 먼저 .htaccess 파일을 하나 만들어야 합니다. 암호인증을 걸고자 하는

디렉토리로 이동하셔서 편집기를 사용하여 .htaccess 라는 파일을 만듭

니다. 파일의 내용은 다음과 같습니다.

$ vi .htaccess

———————————————————–

AuthName “타이틀명을 적으세요”

AuthType Basic

AuthUserFile /암호를 걸고자 하는 디렉토리 절대경로/.htpasswd

AuthGroupFile /dev/null

ErrorDocument 401

<Limit GET POST>

require valid-user

</Limit>

———————————————————–

B. test 라는 아이디로 인증 과정을 거쳐야만 웹상에서 디렉토리에

들어갈수 있는 경우에 다음과 같이 합니다.

$ htpasswd -c .htpasswd test

Adding password for test

New password:

Re-type new password:

위와 같이 htpasswd -c .htpasswd <생성하고자 하는 아이디> 라고

해주시면 패스워드를 물어보게 됩니다.

-c 옵션은 최초 사용자 생성시만 붙입니다. 그 다음 생성아이디는

그냥 -c 옵션은 빼고 htpasswd .htpasswd <ID> 라고 해주시면 됩니

다…

부과적인 설명으로 IP 주소별로 디렉토리 인증을 할수 있다.

방법은 .htaccess 파일을 다음과 같이 만들어 준다.

————————————————————–

AuthName “타이틀명을 적으세요”

AuthType Basic

AuthUserFile /암호를 걸고자 하는 디렉토리 절대경로/.htpasswd

AuthGroupFile /dev/null

ErrorDocument 401

<Limit GET POST>

require valid-user

Satisfy any

order deny,allow

allow from 211.47.64( 접속허가된 IP 대역 )

allow from 211.47.64.145( 접속허가된 IP 주소 )

deny from all

</Limit>

————————————————————–

——————————————————————-

– dbmmanage

DBM 에 기반한 인증 기법에 대해 DBM 을 사용하여 사용자명 /패스워드를

만들수 있다. 활용구문은 옵션없이 명령어를 실행시켜보면 된다.

– htdigest

MD5 digest 에 기반한 인증 기법에 대해 사용자명 /패스워드를 만드는

유틸리티 이다.

4. 서드 파티 모둘로 아파치 커스터 마이징 하기

서브 파티 모듈을 추가 하기 전에 표준 아파치를 먼저 설치하도록 하라.

그런후 여러분이 시스템에 맞게 커스터 마이즈 하면 된다. 이경우 처음의

단계인 ./configure 로 처음부터 다시 설정할 필요가 없다.

한번 configure 스크립트를 실행하고 나면 config.status 스크립트가 자동

으로 만들어 진다. 여기엔 처음 실행한 configure 스크립트의 옵션 설정

부분이 담겨져 있다. 예를 들어 소스를 푼후 처음으로 configure 스크립트

를 가동 시켰다고 하자..

./configure –prefix=/usr/local/apache –disable-module=cgi

그러면 config.status 에 이 옵션 내용이 그대로 담겨져 있다. 이 사항에

서 usertrack 모듈을 추가 하고 싶다면 ..

./config.status –enable-module=usertrack 이라고 설정해 주면 된다.

– FastCGI 지원 추가하기

아파치에서 FastCGI 지원을 추가 하기 전에 FastCGI 웹사이트인

http://www.fastcgi.com 에서 최신

FastCGI 모듈(mod_fastcgi.c)을

다운 받는다.

첫번째 단계는 FastCGI 모듈 배포판의 압축을 풀고 이배포판을 아파치

소스의 src/modules/fastcgi 디렉토리에 복사하거나 이동한다.

그 다음 ..

./config.status –activate-module=src/modules/fastcgi/libfastcgi.a

와 같이 실행한다. 아무런 에러 없이 설정이 완료되면

make && make install 하여 준다.

그런뒤 mod_fastcgi.c 모듈이 실행파일 속에 포함되어져 있는지 확인한다.

/usr/local/apache/bin/httpd -l

5. PHP 지원 추가 하기

PHP 지원을 설치 하기 전에 반드시 한번이라도 아파치를 컴파일 해야 한다.

준비가 되면 http://www.php.net 에서

최신의 PHP 배포판 소스를 다운 받아

PHP 배포판 소스 최상위에서 configure 스크립트를 실행하여야 한다.

예)

먼저 Apache 소스 최상위에서 configure 스크립트 실행

# ./configure –prefix=/usr/local/apache

그런후 PHP 소스 최상위에서 configure 스크립트 실행

# ./configure –with-apache=/path apache source/ –with-language=korean \\

–with-charset=euc_kr –enable-track-vars

# make && make install

하면 php module file 이 Apache sourec 의 src 디렉토리 및에 설치 되게 된다.

Apache 설정에 php module 을 추가하고 컴파일 하면 apache 에 php 가 지원하게

된다.  

Apache 2차 compile

# ./configure –prefix=/usr/local/apache \\

–activate-module=src/modules/phpX/libphpX.a( phpX 는 php버젼 을 말함 )

————————————————————————–

여기까지 Apache Server 설치의 기본적이면서 전반적인 내용을 다루어 보았다.

이제 몇가지 응용 설치에 대해 알아 보겠다.

————————————————————————-

1. Apache + PHP + Mysql + Zend설치

1.1. 필요한 프로그램

Apache-1.3.20.tar.gz

php-4.0.5.tar.gz

mysql-3.23.37.tar.gz

ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz

1.2. Mysql 설치

먼저 /usr/local/src 및에 위의 소스파일을 놓고 모두 푼다.

Mysql 부터 설치 한다.

# ./configure –prefix=/usr/local/mysql –with-charset=euc_kr

기타 추가 옵션

–with-unix-socket-dir=/usr/local/mysql/sock/socket.mysql

소켓정보파일을 /usr/local/mysql/sock/socket.mysql 로 지정생성하겠다

이 부분을 기술하지 않으면 /tmp/(디폴트 소켓이름) 으로 사용됩니다.

–localstatedir=/mysqldb : 이것은 데이타베이스파일을 어디에다가 생성

할것인지 지정해주는 것입니다.

# make

# make install

설치 완료

# cd /usr/local/mysqlmysql 프로그램 생성 위치로 가서

# bin/mysql_installmysql DB 를 생성시켜준다.

# cd /usr/local/mysql/share/mysql

# vi mysql.server                mysql 제어 스크립트 수정

편집기로 열어서 safe_mysql이 실행되는 라인에 — language=korean 옵션을 추가

$bindir/safe_mysqld –user=$mysql_daemon_user –pid-file=$pid_file \\

–datadir=/usr/local/mysql/var –language=korean &

# chmod 700 mysql.server

# cp -p mysql.server /usr/bin

mysql 시작과 종료를 보다 편리하게 하기 위해서..

mysql.server stop중지

mysql.server start 시작

1.3. APACHE 1차 설치

# cd /usr/local/src/apache_1.3.20

# ./configure –prefix=/usr/local/apache –enable-module=so

1.4. PHP4 설치

# ./configure –with-mysql=/usr/local/mysql \\

–with-apache=/usr/local/src/apache_1.3.20\\

–enable-track-vars \\

–with-language=korean \\

–with-charset=euc_kr \\

–enable-magic-quotes \\

# make

# make install

# cp php.ini-dist /usr/local/lib/php.ini

1.5. APACHE 2차 설치

# ./configure –prefix=/usr/local/apache \\

–activate-module=src/modules/php4/libphp4.a \\

–enable-module=so \\

옵션 –enable-module=so 는 DSO 모듈로 설치하는 옵션이다.

# make

# make install

1.6. Zend 설치

# tar xzvf ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz

# mkdir -p /usr/local/Zend/lib

# cd ZendOptimizer-1.1.0-PHP_4.0.5

# mv * /usr/local/Zend/lib

# vi /usr/local/lib/php.ini

마지막 줄에 다음을 추가 한다.

zend_optimizer.optimization_level=7

zend_extension=”/usr/local/Zend/lib/ZendOptimizer.so”

2. Apache + PHP + Zend + Mysql + tomcat(JSP 지원)

앞 단원의 순서대로 APM을 설치한다. 그런후 다음으로 ..

2.1. Tomcat 설치하기

JDK 1.2.x 설치

소스 다운은 http://java.sun.com

jdk-1_2_2_006-linux-i386.tar.gz 소스를 /usr/local 에 압축을 푼다.

# tar xzvf jdk-1_2_2_006-linux-i386.tar.gz

# mv jdk-1_2_2_006-linux-i386 jdk1.2.2

JSDK 2.1.x 설치

소스다운은 http://java.sun.com

jsdk2_1-solsparc.tar.Z 소스를 /usr/local 에 푼다.

# tar xzvf jsdk2_1-solsparc.tar.Z

# mv jsdk2_1-solsparc JSDK

http://jakarta.apache.org/builds/jakarta-tomcat/release/{version}/bin

에서 최신 버젼의 프로그램을 다운 받는다.

jakarta-tomcat-3.1.1.tar.gz

다운받은 하위디렉토리인 bin/linux/i386/ 에서 관련 바이너리 모듈을 다운

받는다.

mod_jserv.so

위의 tomcat 관련 모듈을/usr/local/apache/libexec 및에 복사 한다.

# cp mod_jserv.so /usr/local/apache/libexec

그런 다음 /usr/local 에서 jakarta-tomcat-3.1.1.tar.gz 압축 파일을

푼다.

# tar xzvf jakarta-tomcat-3.1.1.tar.gz

# mv jakarta-tomcat-3.1.1 tomcat

그런뒤 TOMCAT_HOME 과 JAVA_HOME 등의 환경 설정이 필요하다.

/etc/profile 제일 밑에 다음을 추가 한다.

export TOMCAT_HOME=/usr/local/tomcat

export JAVA_HOME=/usr/local/jdk1.2.2

/root/.bash_profile 에 tomcat 실행시 필요한 JAVA 환경변수 설정

export PATH=/usr/local/jdk1.2.2/bin:$PATH

export PATH=/usr/local/JSDK/bin:$PATH

그런후 적용한다.

# sh /etc/profile

# . /root/.bash_profile

그런 다음 Apache 의 설정파일에 tomcat 를 연동 하는 설정을 추가한다.

# cd /usr/local/apache/conf

# vi httpd.conf

제일 밑줄에 다음의 문장을 추가 한다.

Include /usr/local/tomcat/conf/tomcat.conf

그런 후 tomcat.conf를 수정한다. 아래의 라인을 추가하면 된다.

(tomcat_test는 예제 디렉토리임)

ApJServMount /tomcat_test /root

webapps 디렉토리밑에 tomcat_test 디렉토리를 만든 후 tomcat_test 디렉토리에

WEB-INF디렉토리를 만든다. 그런 후 TOMCAT_HOME/conf/web.xml을 새로 만든

WEB-INF 디렉토리에 복사한다.

tomcat.conf 파일을 수정하기전에 ..

참고로 Tomcat 3.1에 Apache1.3.12 이상 버젼이면 위의 설정 후 Tomcat을 실행하면

tomcat-apache.conf 파일이 생성된다. 그러면 Tomcat 종료 후 tomcat.conf를 적절히 榕?후

tomcat-apache.conf를 tomcat.conf 로 rename 하여 사용해도 된다.

단 tomcat 실행은 apache 보다 먼저 해야 한다.

# TOMCAT_HOME/bin/tomcat.sh start

# mv TOMCAT_HOME/conf/tomcat-apache.conf TOMCAT_HOME/conf/tomcat.conf

tomcat 실행은 먼저 실행시킨 tomcat 을 중단하고…

# TOMCAT_HOME/bin/tomcat.sh stop

똑같은 방법으로 다시 실행하면 된다.

이것으로 tomcat 을 연동한 APM 설치가 완료 되었다.

데몬을 차례로 띄우고 테스트를 해보자.

/usr/local/tomcat/bin/startup.sh

/usr/local/apache/bin/apachectl start

웹 브라우져 상에서

http://<hostname>:8080 혹은

http://<hostname>/examples/servets/ 혹은

http://<hostname>/examples/jsp/ 가 작동되는지 확인하라.

http://<hostname>/tomcat_test

무사히 작동하면 일단 설치는 완료된것이다.

jsp 가 작동하는 디렉토리는 /usr/local/tomcat/webapps/examples 이다.

jsp 가 작동하는 또 다른 < context > 를 추가하기 위해서는 tomcat.conf 에

다음 설정을 추가 해야 합니다.

ApJservMount /<context>/root

그런뒤 /usr/local/tomcat/webapps/ 및에 <context> 를 생성 시켜준다.

그리고 생성시킨 context 디렉토리 안에 WEB-INF 디렉토리를 만들과 conf

안의 web.xml 파일을 여기에 복사하면 된다.

이렇게 여러개의 <context>를 생성시켜주면 여러개의 도메인에서 각각의

jsp 를 사용할수 있다. 하지만 보안에 문제가 될것이다.

jsp 를 사용할수 있도록 context 를 추가하는 몇가지 예제를 들어보겠다.

2.2 server.xml 및 tomcat.conf 설정 예제

server.xml 과 tomcat.conf 파일은 TOMCAT_HOME/conf 디렉토리에 있습니다.

2.2.1 context 추가 예제 – 1 (servlet 사용시)

$TOMCAT_HOMEDIR/webapps 밑에 < context > 를 추가하는 대표적인 예제이다.

*** server.xml 추가 사항 ***

server.xml 제일 밑에다가 추가한다.

<Context path=”/tomcat_test”

        docBase=”webapps/tomcat_test”

        debug=”0″

        reloadable=”true”>

</Context>

*** tomcat.conf 추사 사항 ***

tomcat.conf 제일 밑에다가 추가 한다.

Alias /tomcat_test/usr/local/tomcat/webapps/tomcat_test

<Directory “/usr/local/tomcat/webapps/tomcat_test”>

    options Indexes FollowSymLinks

</Directory>

ApJServMount /tomcat_test/servlet /tomcat_test (* 이부분에 유의해라)

<Location /tomcat_test/WEB-INF/ >

    AllowOverride None

    deny from all

</Location>

/usr/local/tomcat/webapps/pgsql 디렉토리에 WEB-INF/classes를 만들어

테스트용 웹 어플리케이션을저장한다.

URL 실행 예 : http://www.xxx.com/tomcat_test/servlet/xxx

2.2.2 context 추가 예제 – 2 (jsp 사용시)

*** server.xml 추가 사항 ***

<Context path=”/test”

docBase=”webapps/test”

debug=”0″

reloadable=”true”>

</Context>

*** tomcat.conf 추사 사항 ***

Alias /test/usr/local/tomcat/webapps/test

<Directory “/usr/local/tomcat/webapps/test”>

options Indexes FollowSymLinks

</Directory>

ApJServMount /test /test (* 이부분에 유의해라)

<Location /test/WEB-INF/ >

AllowOverride None

deny from all

</Location>

URL 실행 예 : http://www.xxx.com/test/xxx

2.2.3 각 홈디렉토리에 context 추가 예제

*** server.xml 추가 사항 ***

<Context path=”/jsp-tomcat”

docBase=”/home/zzang/www/jsp”

debug=”0″

reloadable=”true”>

</Context>

(위설정은 tomcat path 지정 부분입니다. )

*** tomcat.conf 추사 사항 ***

Alias /jsp/home/zzang/www/jsp

<Directory “/home/zzang/www/jsp”>

options Indexes FollowSymLinks

</Directory>

(위 설정은 apache server path 설정 부분입니다. )

ApJServMount /jsp-tomcat(tomcat path directory)/jsp(apache path directory)

<Location /jsp/WEB-INF/ >

AllowOverride None

deny from all

</Location>

URL 실행 예 : http://www.xxx.com/jsp-tomcat/xxx

이것으로 tomcat 을 이용한 servlets , jsp 지원 웹서버 설치는 끝난다.

마지막으로 아직 위 예제의 구동 원리에 대해 간단히 설명하고자 한다.

2.2.4 서블릿 파일의 작동 원리와 디렉토리 구조에대해 간단히 설명하겠다.

Server.xml 에서 Context 설정부분은 Web Application(Servlet이나 JSP)이 위치한

장소를 설정하며 WEB 상의 PATH(경로)를 설정한다. 기타 재컴파일된 서블릿을 자동

으로 재로딩한다.

참고로 Context(webapps,work)의 base 디렉토리는 ContextManager 의 Home이며

TOMCAT_HOME 하고는의미가 다르다. 만약 ContextManager 의 Home 이

/usr/local/jakarta-tomcat 이면 샘플용의 Web Application 이 포함된 webapps 의

절대경로는 /usr/local/jakarata-tomcat/webapps 이다. 실제로 샘플용의 web

application(servlets,JSPs) 가 들어 있는 경로는

/usr/local/jakarta-tomcat/webapps/examples/WEB-INF/classes 이다.

아래는 화일은 모든 내용은 아니지만 다음의 부분만 보자.

<Context path=”/examples” docBase=”webapps/examples”

debug=”0″

reloadable=”true”>

</Context>

<Context path=”/pgsql” docBase=”webapps/pgsql” debug=”0″

reloadable=”true”>

</Context>

<Context path=”/websql” docBase=”webapps/websql”

debug=”0″ reloadable=”false”>

</Context>

제일 위의 examples 는 샘플용의 예제가 있으며 tomcat 의 설치 후 web 상에서 바로

실행 할 수가 있다. 샘플용의예제는 examples/WEB-INF/classes 에 있다.

샘플용인 examples 의 Hello 서블릿을 실행하기 위한 위의 WEB 상의 주소는

http://your_host_address/examples/servlet/Hello 이다.

web상에서 examples를 /examples/servlet 로 사용하는 이유는 다음과 같다.

tomcat 이 시작되면 conf 디렉토리의 server.xml 을 참조한 후 tomcat-apache.conf를

자동 설정한다. 그 중에Context 에 설정된 PATH 를 참조하여 자동으로 적절하게 설정

한다. 바로 이파일(tomcat-apache.conf)에 examples 를 들어가는 경로가

examples/servlet 로 설정된다.

(여기에 대한 사항은 tomcat 실행후 이 파일을 참조하기바란다.)

tomcat-apache.conf 가 설정된 후에 아파치를 기동하면 아파치는 Tomcat에 의해 자동

설정된 tomcat-apache.conf 를 참조하여 실행된다.

reloadable=”true”는 Auto-reloadable 이며 false이면 웹 어플리케이션의

Auto-reloadable 이 되지 않는다.

쉽게 생각하면 다음과 같다.

server.xml 파일에 추가될 context 을 설정한다.

<Context path=”/tomcat”

docBase=”/home/zzang/linux/tomcat”

debug=”0″

reloadable=”true”>

</Context>

그리고 /home/zzang/linux/tomcat 이란 디렉토리를 만든다.

그밑에 WEB-INF 디렉토리를 만들고 또 그 밑에 classes 디렉토리를 만든다.

# mkdir -p /home/zzang/linux/tomcat/WEB-INF/classes

그런뒤 tomcat 을 재실행한다.

# /usr/local/tomcat/bin/tomcat.sh stop

# /usr/local/tomcat/bin/tomcat.sh start

그런다음 conf 파일 및에 새로 생성된 tomcat-apache.conf 파일을 tomcat.conf

로 만든다.

# cd /usr/local/tomcat/conf

# mv tomcat-apache.conf tomcat.conf

apache 를 재가동한다.

# /usr/local/apache/bin/apachectl start

이제 관련 서블릿 클래스 파일을 /home/zzang/linux/tomcat/WEB-INF/classes

에 넣고 브라우져에서 다음과 같이 확인한다.

http://<hostname>/tomcat/servlet/example_servlet

위의 example_servlet 는 서블릿(example_servlet.class)이며 “tomcat/WEB-INF/

classes” 에 있다.

2.3 Apache + PHP + MYSQL + SSL 설치 하기

SSL(Secure Sockets Layer)

아래의 사이트에서 프로그램을 다운받는다.

http://ftp.modssl.org/source

mod_ssl-2.8.4-1.3.20.tar.gz(아파치 버전에 맞는 버전을 선택한다.)

http://ftp.openssl.org/source

openssl-0.9.6.tar.gz

그외 mysql, apache, php버전을 받는다.

/usr/local/src/apache_1.3.20

/usr/local/src/php-4.0.5

1)mysql 설치

2)openssl 설치

#cp openssl-0.9.6.tar.gz /usr/local/src

#cd /usr/local/src

#tar xvzf openssl-0.9.6.tar.gz

#cd openssl-0.9.6

#./config

#make

#make test

#make install

(경로 /usr/local/ssl)

3)php 설치

#cd ../apache_1.3.20

#./configure –prefix=/usr/local/apache

#cd ../php-4.0.5

#CFLAGS=’-02 -I/usr/local/ssl/include’ \\

>./configure –with-apache=../apache_1.3.20 –with-mysql=/usr/local/mysql \\

–with-gd=/usr/local/gd-1.8.4 –enable-track-vars –with-language=korean \\

–disable-debug

#make

#make install

4)modssl 설치

#cp mod_ssl-2.8.4-1.3.20.tar.gz /usr/local/src

#cd /usr/local/src

#tar xvzf mod_ssl-2.8.4-1.3.20.tar.gz

#cd mod_ssl-2.8.4-1.3.20

#./configure –with-apache=../apache_1.3.20 –with-ssl=../openssl-0.9.6

5)apache 설치¬J#cd ../apache_1.3.20

#SSL_BASE=/usr/local/ssl \\

>./configure –prefix=/usr/local/apache –enable-module=ssl \\

–activate-module=src/modules/php4/libphp4.a –enable-module=so

#make

#make certificate (test)

#make install

—————————————————————-

Apache Web Server에서 키쌍과 CSR 생성방법

1.RSA를 생성한다.

#/usr/local/src/openssl-0.9.6/apps/openssl genrsa -des3 -out filename.key 1024

==>RSA private key 생성

#/usr/local/src/openssl-0.9.6/apps/openssl rsa -noout -text -in filename.key

#/usr/local/src/openssl-0.9.6/apps/openssl req -new -key filename.key \\

-out filename.csr

==>만들어진 key를 가지고 CSR생성

서버의 DN 입력

2.httpd.conf를 수정 한다.

서버에 맞게 conf화일을 수정한다.

RSA를 생성 private key가 만들어지면 apache 실행시 마다 private key를 물어본다.

이를 자동실행 하기 위해 아래와 같이 셋팅한다.

#cd /usr/local/sbin

#vi apachepass

#!/bin/sh

echo ‘*****'(pass 입력)

#chmod 100 apachepass

#vi /usr/local/apache/conf/httpd.conf

SSLPassPhraseDialog exec:/usr/local/sbin/apachepass ==>(필히 수정한다.)

3.CSR파일이 생성되면 CA에 이파일을 보낸다.

(웹사이트의 열쇠는 테스트 운용의 것과 같은 열쇠를 사용해도 상관은 없다.

CSR은 /usr/local/apache/conf/ssl.csr에 있다.

4.3의 방법데로 CA에 CSR파일을 보내면 CA에서는 증명서를 보내온다. 이 증명서를

/usr/local/apache/conf/ssl.crt 디렉토리에두고 httpd.conf의 SSLCertificateFile

이라고 하는 항목에 증명서 파일을 설정한다.

5.보안 가상 호스트 정의하기

모든 보안 가상 호스트들은 대개 httpd.conf파일의 끝부분에 위치한 <IfDefineSSL>

와</IfDefineSSL>사이에포함되어야 한다.

ex)

<VirtualHost 172.18.116.42:443>==>포트번호를 기입

DocumentRoot /home/xxxx/www

ServerName www.somewhere.com

ServerAdmin someone at

somewhere.com

ErrorLog /usr/local/apache/logs/error_log

TransferLog /usr/local/apache/logs/access_log

SSLEngine on

SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt

SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key

SSLCACertificateFile /usr/local/apache/conf/ssl.crt/ca-bundle.crt

<Files ~ “\\.(cgi|shtml|phtml|php3?|php?)$”>

SSLOptions +StdEnvVars

</Files>

<Directory “/usr/local/apache/cgi-bin”>

SSLOptions +StdEnvVars

</Directory>

SetEnvIf User-Agent “.*MSIE.*” nokeepalive ssl-unclean-shutdown

CustomLog /usr/local/apche/logs/ssl_request_log \\

“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\”%r\\” %b”

</VirtualHost>

===>위 설정중 가장 중요한 지시자는 SSLEngine on, SSLCertificateFile,

SSLCertificateKeyFile과 많은 경우에 있어 SSLCACertificateFile지이다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

2 Responses

  1. 2022년 6월 19일

    3seasoned

  2. 2023년 1월 27일

    2condone

페이스북/트위트/구글 계정으로 댓글 가능합니다.