강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

Nginx+FastCGI PHP 설치 및 성능 시험

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문


Nginx+FastCGI PHP 설치 및 성능 시험



1. 개요

  최근에 Nginx 와 fastCGI모드로 설치한 PHP가 성능이 뛰어나다는 얘기가 있다. Nginx를 최적으로 설치하고 설치 한 뒤에는 얼마만큼 뛰어난지 조사해 보는 것이 본 강좌이다.
 Nginx는 웹서버이다. Nginx는 성능이 아주 뛰어나고, 현재(2009.12) 전 세계 약 5% 정도 사용하고 있는 것으로 알려져있다. Nginx는 아직 베타 버전이지만, 성능이 뛰어나고 가벼운 웹 데몬이라고 한다.

 그 리고 PHP를 fastCGI모드로 컴파일 하여 WAS처럼 작동하게 한다. Nginx와 PHP는 모듈 연결이 아닌, TCP/IP를 사용한 네트웍 연결을 구성한다. 이렇게 하게되면 웹서버와 WAS(PHP서버)를 분리 할 수 있다. 대형 시스템에서는 고려해 볼만한 구조이다.

 Nginx를 웹서버로 사용하면 많은 이점이 있다. 그렇지만, 여러가지 이점이 국내에서 가장 많이 사용해 왔고, 사용하고 있어 익숙한 Apache를 대체할 만한 웹서버인지는 의문이다. 필자의 생각은 성능이 중요하지만, 안정성 및 유지보수성도 아주 중요하다고 생각한다.

  본 강좌는 Nginx를 설치한다. 그리고 기본 설정을 하고, 마지막으로 성능테스트를 할 것이다.



2. 프로그램 설치

 ( 본 강좌는 SULinux 2.0 32Bit을 기반으로 작성한다. )


  2.1. apmtools로 최신버전의 APM 설치

  설치된 프로그램 중, MySQL만을 사용할 것이며, 확장성을 위하여 Apache, PHP는 설치만 하고 사용하지는 않는다. (본 강좌는 성능 시험을 위해 사용할 것이다. )

  apmtools

  위 명령어 입력 후 최신 버전을 설치 한다.
  (참고, 본 강좌 사용 버전 : Apache 2.2.11, PHP 5.3.0, MySQL 5.1.36 )

  APM이 설치되었다면, 아래 명령어로 서비스를 중지 시키고 부팅시 시작되지 않게 설정한다.

  service httpd stop
  chkconfig httpd off




2.2 Libevent 설치

  php fpm은 event를 사용한다. 최신버전의 라이브러리를 설치해 주어야 한다. 정상 설치 되기 때문에 다음과 같이 설치 한다.
  참조 URL : http://monkey.org/~provos/libevent/

 프로그램 소스는 /usr/local/src에 저장한다. 그리고 컴파일 등의 작업을 진행한다. 특별이 용량이 부족하지 않다면, 프로그램은 남겨두는 것이 좋다.

 다음 과정은 프로그램을 다운로드 한 후 압축 해제, 설정, 컴파일, 설치 등의 과정이다.

    cd /usr/local/src
    wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz
    tar xvfpz libevent-1.4.13-stable.tar.gz
    cd libevent-1.4.13-stable
    ./configure
    make -j 4 && make install
    cd ../





2.3. PHP 다운로드 및 PHP FPM 패치 설치

  PHP를 fastCGI 모드로 작동시키기 위해서는 php-fpm 패치를 해야 한다. 다음과 같은 과정으로 패치 한다.

  (주의) PHP 5.3.X와 5.2.X 설치법이 다르니 주의 하고, 다른 버전을 설치 해야 한다면, (http://php-fpm.org/wiki/Documentation) 참조하기 바란다.
 
 본 강좌에서는 현재 최신버전을 설치한다.



 # PHP 다운로드
wget http://www.php.net/get/php-5.3.1.tar.bz2/from/kr.php.net/mirror 

 # PHP 압축 해제
 tar xvfpj php-5.3.1.tar.bz2

 # PHP-FPM 다운로드
 wget http://php-fpm.org/downloads/0.6/php-fpm-0.6~5.3.1.tar.gz
 # PHP-FPM 압축해제
  tar xvfpz php-fpm-0.6~5.3.1.tar.gz
 # PHP-FPM 패치 작성
 php-fpm-0.6-5.3.1/generate-fpm-patch
 # PHP-FPM 패치 
 patch -d php-5.3.1 -p1 <fpm.patch
 cd php-5.3.1

 # PHP configure 스크립트 재 작성
 ./buildconf --force
 # PHP 설정시 mysql 라이브러리 경로 찾지 못하니 링크설정
  ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.16 /usr/lib/

 # PHP Configure 과정 ( Apmtools와 동일한 옵션 )   
   ./configure --prefix=/usr/local/php_5.3.1-fpm --with-curl --with-xpm-dir=/usr \
  --with-mcrypt --with-zlib --with-gd --with-ttf --with-png --with-expat-dir=/usr \
  --with-gmp --with-xml --with-language=korean --with-charset=euc_kr \
  --disable-debug
--disable-rpath --with-iconv --enable-safe-mode \
  --enable-magic-quotes --enable-bcmath
--enable-dio \
  --enable-gd-native-ttf --enable-sysvsem --enable-sysvshm --enable-wddx \

  --enable-pic --enable-inline-optimization --enable-mbstring \
  --enable-mbregex
--enable-mbstr-enc-trans --with-config-file- \
  --enable-ftp --disable-debug
--enable-track-vars=yes --with-jpeg-dir \
  --with-freetype-dir --enable-gd-native-ttf \

  --enable-dl --enable-gd-imgstrttf --enable-exif --with-openssl --with-fpm \
  --with-libevent=/usr/local/lib --with-xml2 \
  --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config

 # PHP 컴파일
 make -j 4
 # PHP 설치
 make install





  2.4 Nginx 설치

  Nginx는 웹서버이다. 다음과 같은 같이 설치 한다.


     cd /usr/local/src
     wget http://sysoev.ru/nginx/nginx-0.7.64.tar.gz
     tar xvfpz nginx-0.7.64.tar.gz
     cd nginx-0.7.64

    ./configure --pid-path=/usr/local/nginx/logs/nginx.pid \
      --sbin-path=/usr/local/sbin/nginx \

      --with-md5=/usr/lib --with-sha1=/usr/lib --with-http_ssl_module \
      --with-http_dav_module \

      --without-mail_pop3_module --without-mail_imap_module \
      --without-mail_smtp_module    


    make -j 4
    make install



Nginx 시작 스크립트 다운로드 및 설정, 자동시작 등록

wget "http://wiki.nginx.org/index.php?title=RedHatNginxInitScript&action=raw&file=nginx"
 mv nginx /etc/init.d/
 chmod 755 /etc/init.d/nginx
 chkconfig --add nginx
 chkconfig nginx on


Nginx 시작 스크립트(/etc/init.d/nginx)의 일부를 다음과 같이 변경한다.

   ## 23줄 수정
   nginx="/usr/local/sbin/nginx"
   ## 26줄 수정
   NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"



3. 프로그램 설정 및 튜닝

  3.1 PHP-FPM 설정파일 튜닝

  PHP-FPM설치 후 기본 값을 사용하면, 성능이 제대로 나오지 않는다. 그래서 다음과 같이 설정파일(/etc/php-fpm.conf)을 사용하여 튜닝 한다.

 ## 82줄 수정
    <value name="max_children">30</value>
 ## 116줄 수정
    <value name="rlimit_files">102400</value>



3.2. Nginx와 PHP 연결 설정

  다음과 같이 php확장자를 가진 프로그램을 PHP-FPM이 실행 할 수 있게 설정한다.
  설정파일 (/usr/local/nginx/conf/nginx.conf)편집

 ## 3줄 수정
    worker_processes  100;

 ## 65줄 주석 해제 및 설정
       location ~ \.php$ {
           root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
             include        fastcgi_params;
       }




4. 프로그램 시작
 
  php, Nginx 모두 데몬 형태로 시작되어야 한다. 다음과 같이 시작 시킨다.

  service nginx start
  service php-fpm start




5. 프로그램 성능 테스트

 Nginx 를 설치 한 이유는 Apache보다 성능이 우수하다고 해서이다. 여기에서는 앞에서 설치한 Nginx 서버와 SULinux 2.0 의 APM_Install-tools로 설치된 Apache+PHP를 대상으로 성능 시험 해 보았다.


 5.1. 시험 환경 ( 하드웨어 )
   제조사 :  HP
   모델    :  HP530
   CPU    :  Intel Core2Duo T5200 (1.6GHz, FSB:533MHz, L2: 2M)
   RAM   :  2G (DDR2, 667MHz, 1G*2)
   Disk    : 160G (SATA, 5400RPM)
   네트워크  : 100M (Intel PRO 100 VE)
   메인보드  : Mobile Intel 940GML Express



 5.2. 시험 명령어

  ab -n 100000 -c 100 192.168.0.183/test2.php

   위 내용은 100개의 쓰레드를 사용하여 100,000의 연결을 시도한다.




 5.3. 시험 PHP 프로그램

## test1.php (곱셈 테스트)
<?
   for($i=1;$i<=100;$i++){
        echo "$i";
        $mult*=$i;
   }
?>






## test2.php ( 배열, 연산 테스트)
<?
  $str=array();
  for($i=1;$i<=100;$i++){
     $str2+=$i%3;
     $str[$i]=$str2;
   }
   echo "ok";
?>




5.4. 시험 결과



Nginx
Apache
test1.php
3121.703775.65
test2.php
3166.623760.82

 위 결과는 동일한 HW에서 Nginx와 Apache의 성능을 비교하였다. 위 값은 초당 처리되는 연결을 의미하며, SULinux 2.0 에서 제공되는 Apache가 훨씬 많은 접속을 처리 할 수 있었다. ( 위 결과는 10회 시험 결과 평균을 낸 것 임 )



6. 마치며
 
  오랜만에 강좌를 작성했습니다. 오래전에도 그랬지만, 제가 작성한 강좌가 많은 사람에게 도움이 되었으면 하는 바램입니다. 본 강좌의 성능시험 결과는 시험 환경에 따라 다르니 혹시 다른 결과가 나오거나 본 강좌에 대한 지적 사항이 있다면 doly골뱅이sulinux.net으로 메일 보내주시기 바랍니다. 단, 질문은 sulinux.net에 올려 주시기 바랍니다.

작성자 : 에스유 연구소장

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,798 개
  • 현재 접속자 :  111 명