본문 바로가기
서버구축 (WEB,DB)

lighttpd + php fastcgi + xcache 설치 with bin-path

by 날으는물고기 2009. 2. 10.

lighttpd + php fastcgi + xcache 설치 with bin-path

APM이라는 말이 널리 이용될정도로 Apache + PHP + MySQL을 이용한 웹서비스들이 많이 생겼습니다.

Apache라는 웹서버는 초기 강력한 기능등으로 웹서버의 카테고리 킬러로 통할정도로 높은 점유율을 보유하고 있었습니다.

그런데 이 Apache가 범용적인 기능을 많이 보유하고 있고 또 메모리나 자원 점유율이 높은 편입니다.

아파치 1.x는 process단위이고 2.x는 thread를 이용하여 조금더 나아졌지만 자원 소모량등이 많은 것은 여전합니다.

이에 반해 lighttpd 는 non-blocking I/O로 단일 프로세스에서 실행되어 보다 가볍고 빠르다는 장점이 있습니다.

그리고 PHP를 다룰때 fastcgi기반으로 사용하기에 아파치의 mod_php와 비슷하거나 훨씬 빨라졌습니다.

lighttp는 apache의 모듈을 거의 다 쓸수 있다고 하네요. (실제 제게 필요한 모듈들은 다 있습니다)

lighttp에 php (enable fastcgi)를 연동하고 최근 각광받는 xcache를 이용하여 기존의 아파치+PHP보다 가볍고 빠른 웹서버 구축에 대해서 간단히 글을 쓰겠습니다.


  1. php 설치
    여기서는 php 5.2.0 을 기준으로 설치하도록 하겠습니다.
    ./configure의 옵션은 적당히 알아서 해주시면 됩니다. ( \ 역슬래시는 줄나눔의 의미이니 주의하세요)

    1. wget http://kr2.php.net/get/php-5.2.0.tar.gz/from/this/mirror   
    2. tar xvfz php-5.2.0.tar.gz   
    3. cd php-5.2.0   
    4. ./configure \   
    5. --prefix=/usr/local/php  \   
    6. --with-exec-dir=/usr/bin  \   
    7. --with-mysql  \   
    8. --with-sqlite  \   
    9. --with-config-file-path=/etc  \   
    10. --disable-debug  \   
    11. --enable-sockets  \   
    12. --with-png-dir=/usr/lib  \   
    13. --with-freetype-dir=/usr/include/freetype2  \   
    14. --enable-mod-charset  \   
    15. --enable-calendar  \   
    16. --enable-sysvsem=yes  \   
    17. --enable-sysvshm=yes  \   
    18. --enable-ftp  \   
    19. --enable-magic-quotes  \   
    20. --enable-gd-native-ttf  \   
    21. --enable-inline-optimization  \   
    22. --enable-bcmath  \   
    23. --with-zlib  \   
    24. --with-jpeg-dir=/usr/src  \   
    25. --with-gd  \   
    26. --with-ttf  \   
    27. --with-gettext  \   
    28. --enable-sigchild  \   
    29. --with-libxml-dir=/usr/local/src/libxml2-2.6.11  \   
    30. --with-zlib-dir=/usr/local/src/zlib-1.2.1  \   
    31. --with-iconv  \   
    32. --enable-fastcgi \   
    33. --enable-force-cgi-redirect   
    34. make   
    35. make install  


    이렇게 하면 php의 설치가 완료됩니다.
    --enable-fastcgi, --enable-force-cgi-redirect는 필수입니다.

    php.ini 파일은 /etc 디렉토리에 있는 것으로 설정하였습니다.
    Zend Optimizer, eAccelerator등의 설치에 대해서는 소개하지 않습니다. :)
  2. xcache 설치
    xcache는 제로보드XE와 같은 class/object기반의 프로그램들을 보다 빠르고 가볍게 해주는 캐쉬 프로그램입니다.
    APC나 eaccelerator 속도도 더 빠르다고 알려져 있구요.
    php5.2.0에 돌아가는 xcache 1.2.1 을 기준으로 설치법을 알려드립니다.

    wget http://xcache.lighttpd.net/pub/Releases/1.2.1/xcache-1.2.1.tar.gz
    tar xvfz xcache-1.2.1.tar.gz
    cd xcache-1.2.1
    phpize
    ./configure --enable-xcache --enable-xcache-coverager
    make
    make install
    cat xcache.ini >> /etc/php.ini

    위에서 phpize나 configure시에 php 실행파일들의 경로 문제가 생길 수 있습니다.
    1번처럼 php를 /usr/local/php/bin 에 실행파일이 생기게 했다면 아래와 같이 미리 PATH를 지정해주세요.

    export PATH="$PATH:/usr/local/php/bin"

    그 다음 /etc/php.ini 파일을 여세요.
    만약 zend optimizer등을 설치하였다면 xcache 설정중 zend_extension이 zend optimizer보다 위에 있어야 합니다.

    저는 아래와 같이 설정하였습니다.

    1. [xcache-common]   
    2. zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so   
    3. [xcache.admin]   
    4. xcache.admin.auth = On  
    5. xcache.admin.user = "관리자 아이디"  
    6. xcache.admin.pass = "md5 hash 비밀번호"  
    7. [xcache]   
    8. xcache.shm_scheme =        "mmap"   
    9. xcache.size  =                64M   
    10. xcache.count =                 4   
    11. xcache.slots =                8K   
    12. xcache.ttl   =                 0   
    13. xcache.gc_interval =           0   
    14. xcache.var_size  =            64M   
    15. xcache.var_count =             4   
    16. xcache.var_slots =            8K   
    17. xcache.var_ttl   =             0   
    18. xcache.var_maxttl   =          0   
    19. xcache.var_gc_interval =     300   
    20. xcache.test =                Off   
    21. xcache.readonly_protection = On  
    22. ;xcache.mmap_path =    "/tmp/xcache"   
    23. xcache.mmap_path =    "/dev/zero"   
    24. xcache.coredump_directory =   ""   
    25. xcache.cacher =               On   
    26. xcache.stat   =               On   
    27. xcache.optimizer =           On   
    28. [xcache.coverager]   
    29. xcache.coverager =          On   
    30. xcache.coveragedump_directory = ""  



    위의 설정중 xcache.admin.user와 xcache.admin.pass는 xcache 관리자 페이지를 사용할 경우 입력해주면 됩니다.
    참고로 관리자 페이지는 xcache 소스중 admin 이라는 디렉토리에 있고 이 admin 디렉토리를 웹에서 접근할 수 있는 곳에 복사해주시면 됩니다.

    xcache.size나 xcache.var_size는 적절히 해주시면 됩니다.
    xcache.count와 xcache.var_count는 cpu process의 수를 적어주시면 됩니다.

    cat /proc/cpuinfo |grep -c processor

    위와 같이 명령어를 입력하면 프로세스의 수가 나옵니다.
  3. lighttp 설치
    • 공식사이트 : http://www.lighttpd.net
    • 설치방법 ( 2007년 12월 24일 현재 최신 버전 기준)
      1. wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.gz    
      2. tar xvfz lighttpd-1.4.18.tar.gz   
      3. cd lighttpd-1.4.13   
      4. ./configure --with-pcre   
      5. make   
      6. make install   
      7. cp doc/lighttpd.conf /etc  

      위와 같이 하면 설치가 완료됩니다.
    • 설정 파일
      위 설치방법에서 lighttpd.conf 파일을 /etc 로 이동시켰습니다.
      vi /etc/lighttpd.conf 해서 수정 작업 들어갑니다.

      lighttpd의 경우 기본적으로 아파치에서 유용하게 사용되는 모듈들을 포함하고 있고 이를 사용하는 것은 lighttpd.conf 파일의 주석을 제거함으로 바로 사용가능합니다.

      일단 lighttpd.conf 파일의 제일 위 부분을 보면 아래와 같습니다.

      1. server.modules              = (   
      2.                                "mod_rewrite",   
      3. #                               "mod_redirect",   
      4. #                               "mod_alias",   
      5.                                 "mod_access",   
      6. #                               "mod_cml",   
      7. #                               "mod_trigger_b4_dl",   
      8.                                "mod_auth",   
      9. #                               "mod_status",   
      10. #                               "mod_setenv",   
      11.                                "mod_fastcgi",   
      12. #                               "mod_proxy",   
      13.                                "mod_simple_vhost",   
      14. #                               "mod_evhost",   
      15. #                               "mod_userdir",   
      16. #                               "mod_cgi",   
      17.                                "mod_compress",   
      18. #                               "mod_ssi",   
      19. #                               "mod_usertrack",   
      20. #                               "mod_expire",   
      21. #                               "mod_secdownload",   
      22. #                               "mod_rrdtool",   
      23.                                 "mod_accesslog"   
      24.                               )  

      # 은 주석을 의미합니다.
      즉 필요치 않은 모듈은 #을 줄앞에 붙여줌으로서 사용하지 않도록 하면 됩니다.

      그외 설정은 아래를 따르면 됩니다.

      1. server.document-root = "/home/..../public_html"; # document root 지정   
      2. server.error_log = "/var/log/lighttpd/error.log"; # 에러 로그 저장. 디렉토리 생성해주세요.   
      3. index-file.name = ( "index.php", "index.html", "index.htm", "default.htm") # index file 지정   
      4. mimetype.assign = ... # 그냥 두시면 됩니다.   
      5. accesslog.filename = "/var/log/lighttpd/access.log"; # access log 저장   
      6. url.access-deny = ( "~", ".inc") # 특정 파일 형식에 대해 접근 금지 시킬 수 있습니다.   
      7. static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) # mod_fastcgi나 mod_cgi 사용시 지정될 파일입니다.   
      8.   
      9. # 아파치의 vhost와 같은 정의를 아래와 같이 쉽게 할 수 있습니다. 도메인에 대한 document-root 지정   
      10. # 1개 이상의 vhost일 경우 아래 3라인을 복사해서 주죽 써나가시면 됩니다.   
      11. # 좀 더 쉽게 하려면 가상호스트 모듈 mod_evhost를 이용하면 됩니다.   
      12. $HTTP["host"] == "www2.zerophp.com" {   
      13.         server.document-root = "/home/DOMAINS/WWW"  
      14. }   
      15.   
      16. # mod_evhost 사용시 vhost 지정   
      17. # %3 는 subdomain 1의 이름입니다. 아래와 같은 패턴이 정의되어 있습니다.   
      18. # %% => % sign   
      19. # %0 => domain name + tld   
      20. # %1 => tld   
      21. # %2 => domain name without tld   
      22. # %3 => subdomain 1 name   
      23. # %4 => subdomain 2 name   
      24. evhost.path-pattern = "/var/www/hosts/%3/"  
      25.   
      26. server.username = "nobody" # 웹서버가 사용한 uid   
      27. server.groupname = "nobody" # 웹서버가 사용할 gif   
      28.   
      29. # 아래가 php의 fastcgi 연결 부분입니다.   
      30. # 다른 부분은 그대로 두고 --enable-fastcgi, --enable-force-cgi-redirect 옵션으로 컴파일한 php 실행 파일 경로만 신경쓰시면 됩니다.   
      31. fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/var/run/lighttpd/php-fastcgi.socket", "bin-path" => "/usr/local/php/bin/php" )))  


      거의 대부분 기본 설정을 쓰시면 됩니다.
      다만 사용하려는 모듈의 지정과 fastcgi.server, vhost 등 실제 값이 필요한 부분만 설정해주시면 됩니다.

      실행은 다음과 같이 하면 됩니다.

      lighttpd -f /etc/lighttpd.conf


일단 php with fastcgi, xcache, lighttpd 설치와 설정에 대해서 간단히 적었습니다.

더 상세히 적고 싶지만 저 역시 아직 공부하는 중이라 필요한 부분들만 적었습니다.

서버 관리를 하신다면 그렇게 어렵지 않을 거라 생각합니다.

참고로.. 제로보드XE에서 주소를 이쁘게 하는 mod_rewrite를 lighttpd에서도 쓸수 있는데 이걸 각 서브도메인별로 지정하는걸 모르겠네요.

일단 저는 lighttpd.conf에 지정해 놓았습니다.

먼저 server.module에서 mod_rewrite를 사용하게 해 놓으시구요.

  1. url.rewrite = (   
  2.                 "^/([a-zA-Z0-9_]+)/files/attach/images/(.*)" => "./files/attach/images/$2",   
  3.                 "^/([a-zA-Z0-9_]+)/modules/(.*)" => "./modules/$2",   
  4.                 "^/([a-zA-Z0-9_]+)/common/(.*)" => "./common/$2",   
  5.                 "^/([a-zA-Z0-9_]+)/([[:digit:]]+)page$" => "./index.php?mid=$1&page=$2",   
  6.                 "^/rss/([[:digit:]]+){0,14}/([[:digit:]]+){0,14}/([[:digit:]]+)$" => "./index.php?module=rss&act=rss&start_date=$1&end_date=$2&page=$3",   
  7.                 "^/rss/([[:digit:]]+)$" => "./index.php?module=rss&act=rss&page=$1",   
  8.                 "^/rss$" => "./index.php?module=rss&act=rss",   
  9.                 "^/admin$" => "./index.php?module=admin",   
  10.                 "^/([a-zA-Z0-9_]+)/api$" => "./index.php?mid=$1&act=api",   
  11.                 "^/([[:digit:]]+)$" => "./index.php?document_srl=$1",   
  12.                 "^/([[:digit:]]+)/([a-zA-Z0-9_]+)$" => "./index.php?document_srl=$1&act=$2",   
  13.                 "^/([[:digit:]]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$" => "./index.php?document_srl=$1&act=$3&key=$2",   
  14.                 "^/([a-zA-Z0-9_]+)/([[:digit:]]+)$" => "./index.php?mid=$1&document_srl=$2",   
  15.                 "^/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$" => "./index.php?mid=$1&act=$2",   
  16.                 "^/([a-zA-Z0-9_]+)/page/([[:digit:]]+)$" => "./index.php?mid=$1&page=$2",   
  17.                 "^/([a-zA-Z0-9_]+)/category/([[:digit:]]+)$" => "./index.php?mid=$1&category=$2",   
  18.                 "^/([a-zA-Z0-9_]+)/category/([[:digit:]]+)/page/([[:digit:]]+)$" => "./index.php?mid=$1&category=$2&page=$3",   
  19.                 "^/([a-zA-Z0-9_]+)/([[:digit:]]+)/([[:digit:]]+)$" => "./index.php?mid=$1&search_target=regdate&search_keyword=$2$3",   
  20.                 "^/([a-zA-Z0-9_]+)/([[:digit:]]+)/([[:digit:]]+)/([[:digit:]]+)$" => "./index.php?mid=$1&search_target=regdate&search_keyword=$2$3$4",   
  21.                 "^/([a-zA-Z0-9_]+)/tag/(.*)$" => "./index.php?mid=$1&search_target=tag&search_keyword=$2",   
  22.                 "^/([a-zA-Z0-9_]+)/writer/(.*)$" => "./index.php?mid=$1&search_target=nick_name&search_keyword=$2",   
  23.                 "^/([a-zA-Z0-9_]+)(/){0,1}$" => "./index.php?mid=$1" )  




로 입력해 놓았습니다.



      1 # lighttpd configuration file
      2 #
      3 # use it as a base for lighttpd 1.0.0 and above
      4 #
      5 # $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $
      6
      7 ############ Options you really have to take care of ####################
      8
      9 ## modules to load
     10 # at least mod_access and mod_accesslog should be loaded
     11 # all other module should only be loaded if really neccesary
     12 # - saves some time
     13 # - saves memory
     14 server.modules              = (
     15                                 "mod_rewrite",
     16                                 "mod_redirect",
     17                                 "mod_alias",
     18                                 "mod_access",
     19 #                               "mod_cml",
     20 #                               "mod_trigger_b4_dl",
     21                                 "mod_auth",
     22                                 "mod_status",
     23                                 "mod_setenv",
     24                                 "mod_fastcgi",
     25 #                               "mod_proxy",
     26                                 "mod_simple_vhost",
     27 #                               "mod_evhost",
     28 #                               "mod_userdir",
     29 #                               "mod_cgi",
     30 #                               "mod_compress",
     31 #                               "mod_ssi",
     32 #                               "mod_usertrack",
     33 #                               "mod_expire",
     34 #                               "mod_secdownload",
     35 #                               "mod_rrdtool",
     36                                 "mod_accesslog" )
     37
     38 ## a static document-root, for virtual-hosting take look at the
     39 ## server.virtual-* options
     40 server.document-root        = "/srv/www/htdocs/"
     41
     42 ## where to send error-messages to
     43 server.errorlog             = "/var/log/lighttpd/error.log"
     44
     45 # files to check for if .../ is requested
     46 index-file.names            = ( "index.php", "index.html",
     47                                 "index.htm", "default.htm" )
     48
     49 ## set the event-handler (read the performance section in the manual)
     50 # server.event-handler = "freebsd-kqueue" # needed on OS X
     51
     52 # mimetype mapping
     53 mimetype.assign             = (
     54   ".pdf"          =>      "application/pdf",

    131 ##
    132 # which extensions should not be handle via static-file transfer
    133 #
    134 # .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
    135 static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
    136

    451 simple-vhost.server-root   = "/srv/www/vhosts/"
    452 simple-vhost.default-host  = "www.foo.com"
    453 simple-vhost.document-root = "/htdocs/"

    497 ### fastcgi module
    498 # read fastcgi.txt for more info
    499 # for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
    500  fastcgi.debug = 1
    501  fastcgi.server             = ( ".php" =>
    502                                 ( "localhost" =>
    503                                   (
    504                                     "socket" => "/tmp/php-fastcgi.socket",
    505                                     "bin-path" => "/usr/bin/php-cgi"
    506                                   )
    507                                 )
    508                              )


[user@host lighttpd]$ locate php-cgi
/usr/local/bin/php-cgi
/usr/bin/php-cgi
/opt/php-fcgi/bin/php-cgi

[user@host lighttpd]$ /usr/local/bin/php-cgi --version
PHP 5.2.4 (cgi-fcgi) (built: Oct 12 2007 18:11:38)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

[user@host lighttpd]$ /usr/bin/php-cgi --version
PHP Warning:  [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error:  Unable to start eAccelerator module in Unknown on line 0

[user@host lighttpd]$ /opt/php-fcgi/bin/php-cgi --version
PHP 5.2.4 (cgi-fcgi) (built: Nov 28 2007 00:05:30)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

[user@host lighttpd]$ /usr/bin/php --version
PHP 5.2.6 (cli) (built: May  2 2008 11:18:31)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by
eAccelerator
    with the ionCube PHP Loader v3.1.32, Copyright (c) 2002-2007, by
ionCube Ltd., and
    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend
Technologies
    with Suhosin v0.9.22, Copyright (c) 2007, by SektionEins GmbH


출처 : forum.lighttpd.net

728x90

댓글