BigAdmin System Administration Portal
특집 기사
Print-friendly VersionPrint-friendly Version

Solaris 10 OS 및 Solaris Express용 SAMP(Solaris, Apache 2, MySQL 5 및 PHP 5) 설정

Neal Pollack, 2006년 10월

SAMP 서버(Solaris, Apache 2, MySQL, PHP)에서 Solaris 10 OS를 사용하는 방법에 대해 설명하는 많은 문서와 블로그를 인터넷에서 찾을 수 있습니다. 하지만 이 기사의 내용은 대부분 이전 버전의 소프트웨어 패키지에 해당하며, 요즘에 보편적으로 사용되는 PHP 언어는 포함되지 않습니다. 내용 중 일부에는 여러분들이 프로세스를 이해할 수 있도록 도와주는 자세한 내용이나 예가 없을 수도 있습니다.

시작하기 전에 Solaris 10 OS 또는 Solaris Express의 설치에 Apache 2.0.x 및 MySQL 4를 포함하고 있음을 분명히 밝혀야 합니다. PHP 4는 Solaris 10 OS의 Companion CD에도 들어 있습니다. 하지만 현재로서는 Solaris OS가 PHP 5 또는 MySQL 5를 번들로 제공하지 않습니다.

이 기사에서는 기술 사용자에게 고유한 최신 PHP5 복사본을 작성하고, 복사본을 Solaris OS에 포함된 Blastwave의 MySQL5와 Apache2 버전으로 통합하는 방법에 대해 보여 줍니다. 하지만 소프트웨어 컴파일을 원치 않고, 최적화되어 성능이 높은 이 패키지의 Sun 빌드를 선호하는 사용자의 경우에는 http://cooltools.sunsource.net/coolstack/index.html 및/또는 http://sunfreeware.com/coolstack.html에서 Sun의 "Ready to Run" Cool Stack 패키지를 확인하십시오.

위의 패키지를 사용하여 SAMP 서버를 구성하기 위해 작성된 이전 기사는 BigAdmin 포털의 커뮤니티 게시물에서 찾을 수 있습니다. 하지만 이 기사에는 중요한 세부 정보가 없으며, 이전 버전의 Apach 1.3을 사용합니다. Mel Lester의 기사(BigAdmin 포털에서도 참조됨)가 잘 작성되었으며, 좀 더 많은 세부 정보를 보여 주고, 우리가 원하는 항목이 거의 들어 있습니다. 한 가지 예외는 Lester의 기사에서는 Solaris 10 OS에 번들로 제공되는 MySQL 4 버전을 사용하고, 우리가 선호하는 현재 MySQL 버전 5.x를 사용하지 않는다는 점입니다.

우리 중 대부분이 소프트웨어 재구축을 원하는 주된 이유로는 최신 패키지 버전을 얻고자 하기 때문입니다. 이 패키지에는 개선된 성능, 버그 및 보안 수정, 및 다양한 PHP 웹 응용 프로그램에 필요한 기능을 제공하는 컴파일 시 옵션이 포함되어 있습니다.

이 실습의 경우 설치 시 사용되는 소프트웨어는 다음과 같습니다.

  • Apache - Solaris 설치와 함께 제공됨
  • MySQL 5 - pkg-get을 사용하여 설치(Blastwave.org)
  • 최신 PHP 5 - php.net에서 다운로드하고 컴파일됨

주로 GNU 도구 체인을 사용하여 32비트 모드로 구축하겠습니다.

아래의 절차를 통해 위의 응용 프로그램 3개가 통합되어 Solaris 10 OS, Apache, PHP 5 및 MySQL 5 웹 응용 프로그램을 사용할 수 있게 됩니다.

작업 단계는 아래와 같습니다.

1. Solaris 10 OS, Solaris Express/Nevada 또는 OpenSolaris를 설치합니다.

2. 시스템에 네트워크가 지정되어 있어 인터넷에 연결할 수 있고 정적 IP 주소를 사용 중인지 확인합니다. 네트워크 구성 지원이 필요한 경우에는 System Administration Guide: IP Services 설명서를 검토하십시오.

3. Blastwave.org에서 MySQL 5를 설치하려고 합니다. 웹 브라우저를 열고 Blastwave.org's step-by-step guide로 이동한 다음 1-7단계를 수행합니다. 간단한 작업이며, 이를 수행하고 나면 pkg-get 명령을 사용하여 네트워크에서 MySQL 5와 같은 패키지를 설치할 수 있게 됩니다.

4. 이제 MySQL 5 패키지를 설치할 준비가 되었습니다. 콘솔 또는 xterm 창에서 root로 로그인하고 다음 명령을 실행합니다.

# /opt/csw/bin/pkg-get -i mysql5 mysql5client mysql5devel mysql5rt
# /opt/csw/bin/pkg-get -i mysql5test

참고: mysql5devel 패키지를 설치하는 것은 매우 중요합니다. 그렇지 않으면 나중에 PHP 5를 구축하는 경우에 문제가 발생하게 됩니다.

5. 이제 MySQL 5를 설정해보겠습니다.

Blastwave.org에는 설명서가 있습니다. http://www.blastwave.org/packages.php/mysql5로 이동하여 "View news and info about the software package"라는 회색 버튼을 누릅니다. 여기에서는 몇 가지 가이드를 반복해서 다룰 것이며, 일부 논의 사항에 대해서는 좀 더 자세히 다루었습니다. (작업을 우리와 함께 공유해주신 Blastwave의 너그러운 배려에 감사 드립니다.)

A. config 파일/opt/csw/mysql5/my.cnf을 만듭니다. 즉 /opt/csw/mysql5/share/mysql/my-*.cnf 파일 중 하나를 /opt/csw/mysql5/my.cnf에 복사하고 InnoDB 활성화와 같이 환경에 맞게 적절하게 수정합니다. /opt/csw/mysql5/varmy.cnf에서 더 이상 사용되지 않는 위치입니다. 복사할 파일이 확실하지 않는 경우에는 my-small.cnf를 사용하십시오.

B. 다음 단계에서 데이터베이스를 초기화하기 전에 MySQL 사용자와 그룹을 설정해야 합니다. 이 작업은 Blastwave 패키지 설치 스크립트에 의해 수행됩니다. 하지만 소스에서 MySQL을 구축하는 경우에는 MySQL 사용자와 그룹을 다음과 같이 만들어야 합니다.

# groupadd mysql
# useradd -c "MySQL Server" -d /dev/null -g mysql -s /bin/false mysql 

C. MySQL 데이터베이스를 초기화하고 사용 권한을 수정합니다.

cd /opt/csw/mysql5
./bin/mysql_install_db
chown -R mysql:mysql ./var

주의: 위에서 chown 단계를 건너뛰면 MySQL는 시작되지 않습니다.

D. MySQL 5를 시작합니다. 단순히 서버를 시작하여 위의 단계를 제대로 수행했는지 확인하려면 다음 명령을 실행합니다.

# cd /opt/csw/mysql5 ; /opt/csw/mysql5/bin/mysqld_safe &

그런 다음 ps 명령을 사용하여 서버가 시작되었는지 확인하고, kill 명령과 PID를 사용하여 중지합니다.

주의: 프로세스를 계속 진행하기 전에 이전에 언급한 프로세스를 중지해야 합니다. 그렇지 않으면 여러분이 다음 단계에서 SMF 서버를 활성화하는 경우 MySQL이 제대로 시작되지 않습니다.

다음 명령을 실행해야 합니다.

# pkill mysql

이제 재부트 후 서버가 시작되는지 확인하려면 계속 읽어보십시오.

참고: Solaris Express, Nevada 및 Solaris 10 업데이트의 최신 빌드는 mysql과 같은 데몬을 시작하기 위해 SMF를 사용하고 있습니다. 아래의 프로세스는 달라질 수 있습니다. 사용 중인 Solaris 버전에서 SMF를 사용하는 경우 아래에 표시된 svcadm 명령을 사용하여 MySQL 5를 시작/중지합니다.

이전 RC 파일 메소드

 # /etc/init.d/cswmysql5 start

SMF 메소드

RC 파일 대신 SMF를 사용하는 Solaris 버전에 MySQL 5 패키지를 설치한 경우 해당 패키지에서 MySQL 5용 SMF 매니페스트를 설치했는지 살펴보고, 다음 명령을 사용하여 서비스의 상태를 볼 수 있습니다.

 # svcs -a | grep mysql
 disabled 13:36:01 svc:/network/cswmysql5:default
MySQL 5 서버가 시작되는지 확인하려면(재부트 시에도 확인) 이 명령을 확인합니다.

# svcadm enable svc:/network/cswmysql5:default

다음 명령을 다시 사용하여 확인할 수 있습니다.

# svcs -a | grep mysql
online 15:12:43 svc:/network/cswmysql5:default

명령 # svcadm disable svc:/network/cswmysql5:default를 사용하여 서버를 중지할 수 있습니다. 그러면 svcadm enable 명령을 실행할 때까지 서버는 중지된 상태로 유지됩니다(재부트 시에도 유지됨).

E. MySQL의 root 사용자 암호를 반드시 설정해야 합니다!

Solaris의 루트 사용자 암호와 동일하면 안 됩니다! 이렇게 하려면 서버를 시작한 다음 다음 명령을 실행합니다.

로컬 암호를 변경하려면

# /opt/csw/mysql5/bin/mysqladmin -u root password 'new-password'
	
# /opt/csw/mysql5/bin/mysqladmin -u root -h <YOUR-HostName-Here> \
password 'new-password'

(아래의 5단계, I부의 보안 논의를 통해 네트워크 액세스를 비활성화하면 이전 명령줄이 실패하고 필요하지 않게 됩니다.)

자세한 내용은 MySQL 5 설명서를 참조하십시오.

F. 선택 사항: 이 단계는 경우에 따라 수행됩니다. 다음 명령을 사용하여 MySQL 데몬에 대한 테스트 제품군을 실행할 수 있습니다.

# cd /opt/csw/mysql5/mysql-test
# ./mysql-test-run

G. 설치를 확인합니다.

# ./bin/mysql -p

MySQL의 root 암호를 입력하라는 메시지가 표시됩니다. mysql 프롬프트가 표시되어야 합니다. STATUS와 같은 명령을 실행하여 서버가 응답하는지 살펴봅니다. 다음으로 mysql 프롬프트에서 테스트 쿼리를 실행해봅니다.

show databases;

mysqltest 데이터베이스가 반환됩니다.

quit

참고: /opt/csw/mysql5/etc/mysql5rc 또는 /etc/opt/csw/mysql5rc를 만들고 편집하면 시작 옵션이 무시될 수 있습니다.

mysql5rc용 템플릿은 /opt/csw/mysql5/share/mysql에 있습니다. 이 템플릿은 시스템에서 rc 파일을 만드는 경우 사용해야 합니다. 예:

  1. # mkdir -p /etc/opt/csw
    사용 권한으로 chown root:bin /etc/opt/cswchmod 0755 /etc/opt/csw를 사용합니다.
  2. # cp /opt/csw/mysql5/share/mysql/mysql5rc /etc/opt/csw/
    사용할 수 있는 mysql5rc 파일이 없는 경우 데몬은 기본값으로 시작됩니다. 이 시스템이 여러분의 첫 번째 실험 시스템인 경우에는 이 단계에 신경쓰지 마십시오. 선택 사항입니다.

H. 참조 문서

I. MySQL 보안은 이 기사에서 다루지 않습니다. 하지만 고려해야 할 몇 가지 기본 단계는 다음과 같습니다.

  • MySQL 루트 사용자가 암호를 설정하고, 이 암호가 호스트 시스템 루트 암호와 다른지 확인합니다.
  • MySQL 사용자만 데이터베이스 디렉토리에 대한 읽기 및 쓰기 액세스 권한이 있는지 확인합니다.
  • PHP용 웹 서버에서 MySQL을 사용하여 PHP/Apache 및 MySQL 간에 localhost 연결만 필요한 경우 사용 중인 /opt/csw/mysql5/my.cnf 구성 파일의 [mysqld] 섹션에 skip-networking을 추가합니다. 이렇게 하면 MySQL 서버 데몬에 대한 모든 TCP/IP 원격 연결이 비활성화됩니다.
  • LOAD DATA LOCAL INFILE 명령 사용을 비활성화합니다. 이 명령으로 인해 특히 새 SQL 삽입 공격이 발생하는 경우 로컬 파일에서 인증받지 않은 읽기 작업이 허용될 수 있습니다. 사용 중인 my.cnf 파일의 [mysqld] 섹션에 set-variable=local-infile=0을 추가하십시오.
  • users 테이블에서 익명 사용자 계정을 제거합니다.

위의 단계는 대략적인 내용이지만 설치 후 개선에 도움이 됩니다. 여러분이 선호하는 인터넷 검색 엔진에 "Securing MySQL"을 입력하여 웹에서 MySQL 보안에 대한 기사를 검토해 보십시오.

6. 이제 MySQL 5의 설치와 테스트 작업을 완료했습니다. 다음으로 PHP 5를 구축하겠습니다. Lester의 허락을 받아 Mel Lester의 웹 사이트에서 일정 부분을 도입합니다. 우리는 다른 옵션과 경로를 사용 중이므로 PHP 구성의 일부를 수정할 것입니다.

특히 컴파일하기 전에 PHP 5의 구성을 변경하여 /opt/csw/mysql5에서 Blastwave MySQL 5에 대한 경로를 사용하고, 몇 가지 다른 옵션도 추가할 것입니다. 이 절차에서는 필요한 GNU를 설치하여 PHP 5를 구축했는지도 확인합니다.

A. 전역 영역에 root로 로그인하고 /opt/csw/bin/usr/sfw/bin이 다음과 같이 $PATH에 있는지 확인합니다.

global# echo $PATH
  /opt/csw/bin:/usr/sfw/bin:/usr/sbin:/usr/bin:/usr/openwin/bin: \
  /usr/dt/bin:/usr/ccs/bin

자 그러면, 먼저 root.profile을 수정하고 싶지 않고, 정크로 인해 / 디렉토리가 혼란스러워지는 것을 원하지 않을 것입니다. Solaris 10 OS, Solaris Express 또는 OpenSolaris의 경우에는 /root 디렉토리를 만들고, bash 또는ksh 셸을 사용하고 홈 디렉토리로 /root를 가리키는 또 다른 root 계정을 /etc/password에 만드는 것이 좋습니다. 하지만 이는 선택 사항이므로, 여러분과 Google을 위한 주제라고 할 수 있겠습니다. 무엇을 결정하든지 경로에 위의 구성 요소가 있는지 확인하고 난 후에 진행하십시오.

B. Blastwave.org의 pkg-get 명령(위의 3단계에 설치됨)을 사용하여 GNU autoconf, automakegsed 패키지를 설치합니다. 아래의 소프트웨어 버전은 비교적 비슷하거나 좀 더 최신 버전이어야 합니다.

global# pkg-get -i autoconf
...
global# which autoconf && autoconf --version | head -2
/opt/csw/bin/autoconf
autoconf (GNU Autoconf) 2.59
Written by David J. MacKenzie and Akim Demaille.

global# pkg-get -i automake
...
global# which automake && automake --version | head -2
/opt/csw/bin/automake
automake (GNU automake) 1.8.3
Written by Tom Tromey <tromey@redhat.com>.

global# pkg-get -i gsed
...
global# which gsed && gsed --version | head -2
/opt/csw/bin/gsed
GNU sed version 4.1.4
Copyright (C) 2003 Free Software Foundation, Inc.

C. PHP를 설치하는 데 필요한 기타 오픈 소스 소프트웨어의 가용성을 확인합니다. 원하는 경우 PHP 매뉴얼의 Solaris specific installation tips를 검토할 수 있습니다. 다음 소프트웨어 버전은 비교적 비슷하거나 좀 더 최신 버전이어야 합니다.

global# which gcc && gcc --version | head -2
/usr/sfw/bin/gcc
gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
Copyright (C) 2004 Free Software Foundation, Inc.

global# which gmake && gmake --version | head -2
/usr/sfw/bin/gmake
GNU Make 3.80
Copyright (C) 2002 Free Software Foundation, Inc.

global# which flex && flex --version | head -2
/usr/sfw/bin/flex
flex version 2.5.4

global# which bison && bison --version | head -2
/usr/sfw/bin/bison
bison (GNU Bison) 1.875
Written by Robert Corbett and Richard Stallman.

global# which gm4 && gm4 --version | head -2
/opt/csw/bin/gm4
GNU M4 1.4.3
Written by Rene' Seindal.

global# which perl && perl -v | head -2
/opt/csw/bin/perl

This is perl, v5.8.7, built for sun4-solaris-thread-multi

global# which gunzip && gunzip -V | head -2
/usr/bin/gunzip
gunzip 1.3.3-patch.1
(2002-03-08)

global# which gtar && gtar --version | head -2
/usr/sfw/bin/gtar
tar (GNU tar) 1.14
Copyright (C) 2004 Free Software Foundation, Inc.

D. 소스에서 libxml2를 구축하여 오픈 소스 도구를 테스트합니다.

xmlsoft에서 최신 버전을 다운로드합니다.

이 시점에서 zip으로 압축된 소스의 다음 버전을 찾았습니다.

# wget ftp://xmlsoft.org/libxml2/libxml2-2.6.26.tar.gz

다음 단계를 수행할 디렉토리를 선택합니다.

global# gunzip -cd libxml2-2.6.26.tar.gz | gtar xvpf -
global# cd libxml2-2.6.26
global# ./configure
...
global# gmake
...
global# gmake install
...

이제 libxml2 소프트웨어 구축과 설치를 마쳤으므로 /usr/local에서 찾을 수 있습니다.

참고: Solaris Nevada 빌드 42 이상에는 업데이트된 libxml2 패키지가 있어 이 단계가 필요하지 않다는 것이 확인되었습니다. Solaris Nevada 빌드 42 이상을 실행 중인 경우(여기에서 파생된 OpenSolaris 포함) libxml2(6D부) 구축을 건너뛰고 6F부의 PHP5 config 행의 부분을

--with-libxml-dir=/usr/local

다음으로 변경할 수 있습니다.

--with-libxml-dir=/usr 

E. 파일 /etc/apache2/httpd.conf가 없는 경우에는 다음을 사용합니다.

global#cp /etc/apache2/httpd.conf-example /etc/apache2/httpd.conf

여러분이 선호하는 텍스트 편집기로 /etc/apache2/httpd.conf를 편집합니다.

  • 필요한 경우 ServerName을 호스트 이름으로 설정합니다(기본값: 127.0.0.1).
  • ServerAdmin을 유효한 전자 메일 주소로 설정합니다.

F. 최신 프로덕션 버전의 PHP를 www.php.net에서 다운로드하고 컴파일합니다. /src 또는/build 와 같이 어떤 이름으로든 고유 디렉토리를 다시 선택합니다. 여기에서는 http://www.php.net/downloads.php#v5이며, 다음 명령을 사용하여 계속 진행할 수 있도록 gzip으로 압축된 버전을 다운로드하기로 결정했습니다.

global# gunzip -cd php-5.1.6.tar.gz | gtar xvpf -
...
global# cd php-5.1.6

다음은 원래의 웹 페이지와 다른 부분입니다. 원래 페이지에서는 /usr/sfw에서 찾은 이전 버전의 MySQL 4를 사용 중이었지만 여기에서는 /opt/csw/mysql5에 있는 현재 버전의 MySQL 5를 사용 중입니다. 따라서 구성 옵션에 대한 우리의 선택 사항은 다음과 같습니다.

 global# ./configure --with-apxs2=/usr/apache2/bin/apxs --enable-dbase \
 --with-libxml-dir=/usr/local --with-config-file-path=/etc/apache2 \
 --with-mysql=shared,/opt/csw/mysql5 \
 --with-mysqli=shared,/opt/csw/mysql5/bin/mysql_config \
 --with-xpm-dir=/usr --with-gd --with-tiff-dir=/usr --with-bz2=/usr/lib \
 --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib --enable-mbstring \
 --enable-calendar--enable-bcmath --enable-ftp --enable-exif

위의 구성 옵션은 간단한 서버 설정 시 유용합니다. 이외에도 기타 많은 옵션이 있으며, 사용자 선택과 설명서용으로 남겨집니다. command# ./configure --help를 입력하거나 PHP 사이트의 Appendix F. Configure options에 있는 코어 구성 옵션을 검토하여 이러한 옵션 중 일부를 볼 수 있습니다.

참고: openssl을 활성화하려면 Apache 및 MySQL을 다시 컴파일하여 동일한 버전의 openssl 라이브러리를 보유해야 합니다. 그렇지 않으면 PHP - MySQL 연결이 실패합니다. 세션에 쿠키를 사용하려는 경우 사용 중인 시스템에 mcrypt 라이브러리를 추가하고 PHP 컴파일 옵션 --with-mycrpt를 사용하면 성능이 향상됨을 알 수 있습니다.

흥미로운 사실을 하나 알려 드리자면, 다른 사용자가 사용하는 config 옵션에 대해 궁금한 경우에는 여러분이 선호하는 인터넷 검색 엔진에 phpinfo()를 입력해보기만 하면 됩니다. :-)

자, 이제 구축해보겠습니다.

 ...
 global# gmake
 ...
 global# gmake install

 ...
 Installing PHP SAPI module: apache2handler
 /var/apache2/build/instdso.sh SH_LIBTOOL='/var/apache2/build/libtool' libphp5.la 
/usr/apache2/libexec
 /var/apache2/build/libtool --mode=install cp libphp5.la /usr/apache2/libexec/
 cp .libs/libphp5.so /usr/apache2/libexec/libphp5.so
 chmod +x /usr/apache2/libexec/libphp5.so
 cp .libs/libphp5.lai /usr/apache2/libexec/libphp5.la
 libtool: install: warning: remember to run 'libtool --finish /build/php-5.1.2/libs'
 chmod 755 /usr/apache2/libexec/libphp5.so
 [activating module 'php5' in /etc/apache2/httpd.conf]
 Installing PHP CLI binary: /usr/local/bin/
 Installing PHP CLI man page:/usr/local/man/man1/
 Installing build environment: /usr/local/lib/php/build/
 Installing header files: /usr/local/include/php/
 Installing helper programs: /usr/local/bin/
  program: phpize
  program: php-config
 Installing man pages: /usr/local/man/man1/
  page: phpize.1
  page: php-config.1
 Installing PEAR environment:/usr/local/lib/php/
 [PEAR] Archive_Tar - installed: 1.3.1
 [PEAR] Console_Getopt - installed: 1.2
 pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0)
 [PEAR] PEAR - installed: 1.4.6
 Wrote PEAR system config file at: /usr/local/etc/pear.conf
 You may want to add: /usr/local/lib/php to your php.ini include_path
 Installing PDO headers: /usr/local/include/php/ext/pdo/
 #

G. 파일 php.ini-dist를 사용 중인 php-5.1.6 소스 디렉토리에서 Apache의 config 디렉토리로 복사합니다.

global# cp php.ini-dist  /etc/apache2/php.ini

영역에 Apache 웹 서버를 설정하는 경우 다음과 같은 경로 예제(또는 사용 중인 영역)가 표시될 수 있습니다.

global# cp php.ini-dist /zones/zone0/root/etc/apache2/php.ini

다음으로 구성 파일을 편집하고 전체 스택을 테스트하겠습니다.

H. 구성 파일을 편집합니다.

/etc/apache2/php.ini 파일을 편집하여 PHP 옵션을 설정합니다.

PHP 5에는 더 이상 MySQL 인터페이스 모듈의 자동 로딩이 없습니다.

명시적으로 이 모듈 및 기타 다른 필요한 확장 모듈이 로드될 수 있게 해야 합니다. 이를 수행하려면 php.ini 파일을 편집하고 다음과 같이 행 2개를 추가합니다.

1. 사용 중인 PHP 5 빌드에서 필요한 모듈을 만들었는지 확인합니다.

# ls -l /usr/local/lib/php/extensions/no-debug-non-zts-20050922/  
total 1088
-rwxr-xr-x1 root root103144 Aug 29 21:48 mysql.so
-rwxr-xr-x1 root root429948 Aug 29 21:48 mysqli.so

php.ini에서 다음으로 시작하는 행을 찾습니다.

; Directory in which the loadable extensions (modules) reside.
extension_dir =

행이 다음과 같이 표시되도록 편집합니다.

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20050922/"

다른 위치에 PHP 5를 설치한 경우 이 행을 그에 맞게 조정합니다.

2. 다음으로 php.ini file에서 다음 블록을 찾습니다.

  ;;;;;;;;;;;;;;;;;;;;;;
  ; Dynamic Extensions ;
  ;;;;;;;;;;;;;;;;;;;;;;

다음 행을 추가합니다.

  
extension=mysql.so

이제 Apache/PHP 5에서 MySQL에 연결할 수 없는 이유를 이해하기 위해 애쓰지 않아도 됩니다.

3. 다음으로 /etc/apache2/httpd.conf 파일을 편집하여 PHP 모듈을 로드합니다.

php5_module이 포함되어 있는 행을 찾습니다. LoadModule 문의 오른쪽에 있는 경로는 시스템에서 PHP 모듈 경로를 나타내야 합니다. 경로는 시스템에서 /usr/apache2상대적입니다. 따라서 실제로는 /usr/apache2/libexec/libphp5.so가 됩니다. 위의 PHP gmake 설치 시 여러분을 위해 이미 추가했어야 하지만 확실한지 확인해야 합니다.

LoadModule php5_module libexec/libphp5.so

Apache에서 웹 페이지 파일 이름에 대한 .php 확장자를 PHP로 구문 분석하려고 합니다. 사용 중인 /etc/apache2/httpd.conf 파일의 AddType 섹션을 찾아 다음 행을 추가합니다.

AddType application/x-httpd-php .php

일부 사용자의 경우 httpd.conf에서 위의 행을 생략하고 대신 /etc/apache2/mime.types 파일에 application/x-httpd-php php phtml을 추가하는 것을 선호합니다. 어느 방법이든 괜찮습니다.

I. Apache 2를 시작하여 테스트합니다.

경고: 다른 SAMP 기사 또는 Companion CD 스크립트를 통하거나 수동으로 Apache 1.3을 이전에 활성화한 경우에는 다음 단계를 수행할 때 충돌이 발생할 수 있습니다. 계속 진행하기 전에 Apache 1.3을 비활성화해야 합니다.

Apache 1.3이 비활성화되어 있는지 확인합니다.

 #svcs -a | grep apache
 legacy_run Sep_11lrc:/etc/rc3_d/S50apache

이를 통해 Apache 1.3용 레거시 rc 시작 스크립트가 /etc/rc3_d/S50apache임을 보여 줍니다. 이 스크립트에서는 /etc/apache/httpd.conf에서 Apache용 구성 파일의 존재 여부를 조회하며, 파일이 없는 경우에는 Apache 1.3이 시작되지 않습니다. Apache 1.3을 비활성화하려면 위에 언급한 경로에 파일이 없는지 확인하거나 시작 스크립트의 이름을

 /etc/rc3_d/S50apache

다음으로 변경합니다(이 상황은 다소 극단적일 수 있음).

/etc/rc3.d/OFF-S50apache

시작 시 실제로는 "S"로 시작되는 스크립트만 실행됩니다.

Apache 2 시작

# svcadm enable apache2
# svcs | grep -i apache2
online   18:07:10 svc:/network/http:apache2

Apache 2가 성공적으로 시작되면 ps 명령을 사용할 수 있으며, 아래에 설명한 프로세스와 비슷한 프로세스를 여러 개 살펴봐야 합니다.

# ps -ef | grep http
webservd 18592 38020Sep 11 ? 0:03 /usr/apache2/bin/httpd -k start
webservd 13093 38020Sep 08 ? 0:07 /usr/apache2/bin/httpd -k start

이러한 프로세스가 대략 10개 정도 발견되더라도 놀라지 마십시오. 물론 다음 프로세스로 인해서도 놀라지 마십시오.

root 49810 Jul 17 ? 1:28 /usr/apache/bin/httpd  \
                 -f /etc/apache/httpd-standalone-ipp.conf

네트워크 포트 631에서 IPP(Internal Print Protocol) Listener가 사용 중인 이전 Apache 1.3일 뿐입니다. 포트 80에서 실행 중이 아니므로 여기에서는 사용 중인 웹 서버 구성과 충돌되지 않습니다.

7. 다음으로 Apache 2 웹 서버의 DocumentRoot 디렉토리에 테스트를 위해 유용한 항목을 설정해보겠습니다. 텍스트 편집기를 선택하여 다음 파일(웹 페이지)을 만들고 phpinfo.php라고 지정합니다.

<html>
<body>
      <p>Hello World</p>
      <?php phpinfo(); ?>
  </body>
</html> 

Apache httpd.conf 파일에 정의된 대로 DocumentRoot 디렉토리에 파일을 배치합니다. 웹 브라우저를 http://your-host-name/phpinfo.php로 설정하고 모든 항목이 작동 중인 경우에는 PHP, Apache 및 MySQL 구성에 대한 세부 정보가 있어야 합니다.

참고: 테스트 후에는 해당 파일을 제거하거나 HTTP 인증으로 파일을 보호하는 것이 권장됩니다. 이 파일에서는 많은 유용한 사이트 정보를 공격자에게 드러내기 때문입니다.

지금까지 기본적으로 위의 phpinfo 웹 페이지는 실제로 Apache 및 PHP 작업이 함께 제대로 작동할 때에만 올바르게 테스트된다는 것을 알아보았습니다. 비록 출력에 MySQL 클라이언트가 활성화되었다는 정보를 보여 주지만, 실제로 MySQL 서버에 대한 연결을 테스트한 것은 아닙니다. 여기까지 진행했다면 이제 99%의 사용자가 PHP/MySQL 응용 프로그램을 쉽게 설치할 수 있고, 정상적인 작동을 기대할 수 있습니다. 하지만 여러분이 완벽함, 정확성 및 거의 모든 테스트 수행에 대해 강조하는 매우 분석적인 성격 유형을 가지고 있다면 아래의 간단한 PHP 웹 페이지에서 다음 작업을 수행할 수 있습니다.

  1. PHP 페이지에서 MySQL에 대한 연결을 엽니다.
  2. mysql 데이터베이스 이름을 선택합니다. 이 데이터베이스는 모든 MySQL 설치 후에 존재합니다.
  3. mysql 데이터베이스 내부에 있는 테이블 이름 목록을 표시합니다.

대부분의 코드는 PHP 매뉴얼의 기능 사용 예에서 가져옵니다. 아래의 PHP 코드를 파일(웹 페이지)에 복사하고 simple-test.php와 비슷한 식으로 이름을 지정합니다. 파일을 편집하고 MySQL 서버에 연결하는 데 필요한 암호를 삽입합니다. 파일을 웹 서버 DocumentRoot(이전에 phpinfo.php를 배치한 장소와 동일)에 놓습니다.

다음은 PHP 코드입니다.

<?php
$db_username = "root";// EDIT if needed: The username for mysql.
$db_password = "insert-yours-here"; // EDIT ME
    // Above is YOUR password used for mysql admin access.
$db_hostname = "localhost";
$db_name = "mysql";  // Install creates this admin database.

if (!mysql_connect($db_hostname, $db_username, $db_password)) {
   echo "Can't connect to MySQL Server";
   exit;
}else{
   echo "Connection to Mysql server succeeded.";
   echo "<br>";
}

// Now query the db and get the list of tables.
$result = mysql_db_query($db_name, "SHOW TABLES");

if (!$result) {
   echo "DB Error, could not list tables\n";
   echo 'MySQL Error: ' . mysql_error();
   exit;
}

echo "<p>The selected database is name is mysql</p>";
echo "<p>Here is the list of tables</p>";
while ($row = mysql_fetch_row($result)) {
   echo "Table: {$row[0]} <br>";
}

mysql_free_result($result);
?>

위의 내용을 올바르게 복사하고 소프트웨어가 제대로 구성되어 있으면 웹 브라우저에서 http://yourserver.com/simple-test.php에 접속했을 때 다음과 같은 결과가 표시되어야 합니다.

Connection to Mysql server succeeded.
The selected database is name is mysql.

Here is the list of tables

Table: columns_priv 
Table: db 
Table: func 
Table: help_category 
Table: help_keyword 
Table: help_relation 
Table: help_topic 
Table: host 
Table: proc 
Table: procs_priv 
Table: tables_priv 
Table: time_zone 
Table: time_zone_leap_second 
Table: time_zone_name 
Table: time_zone_transition 
Table: time_zone_transition_type 
Table: user 

8 .PHP 보안에 대해 살펴보겠습니다.

이제 모든 것이 정상 작동하므로 PHP 기본 설치 및 config 파일 php.ini의 기본 옵션이 개발 작업용으로는 안전하지만, 네트워크에 노출되어 있는 프로덕션 서버용으로는 안전하지 않다는 사실에 주의를 기울여야 합니다. 다음 주의 사항을 꼭 읽어보시기 바랍니다.

A. 위의 7단계에서 만든 phpinfosimpletest PHP 웹 페이지를 삭제합니다. 또는 페이지가 있는 디렉토리를 특정 유형의 HTTP 인증으로 보호하여 즉시 잠그십시오.

B. 다음 자습서와 같이 보안 PHP에 대한 자습서를 꼭 검토해 보시기 바랍니다.

이를 수행할 시간이 여의치 않으면 적어도 제안된 구성 파일(좀 더 안전함) php.ini-recommended에서 사용 중인 PHP 소스 코드 디렉토리를 살펴봐야 합니다. 이 파일을 기본 시작 config 파일 php.ini-dist와 비교하여 프로덕션 사이트의 보안 및 성능을 위해 수행된 변경을 참조할 수 있습니다.

(# diff php.ini-dist php.ini-recommended | less)

이러한 내용이 몇 가지 질문에 대한 답이 되고, 유용한 힌트를 제공했기를 바랍니다. Solaris OS에서 SAMP 서버를 체험해 보십시오.


Comments (latest comments first)

Discuss and comment on this resource in the BigAdmin Wiki

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin