OpenSSL Installation with PHP, Apache, ... | |||
| |||
김 동민 dmkim@scai.snu.ac.kr Revision History Revision v0.1 2001년 3월 25일 본 문서는 가장 널리 쓰이는 웹서버인 아파치에서 PHP, php optimizer인 Zend Optimizer, MySQL 데이타 베이스 서버를 설치하고, ssl protocol을 지원할 수 있도록 mod_ssl을 설치하는 간단한 방법을 소개한다. 이 글은 kldp에 있는 백명훈님의 'MySQL + Apache + PHP4 + IMAP + Zend Optimizer 설치하기' 를 기본으로 하고 있다. -------------------------------------------------------------------------------- 준비물 설치를 시작하기전에 각 패키지들을 다운로드 받도록 하자. 여러 형태의 패키지가 존재하지만, 기본적으로 타르볼을 받아 직접 컴파일 하도록 하자. 이렇게 하는 특별한 이유는 없다. 그냥 재미있으니까...^^; 설치 플랫폼은 인텔 계열 linux를 가정한다. 다음의 패키지들을 다운 받도록 한다. 이들은 이글이 쓰여질 당시까지 최신 버전들이다. Apache - apache_1.3.19.tar.gz ( http://httpd.apache.org/dist/) PHP - php-4.0.4pl1.tar.gz ( http://www.php.net/downloads.php) Zend Optimizer - ZendOptimizer-1.0.0-PHP_4.0.4-Linux_glibc21-i386.tar.gz ( http://www.zend.com/download.php) MySQL - mysql-3.23.35.tar.gz ( http://www.mysql.com/downloads/mysql-3.23.html) OpenSSL - openssl-0.9.6.tar.gz ( http://www.ssl.org/source/) mod_ssl - mod_ssl-2.8.1-1.3.19.tar.gz ( http://www.modssl.org/source/) -------------------------------------------------------------------------------- 설치하기 설치에는 약간의 순서가 필요하다. 이는 각 패키지들이 전적으로 독립된 것이 아니라 약간의 의존성을 가지고 있기 때문이다. 우리는 다음 순서를 따라서 설치하도록 하자. MySQL 설치 --> OpenSSl 설치 --> mod_ssl 설정 --> Apache 설정 --> PHP4 설치 --> Apache 설치 --> Zend Optimizer 설치 먼저 각 소스들을 받아놓은 디렉토리로 이동해서 압축을 풀어놓도록 하자. 여기서는 /usr/local/src에서 작업하는 것으로 가정한다. gzip -dc mysql-3.2.32.tar.gz | tar xvf - gzip -dc openssl-0.9.6.tar.gz | tar xvf - gzip -dc mod_ssl-2.8.1-1.3.19.tar.gz | tar xvf - gzip -dc apache_1.3.19.tar.gz | tar xvf - gzip -dc php-4.0.4pl1.tar.gz | tar xvf - gzip -dc ZendOptimizer-1.0.0-PHP_4.0.4-Linux_glibc21-i386.tar.gz | tar xvf - MySQL 설치 먼저 MySQL의 소스 디렉토리로 이동하고, 컴파일 후 설치한다. [root@localhost src]# cd mysql-3.23.32 [root@localhost mysql-3.23.32]# ./configure --prefix=/usr/local/mysql > --with-charset=euc_kr . . . [root@localhost src]# make; make install MySQL이 이상없이 설치되면, MySQL의 기본 테이블을 생성시킨다. [root@localhost mysql-3.23.32]# cd /usr/local/mysql/bin [root@localhost bin]# ./mysql_install_db MySQL 시동 스크립트를 약간 편집한다. /usr/local/mysql/share/mysql/mysql.server에서 '$bindir/safe_mysqld...'으로 시작되는 부분을 찾아서 '--language=korean'을 추가한다. mysql.server에 실행 퍼미션을 주고, 실행가능한 경로에 복사한다. 여기서는, /usr/local/bin으로 하겠다. [root@localhost mysql]# cp ./mysql.server /usr/local/bin [root@localhost mysql]# chmod 755 /usr/local/bin/mysql.server 이제 MySQL의 설치가 완료되었다. OpenSSl 설치 apache의 mod_ssl을 설치하기 전에 OpenSSl library를 설치할 필요가 있다. 단, 여기서는 이 패키지를 완전히 설치하지는 않고, mod_ssl이 사용할 수 있도록 해 놓는 정도로만 한다. OpenSSl의 소스 디렉토리로 이동해서 컴파일 해 놓는다. [root@localhost src]# cd openssl-0.9.6 [root@localhost openssl-0.9.6]# ./config [root@localhost openssl-0.9.6]# make . . . 이상없이 컴파일되면, 그대로 두고 다음 단계로 넘어한다. mod_ssl 설정 이 단계에서는 특별히 컴파일하는 과정이 있지 않다. mod_ssl의 소스를 apache의 소스트리에 적용시키기만 하면 된다. 한가지 주의할 점은 '--with-apache', '--with-openssl' 옵션은 각 소스의 위치라는 점이다. [root@localhost src]# cd mod_ssl-2.8.1-1.3.19 [root@localhost mod_ssl-2.8.1-1.3.19]# ./configure > --with-apache=/usr/local/src/apache_1.3.19 > --with-openssl=/usr/local/src/openssl-0.9.6 . . . 약간의 환영 메시지가 뜰 것인데, 특별한 이상이 없다면 성공적인 셈이다. Apache 설정 본격적으로 apache를 설치하기 전에 configure 스크립트를 한번 실행시킬 필요가 있다. 이는 PHP의 configure에 필요하기 때문이다. 여기서는 apache를 /usr/local/apache 에 설치한다고 가정하자. [root@localhost src]# cd apache_1.3.19 [root@localhost apache_1.3.19]# ./configure --prefix=/usr/local/apache . . . PHP4 설치 이제 PHP의 소스 디렉토리로 이동해서 컴파일하고 설치해보자. [root@localhost src]# cd php-4.0pl1 [root@localhost php-4.0pl1]# ./configure > --with-config-file-path=/usr/local/apache/conf > --disable-debug > --with-mysql=/usr/local/mysql > --with-apache=/usr/local/src/apache_1.3.19 > --enable-track-vars . . . [root@localhost php-4.0pl1]# make; make install . . . 역시 특별한 이상이 없다면, PHP4가 성공적으로 설치된 것이다. 옵션을 줄 때 주의할 점은 '--with-mysql'의 경우엔 앞서 MySQL을 설치한 디렉토리, '--with-apache'의 경우엔 apache의 소스 디렉토리를 명시한다는 것이다. '--disable-debug' 옵션은 다음에 설치할 Zend Optimizer를 위한 것이다. Apache 설치 이제 main인 apache를 설치할 차례이다. 앞서와 같이 configure, make, make install을 차례로 시행하는데, configure 옵션 마지막에서 '...libphp4.a'를 정확히 입력하도록 하고, 만일 configure 실행 단계에서 'SSL_BASE..' 어쩌고 하는 메시지가 뜨면, mod_ssl을 apache 소스트리에 적용하는 단계에서 '--with-openssl' 옵션을 바르게 주지 않은 경우이다. 이때는 'export SSL_BASE=/usr/local/src/openssl-0.9.6' 정도로 SSL_BASE를 지정해 주고 다시 시도해 보도록 하자. [root@localhost src]# cd apache_1.3.19 [root@localhost apache_1.3.19]# ./configure > --prefix=/usr/local/apache > --enable-module=ssl > --activate-module=src/modules/php4/libphp4.a . . . [root@localhost apache_1.3.19]# make . . . 여기까지 오면 일단 apache 컴파일은 성공적인 셈이다. 다음은 선택적으로 ssl에서 사용할 인증서(?)를 만드는 과정이다. apache를 시동할때마다, password 비슷한 것(?)을 입력하기 귀찮은 사람은 권하지는 않지만, 건너 뛰어도 좋다. [root@localhost apache_1.3.19]# make certificate . . . 이와 같이 하면, 몇가지 질문이 이어진다. 화면을 잘 읽고 적당한 단어들을 입력하면 되는데, 마지막에 Enter PEM pass phrase: 라는 질문에 적은 문구를 잘 기억하도록 한다. (이것이 나중에 apache를 시동할 때 쓰일 패스워드라고 생각하면 편할 것이다.) 이제 apache를 설치하도록 하자. [root@localhost apache_1.3.19]# make install . . . Zend Optimizer 설치 이제 설치부분의 막바지에 다다랐다. PHP의 성능을 높여주는 Zend Optimizer를 설치해 보도록 하자. 앞서 풀어 놓았던 디렉토리를 통째로 옮기면 된다. [root@localhost src]# mkdir /usr/local/Zend [root@localhost src]# mv ZendOptimizer-1.0.0-PHP_4.0.4-Linux_glibc21-i386 > /usr/local/Zend/lib 이제 모든 설치가 끝났다. 다음에서 몇가지 환경 설정과 점검을 해보도록 하자. -------------------------------------------------------------------------------- 마지막 점검하기 앞서 설치한 패키지들이 이상없이 잘 설치되었나 검사하고, 실행에 필요한 몇가지 설정을 추가하도록 하자. 환경 설정하기 전에 풀어둔 PHP 소스 디렉토리로 이동해서 php.ini-dist 파일을 /usr/local/apache/conf 디렉토리로 복사하자. [root@localhost src]# cd php-4.0pl1 [root@localhost php-4.0pl1]# cp php.ini-dist /usr/local/apache/conf/php.ini 복사한 php.ini 파일에 Zend Optimizer를 위한 설정을 추가한다. zend_optimizer.optimization_level=15 zend_extension="/usr/local/Zend/lib/ZendOptimizer.so" 이제 apache의 설정 파일인 /usr/local/apache/conf/httpd.conf를 편집한다. 먼저 시작 페이지 설정이다. <IfModule mod_dir.c> DirectoryIndex index.php index.html </IfModule> index.php외에 필요한 것들을 추가하면 된다. 다음은 mime type이다. 설정 파일을 찾아보면 PHP를 위한 설정이 주석으로 막혀있는 것을 발견할 수 있을 것이다. 주석을 해제하도록 하자. AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps 다음은 SSL을 사용하기 위한 설정이다. 서버를 따로 띄우는 등 여러가지 방법이 있지만, 여기서는 apache의 virtual host 기능을 이용하도록 하자. 설정 파일에서 'Listen 80' 하는 부분을 찾아 아래에 'Listen 443' line을 추가한다. 이는 ssl이 기본적으로 443번 포트를 사용하기 때문이다. Listen 80 Listen 443 마지막 부분에 ssl protocol을 사용할 virtual host에 대한 설정을 추가한다. SSLSessionCache dbm:/var/run/ssl.scache SSLMutex file:/var/run/ssl.mutex SSLLog /var/log/ssl.log <VirtualHost 127.0.0.1:443> SSLEngine on SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key SSLVerifyClient none ServerName localhost.localdomain ServerAdmin root@localhost.localdomain DocumentRoot /usr/local/apache/htdocs ErrorLog logs/localhost-secure-error_log CustomLog logs/localhost-secure-access_log common </VirtualHost> 약간 부연하자면, <VirtualHost x.x.x.x:443> 에서는 사용하는 ip(혹은 server name)를 적고, 'DocumentRoot'에는 ssl을 사용하는 virtual host가 서비스할 문서 디렉토리, 기타 서버에 국한된 log 파일이름 등이다. 자세한 설정은 apache의 virtual host 설정 문서를 참고하도록 하자. 테스트 하기 이제 apache를 시동해 보자. [root@localhost src]# cd /usr/local/apache/bin [root@localhost bin]# ./apachectl start ./apachectl start: httpd started 위와 같이 되면 정상적으로 실행된 것이다. 만일 apache를 설치하는 단계에서 'make certificate'을 실행했다면, 다음과 같은 문장이 보일 것이다. Apache/1.3.19 mod_ssl/2.8.1 (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide us with the pass phrases. Server 127.0.0.1:443 (RSA) Enter pass phrase: 설치 단계에서 기억하라고 했던 단어를 입력하면 앞서와 같이 실행된다. Ok: Pass Phrase Dialog successful. ./apachectl start: httpd started apache가 정상적으로 실행되면, 다음과 같은 PHP script를 만들어서 php module을 테스트해보자. <? phpinfo (); ?> apache 설정 파일에서 DocumentRoot 부분을 고치지 않았다면 /usr/local/apache/htdocs 가 기본 문서 디렉토리일 것이다. 위의 스크립트를 /usr/local/apache/htdocs/test.php 로 저장하고, browser로 'http://127.0.0.1/test.php'를 불러 보자. PHP에 대한 정보가 출력되면, php module이 정상적으로 작동하는 것이다. 앞서 ssl을 사용하는 virtual host에 대한 DocumetRoot 부분을 고치지 않았다면 이 역시 같은 디렉토리를 기본 문서 디렉토리로 사용한다. browser에서 'https://127.0.0.1/test.php'를 불러본다. 똑같은 내용이 보이기 전에 ssl 연결을 시사하는 창이 하나 뜨게 될 것이다. 이후, 앞서와 같은 화면을 볼 수 있다면, ssl module 역시 정상적으로 작동하는 것이다. 이제 모든 것을 마쳤다. 여러 가지 설정을 자신이 원하는 대로 조정하고 잘 사용하면 될 것이다. 이 문서에 부족한 부분이 있다면, 역시 원하는 대로 추가/ 삭제/ 수정해서 재배포할 수 있다. 이 문서의 다음 버전에서는 MySQL 테스트와, PHP + MySQL 연동 테스트 정도를 추가하고자 한다. | |||
| |||
| |||
로그인을 하시면 댓글을 등록 할 수 있습니다. |
OTHER POSTS IN THE SAME CATEGORY window 스스로 닫기 |