개발/Linux 계열

Apache+SSL+Tomcat 설치

좋은느낌/원철 2009. 6. 10. 20:24

아파치 웹서버를 운영하는데 있어서 기본이 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)