Posted on 2006/08/03 13:35
Filed Under 리눅스기술문서/서버관련 조회수: view 5259

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

      Apache2 + Mysql4.x + Php4 + tomcat5 + jk2 연동 Web 서버 환경 구축

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

*  위 문서는 클루닉스 기술부 세미나용으로 제작된 문서 입니다.
*  외부 유출을 금합니다.
*
*                                    작성일 : 2006년 8월 1일
*                                    작성자 : 시스존 /서 진우


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

### 주요 내용 ###

1. Apache2 + php4 + mysql 환경 구축
2. Jk2를 이용한 APM 과 Tomcat 연동하기
3. APMJ의 virtualhost 구축하기  


### 설치 소프트웨어 구성 ###

Redhat Enterprise Server 4 (update 3)
httpd-2.2.0.tar.gz
php-4.3.10.tar.bz2
mysql-4.0.24.tar.gz
apache-tomcat-5.5.12.tar.gz
jakarta-tomcat-connectors-jk2-2.0.4-src.tar.gz
jdk-1_5_0_06-linux-i586.bin
libpng-1.2.12.tar.gz
imap-2004.tar.Z



1. Apache2 + php4 + mysql 환경 구축


- apache2 설치 하기

[root@node04 httpd-2.2.0]# ./configure --prefix=/usr/local/apache2
[root@node04 httpd-2.2.0]# make && make install

/usr/local/apache2 에 정상적인 설치 상태를 확인 한다.

- mysql DB 설치 및 설정 하기

[root@node04 mysql-4.0.24]# ./configure --prefix=/usr/local/mysql \\
--localstatedir=/usr/local/mysql/data --with-mysqld-user=mysql --with-charset=euc_kr

[root@node04 mysql-4.0.24]# make && make install

/usr/local/mysql 에 설치 상태를 확인 한다.

[root@node04 mysql-4.0.24]# /usr/local/mysql/bin/mysql_install_db
[root@node04 mysql-4.0.24]# userdel -r mysql
[root@node04 mysql-4.0.24]# groupdel mysql
[root@node04 mysql-4.0.24]# groupadd mysql
[root@node04 mysql-4.0.24]# adduser -g mysql -d /usr/local/mysql/data -s /bin/false mysql
[root@node04 mysql-4.0.24]# chown -R mysql. /usr/local/mysql/data

[root@node04 mysql-4.0.24]# cp $SRC_PATH/mysql-4.0.24/support-files/my-medium.cnf /etc/my.cnf

[root@node04 mysql-4.0.24]# vi /usr/local/mysql/share/mysql/mysql.server
--------------------------------------------------------------------------------
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file

위 행을 찾아서 뒤에 아래 옵션을 추가로 붙여준다.

--language=korean --safe-show-database &

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

[root@node04 mysql-4.0.24]# cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
[root@node04 mysql-4.0.24]# ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc3.d/S90mysqld

[root@node04 mysql-4.0.24]# /etc/rc.d/init.d/mysqld start

mysql root password 설정한다.

초기에는 mysql root 패스워드가 Null 상태로 셋팅된다.
보안을 위해 Mysql 설치 후에 반드시 mysql root 암호를 변경해 주어야 한다.

[root@node04 mysql-4.0.24]# mysqladmin -u root password '패스워드'




- php4 설치 하기

PHP에서 사용되어지는 기본 Library를 설치 한다. zlib, gd, libpng, libjpeg ..
등등 여러가지 라이브러리가 있는데 운영체제에 기본 설치된 경우도 있고, 그렇지
않은 경우도 있다. libpng 의 경우 운영체제에 설치 되어 있다 하더라도 PHP에서
경로를 찾지 못해 설치 시 문제가 될 수 있으니 별도로 설치하는 것을 권장한다.


[root@node04 libpng-1.2.12]# cp scripts/makefile.linux Makefile
[root@node04 libpng-1.2.12]# make test && make install
[root@node04 libpng-1.2.12]# vi /etc/ld.so.conf


PHP를 이용하여 웹 메일 구축 시 주로 Imap 을 많이 사용하게 된다. PHP와 Imap
라이브러리가 연동되면 PHP 상에서 Imap 을 이용할 수 있는 여러가지 함수를
사용할 수 있게 된다.

[root@node04 apmj]# tar xzvf imap-2004.tar.Z
[root@node04 apmj]# mv imap-2004 /usr/local/imap
[root@node04 apmj]# cd /usr/local/imap/
[root@node04 imap]# make slx SSLTYPE=none
[root@node04 imap]# cp imapd/imapd /usr/sbin
[root@node04 imap]# cp ipopd/ipop3d /usr/sbin

[root@node04 imap]# vi /etc/xinetd.d/imapd
------------------------------------------------------------------------------------
service imap
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
log_on_success += DURATION USERID
log_on_failure += USERID
nice = -2
}
------------------------------------------------------------------------------------

[root@node04 imap]# vi /etc/xinetd.d/ipop3d
------------------------------------------------------------------------------------
service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/ipop3d
log_on_success += USERID
log_on_failure += USERID
nice = -2
}

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

[root@node04 imap]# /etc/rc.d/init.d/xinetd restart


다른 라이브러리의 경우 각 설치 방법에 따라 설치 하고 아래와 같이 PHP 컴파일 시
옵션으로 해당 라이브러리를 추가하도록 한다.


[root@node04 php-4.3.10]# ./configure --with-apxs2=/usr/local/apache2/bin/apxs \\
--with-mysql=/usr/local/mysql --with-jpeg --with-png-dir=/usr/local/lib \\
--with-gif-dir=/usr/lib --with-zlib --with-gd --with-freetype --with-xml \\
--with-mod_charset --with-language=korean --with-charset=euc_kr \\
--enable-ftp --enable-sockets --disable-debug --enable-system \\
--enable-track-vars --enable-calendar --enable-magic-quotes \\
--with-imap=/usr/local/imap

[root@node04 php-4.3.10]# make && make install


2. Jk2를 이용한 APM환경에  Tomcat 연동하기

- java 환경 구축

tomcat5.x 이상에서는 JDK 1.5 이상 버전을 권장한다.

[root@node04 apmj_new]# ./jdk-1_5_0_06-linux-i586.rpm.bin
.
.
For inquiries please contact: Sun Microsystems, Inc., 4150 Network
Circle, Santa  Clara, California 95054, U.S.A.  (LFI#141623/Form
ID#011801)

Do you agree to the above license terms? [yes or no]
yes              

.
.
Creating jdk1.5.0_06/lib/tools.jar
Creating jdk1.5.0_06/jre/lib/rt.jar
Creating jdk1.5.0_06/jre/lib/jsse.jar
Creating jdk1.5.0_06/jre/lib/charsets.jar
Creating jdk1.5.0_06/jre/lib/ext/localedata.jar
Creating jdk1.5.0_06/jre/lib/plugin.jar
Creating jdk1.5.0_06/jre/lib/javaws.jar
Creating jdk1.5.0_06/jre/lib/deploy.jar

Done.

[root@node04 apmj_new]# mv jdk1.5.0_06/ /usr/local
[root@node04 apmj_new]# cd /usr/local
[root@node04 local]# ln -sf jdk1.5.0_06/ java
[root@node04 local]# ln -sf /usr/local/jdk1.5.0_06/jre/ jre


/etc/profile 에 java 환경 설정을 추가한다.

[root@node04 local]# vi /etc/profile
------------------------------------------------------------------------------------
.
export JAVA_HOME=/usr/local/java
export PATH=/usr/local/java/bin:$PATH
------------------------------------------------------------------------------------

같은 쉘환경에서 바로 작업을 진행하기 위해 java 환경 설정을 적용한다.

[root@node04 ]# export JAVA_HOME=/usr/local/java
[root@node04 ]# export PATH=/usr/local/java/bin:$PATH


[root@node04 ]# java -version
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Server VM (build 1.5.0_06-b05, mixed mode)

- tomcat5 설치 하기

tomcat 은 플랫폼 별 바이너리 패키지로 제공됨으로 압축을 풀고 사용할 경로에
옮겨 두면 된다.

[root@node04 apmj_new]# tar xzvf apache-tomcat-5.5.12.tar.gz
[root@node04 apmj_new]# mv apache-tomcat-5.5.12 /usr/local/tomcat


tomcat 에 대한 환경 설정을 정의한다.

[root@node04 apmj_new]# vi /etc/profile
------------------------------------------------------------------------------------
.
.
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
------------------------------------------------------------------------------------

- jakarata-tomcat-connectors-jk2 설치 하기

jakarata-tomcat-connectors-jk2 는 apache 와 tomcat을 mod_jk2 란 apache module을 이용
하여 연동을 시켜 준다. tomcat 의 경우 하나의 쓰레드에서 여러개의 작업을 처리 함으로
대용량의 서비스 요청 시 문제가 발생 할 수 있다. 또한 tomcat 자체에서 제공하는 HTTP
처리 엔진의 경우 apache 에 비해 성능 효과가 낮기 때문에 일반적인 http 요청의 경우
apache 에서 처리 하고 jsp 처리의 경우 tomcat 으로 전달하는 방법을 많이 사용하게 된다.
이런 시스템을 구축 하기 위해 mod_jk2 를 이용하여 apache 와 tomcat 을 연동하게 된다.

[root@node04 apmj_new]# tar xzvf jakarta-tomcat-connectors-jk2-2.0.4-src.tar.gz
[root@node04 apmj_new]# cd jakarta-tomcat-connectors-jk2-2.0.4-src/jk/native2/
[root@node04 native2]# ./configure --with-apxs2=/usr/local/apache2/bin/apxs
[root@node04 native2]# make
[root@node04 native2]# cd ../build/jk2/apache2/
[root@node04 apache2]# /usr/local/apache2/bin/apxs -n jk2 -i mod_jk2.so

이제 apache 의 modules 디렉토리 밑에 mod_jk2.so 모듈이 생성되었는지 확인한다.

[root@node04 ~]# ls /usr/local/apache2/modules/mod_jk2.so
/usr/local/apache2/modules/mod_jk2.so


- httpd.conf 설정 히기

[root@node04 ~]# vi /usr/local/apache2/conf/httpd.conf
-------------------------------------------------------------------------------
.
.
# Example:
# LoadModule foo_module modules/mod_foo.so
#

LoadModule jk2_module modules/mod_jk2.so
LoadModule php4_module        modules/libphp4.so
.
.

ServerName 192.168.123.64
.
.


# 무난한 Tomcat 연동 테스트를 위해서는 반드시 추가해 주도록 한다.

<Directory "/usr/local/tomcat/webapps">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
.
.

<IfModule dir_module>
    DirectoryIndex index.html index.jsp index.php
</IfModule>
.
.

    AddType application/x-httpd-php .html .php3 .php4 .inc .phtml .php .ph
    AddType application/x-httpd-php-source .phps
.
.
-------------------------------------------------------------------------------


[root@node04 ~]# vi /usr/local/apache2/conf/extra/httpd-autoindex.conf
-------------------------------------------------------------------------------
.
.
# We include the /icons/ alias for FancyIndexed directory listings.  If
# you do not use FancyIndexing, you may comment this out.
#
Alias /icons/ "/usr/local/apache2/icons/"
Alias /jsp-examples/ "/usr/local/tomcat/webapps/jsp-examples/"
Alias /servlets-examples/ "/usr/local/tomcat/webapps/servlets-examples/"
.
.
-------------------------------------------------------------------------------

[root@node04 ~]# vi /usr/local/apache2/conf/workers2.properties
-------------------------------------------------------------------------------
[channel.socket:localhost:8009]
port=8009
host=localhost

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

[uri:/*.jsp]
worker=ajp13:localhost:8009
-------------------------------------------------------------------------------

workers2.properties 파일은 jsp 환경을 제어하는 설정으로 [url:/*] 와 같이 정의를
할경우는 모든 확장자 파일(html,jsp,php)을 tomcat 엔진으로 전달하기 때문에 apache
와의 연동의 의미가 떨어지게 된다. 실제 html 등의 파일을 브라우저로 불려와서정상적
으로 페이지가 로딩되어도 이는 apache 에서 로딩된것이 아니라 tomcat 의 HTTP 처리
엔진에서 처리를 시킨 결과이다. 만일 PHP 확장 파일을 로딩할 경우 tomcat 에서는 php
처리가 되지 않기 때문에 에러가 발생 하게 된다.

위의 설정과 같이 [uri:/*.jsp] 의 경우에는 확장자가 jsp 의 경우에만 tomcat 엔진으로
전달하고 나머지 파일은 apache 자체에서 처리 가능토록 설정 한다.

이제 해당 프로그램을 시작 시켜 본다.

[root@node04 ~]# /usr/local/apache2/bin/apachectl start
[root@node04 ~]# /usr/local/tomcat/bin/startup.sh


httpd.conf 의 Document Root 에 정의된 디렉토리에 html, php 파일을 생성 후 브라우저
로 테스트를 해보도록 한다.

http://192.168.123.64/test.html  
   -> httpd.conf 의 Document Root 의 test.html 파일 로딩 (Apache2 엔진에서 처리)
http://192.168.123.64/test.php  
   -> httpd.conf 의 Document Root 의 test.php 파일 로딩 (Apache2 엔진에서 처리)
http://192.168.123.64/index.jsp  
   -> /usr/local/tomcat/webapps/ROOT 의 index.jsp 파일 로딩 (Tomcat5 엔진에서 처리)
http://192.168.123.64:8080
   -> /usr/local/tomcat/webapps/ROOT 의 index.jsp 파일 로딩 (Tomcat5 엔진에서 처리)


3. APMJ 의 VirtualHost 환경 구축 하기

지금까지의 설치 및 설정은 기본 apache 의 Document Root 의 데이터와 Tomcat 의
Webapps/ROOT 밑의 데이터만 처리 가능도록 구성된 기본 설정이다.
만일 하나의 시스템에 여러개의 도메인이 존재할 경우 각각의 홈디렉토리 밑에 데이터를
가지고 각 도메인 별로 서비스를 하고자 할때 VirtualHost 환경이 필요하게 된다.

APMJ 구축 환경에서 VirtualHost를 구현하는 방법에 대해 설명하도록 하겠다.

- apache2 virtualhost config

[root@node04 ~]# vi /usr/local/apache2/conf/httpd.conf
-------------------------------------------------------------------------------
.
.
# User home directories
Include conf/extra/httpd-userdir.conf
.
.

# Virtual hosts
Include conf/extra/httpd-vhosts.conf
.
-------------------------------------------------------------------------------

사용자 홈 디렉토리의 데이터를 apache 에서 서비스 가능토록 권한을 조정한다.

[root@node04 ~]# vi /usr/local/apache2/conf/extra/httpd-userdir.conf
-------------------------------------------------------------------------------
UserDir www

<Directory /home/*/www>
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>
--------------------------------------------------------------------------------

apache 의  virutualhost 설정을 한다.

[root@node04 ~]# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
-------------------------------------------------------------------------------
NameVirtualHost 192.168.123.64

<VirtualHost 192.168.123.64>
    ServerAdmin webmaster@node04.clunix.eng
    DocumentRoot /home/alang/www
    ServerName node04.clunix.eng
</VirtualHost>
<VirtualHost 192.168.123.64>
    ServerAdmin webmaster@www04.clunix.eng
    DocumentRoot /home/clunix/www
    ServerName www04.clunix.eng
</VirtualHost>

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

- tomcat5 virtualhost 설정

[root@node04 ~]# vi /usr/local/apache2/conf/workers2.properties
------------------------------------------------------------------------------
[channel.socket:localhost:8009]
port=8009
host=localhost

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

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

# 해당 도메인 별로 아래와 같이 설정을 추가 한다.

[uri:node04.clunix.eng/*.jsp]
worker=ajp13:localhost:8009

[uri:www04.clunix.eng/*.jsp]
worker=ajp13:localhost:8009
-------------------------------------------------------------------------------

[root@node04 ~]# vi /usr/local/tomcat/conf/server.xml
-------------------------------------------------------------------------------
        <!--
        <Valve className="org.apache.catalina.valves.ByteBufferAccessLogValve"
                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
                 pattern="common" resolveHosts="false"/>
        -->

      </Host>


      <!-- 이부분 추가 -->

    <Host name="node04.clunix.eng">
        <Context path="" docBase="/home/alang/www" reloadable="true"/>
        <Alias>www04.clunix.eng</Alias>
    </Host>


    <Host name="www04.clunix.eng">
        <Context path="" docBase="/home/clunix/www" reloadable="true"/>
        <Alias>www04.clunix.eng</Alias>
    </Host>

    <!-- 이부분 추가 끝 -->

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


[root@node04 ~]# /usr/local/apache2/bin/apachectl stop
[root@node04 ~]# /usr/local/tomcat/bin/stutdown.sh
[root@node04 ~]# /usr/local/apache2/bin/apachectl start
[root@node04 ~]# /usr/local/tomcat/bin/startup.sh


Tomcat 의 VirtualHost 설정을 하지 않으면 모든 jsp 확장 파일은
/usr/local/tomcat/webapps/ROOT 에 위치를 시켜야 tomcat 엔진에서 인식이 가능하다.
만일 여러개의 도메인에서 모두 Tomcat 의 jsp 서비스를 사용할 경우 파일 경로가 중복
되어지는 문제가 발생한다.

위와 같이 처리를 하면 각 도메인 별 홈디렉토리에 있는 jsp 파일을 인식할 수 있게
된다.


자 이제 간단한 테스트를 해보도록 한다.

/home/alang/www 밑에 3개의 파일을 만든다.

# vi /home/alang/www/test.html
-------------------------------------------------------------------------------
<html>
<body>
This Page is HTML Page on node04.clunix.eng
</body>
</html>
-------------------------------------------------------------------------------

# vi /home/alang/www/test.php
-------------------------------------------------------------------------------
<?
echo ("This Page is PHP Page on node04.clunix.eng");
?>
-------------------------------------------------------------------------------

# vi /home/alang/www/test.jsp
-------------------------------------------------------------------------------
<%

        out.println("This Page is JSP Page on node04.clunix.eng");

%>
-------------------------------------------------------------------------------

/home/clunix/www 밑에 3개의 파일을 만든다.

# vi /home/clunix/www/test.html
-------------------------------------------------------------------------------
<html>
<body>
This Page is HTML Page on www04.clunix.eng
</body>
</html>
-------------------------------------------------------------------------------

# vi /home/clunix/www/test.php
-------------------------------------------------------------------------------
<?
echo ("This Page is PHP Page on www04.clunix.eng");
?>
-------------------------------------------------------------------------------

# vi /home/clunix/www/test.jsp
-------------------------------------------------------------------------------
<%

        out.println("This Page is JSP Page on www04.clunix.eng");

%>
-------------------------------------------------------------------------------

이제 브라우저로 virtualhost 가 재대로 되었는지를 확인한다.

http://node04.clunix.eng/test.html
http://node04.clunix.eng/test.php
http://node04.clunix.eng/test.jsp
http://www04.clunix.eng/test.html
http://www04.clunix.eng/test.php
http://www04.clunix.eng/test.jsp


참고 : clunix.eng 도메인은 실제 존재하지 않는 도메인임으로 클라이언트 시스템의
hosts 파일에 해당 도메인을 추가 하도록 한다.

192.168.123.64                node04.clunix.eng
192.168.123.64                www04.clunix.eng

이것으로 apache2, php4, tomcat5 연동 시스템 구축에 대한 기술 설명을 마치도록
하겠습니다.

열심히 공부 하시길 바랍니다. 특히 심!! 민!! 수!! 군...
Writer profile
author image
-아랑 -
2006/08/03 13:35 2006/08/03 13:35

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우
Twitter :@muchunalang

Counter

• Total
: 4244801
• Today
: 951
• Yesterday
: 1584