'FastCGI'에 해당되는 글 3건

  1. 2009.11.04 Ubuntu + Cherokee + MySQL + PHPMyAdmin + Drupal
  2. 2009.02.10 lighttpd + php fastcgi + xcache 설치 with bin-path
  3. 2008.10.20 Web 서버 lighttpd 설치 활용 (lighttpd + FastCGI) (2)
2009.11.04 16:32

Ubuntu + Cherokee + MySQL + PHPMyAdmin + Drupal

1. Cherokee 설치

09.10.18 현재 기본 저장소에서는 0.11.6 버전이 설치되므로, 최신 버전인 0.99.24 를 이용하기 위해 PPA 저장소를 추가한다.

/etc/apt/sources.list 에 아래 내용을 추가한다.
deb http://ppa.launchpad.net/cherokee-webserver/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/cherokee-webserver/ppa/ubuntu jaunty main

다음은
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0x51bb8e83eba7bd49
를 하여 PPA gpg key 를 추가한다.

저장소 DB를 개싱한다.
aptitude update

cherokee 를 설치한다.
aptitude install cherokee


2. MySQL 설치

aptitude install mysql-server mysql-client


3. FastCGI 설치

Cherokee 웹서버는 FastCGI를 통해 PHP를 이용할 수 있다. Ubuntu에서는 FastCGI가 활성화된 PHP 패키지를 제공한다.
aptitude install php5-cgi

다음으로 FastCGI를 활성화 하기 위한 설정값을 추가한다.
echo "cgi.fix_pathinfo = 1" >> /etc/php5/cgi/php.ini

추가로 PHP에서 사용할 패키지를 설치한다. (선택)
aptitude install php5 php5-cli php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Cherokee 웹서버를 재시작하여 FastCGI 설정을 적용시킨다.
/etc/init.d/cherokee restart

cherokee 에서 PHP 설정
Vritual Server 메뉴를 선택하고 Nickname 컬럼에서 default를 선택한다.
"Virtual Server: default" 화면에서 Behavior 탭을 선택한다.
다시 Wizards 을 선택하고 Misc 에서 PHP 아이콘을 클릭한다.
그러면 Behavior 탭에서 PHP가 리스트에 나타나게 되는데 Final 컬럼에 선택 체크를 한다.
Taget 컬럼에서 PHP를 클릭하면, 기본 PHP 설정을 바꿀 수 있게 된다.
(이것은 반드시 필요하지 않으며 대부분의 경우 기본값으로도 충분하다.)

설정화면에서 save를 클릭하면 설정한 내용이 저장된다.
Control panel에서 벗어나기 전에 Cherokee를 재시작하여 적용할 수 있다.
Graceful restart 를 선택하고 Save 버튼을 선택한다.

쉽게 설명하자면 이 과정은 Apache의 httpd.conf 에서
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
을 추가하는 과정이라고 생각하면 된다.

자세한 내용은 http://www.cherokee-project.com/doc/cookbook_php.html 에서 화면으로 잘 설명해주고 있다.

모듈이 로드 되는지 확인한다.
echo "<?php phpinfo(); ?>" > /var/www/info.php

웹브라우저에서 http://192.168.0.1 접속하여 친숙한 phpinfo() 화면이 나온다면 설치가 완료된다.
만약 500 에러를 보게 된다면, 다음과 같이 사용하지 않는 IPv6 에 대한 내용을 모두 주석처리하면 문제가 해결된다.

root@jjun-desktop:~# cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       jjun-desktop

# The following lines are desirable for IPv6 capable hosts
#::1     localhost ip6-localhost ip6-loopback
#fe00::0 ip6-localnet
#ff00::0 ip6-mcastprefix
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters
#ff02::3 ip6-allhosts

참조 : http://code.google.com/p/cherokee/issues/detail?id=554


4. phpmyadmin 설치 (선택사항)

Ubuntu 에서 패키지로 제공되므로 쉽게 설치할 수 있다.
aptitude install phpmyadmin

다음의 과정으로 웹에서 접속할 수 있게 한다.
ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin
chown -R www-data:www-data /usr/share/phpmyadmin
(참고로 cherokee 데몬은 www-data 계정으로 구동된다.)

웹브라우저에서 http://192.168.0.1/phpmyadmin 접속하여 로그인 화면이 나오면 정상이다.


5. drupal 설치 준비

위에서 설치한 phpmyadmin을 이용해서 DB계정을 생성하거나 아래의 명령을 이용하여 설정한다.

mysql -u root -p
CREATE DATABASE drupal;
GRANT ALL PRIVILEGES ON drupal.* TO drupaluser@localhost IDENTIFIED BY 'pass1234';
GRANT ALL PRIVILEGES ON drupal.* TO drupaluser@localhost.localdomain IDENTIFIED BY 'pass1234';
FLUSH PRIVILEGES;
quit;

다음으로 다운로드 한 후 설치를 한다.
cd /var/www
wget http://ftp.drupal.org/files/projects/drupal-6.14.tar.gz
tar xvfz drupal-6.14.tar.gz
mv drupal-6.14 drupal

chown -R www-data:www-data /var/www/drupal

cd /var/www/drupal/sites/default
cp default.settings.php settings.php
chmod 644 settings.php

마지막으로 cherokee-admin에서 제공하는 Wizard 기능을 이용하여 drupal 이용을 위한 환경을 만들어서 설치를 진행한다.

Virtual Servers -> default -> Wizards
  -> Category - CMS -> Drupal 선택 후 Run wizard 선택
     -> Web Directory : /blog (웹상에서 접속할 경로, 즉 http://192.168.0.1 하면 drupal에 접속된다.)
     -> Source Directory : /var/www/drupal

이로써 drupal 설치을 위한 기본 작업은 완료가 되었다.
이제 웹상에서 http://192.168.0.1 에 접속하면 drupal 설치화면을 볼 수 있다. 기본 설정으로 진행하면 설치가 완료된다.


6. drupal 한글화

6.1. 먼저 locale 모듈 활성화 한다.

Administer -> SIte building -> Modules
  -> Content translation 모듈 Enabled [v] 선택
  -> locale 모듈 Enabled [v] 선택
  -> Save configuration

6.2. 한글로 번역된 po 파일을 다운로드 한다.

번역 파일은 http://drupal.org/project/korean 에서 다운로드 할 수 있다.
http://ftp.drupal.org/files/projects/ko-6.x-1.2.tar.gz 파일을 다운로드 받아 압축을 해제한다.
ko.ko.po 파일의 이름을 ko.po 로 변경한다.

Administer -> Translate interface -> Import
  -> Language file : ko.po 파일을 선택
  -> Import into : Korean(한국어) 를 선택
  -> Mode :  Existing strings are kept, only new strings are added
  -> Save configuration

Administer -> Site configuration -> Languages
  -> Korean 을 Default 로 선택
  -> Save configuration

한글이 적용되는 볼 수 있다.

dupal 동영상으로 보고 설정 방법을 익힌다. 다만 영문이다.....
http://drupal.org/node/174285

한글 좀더 상세하게 설명하는 링크를 안내한다.

드루팔로 웹사이트 구축하기
http://hardworker.tistory.com/tag/드루팔

Drupal의 필수 모듈(modules) 모음
http://appletree.or.kr/blog/notes/drupal의-필수-모듈modules-모음/

참조
http://howtoforge.com/installing-cherokee-with-php5-and-mysql-support-on-ubuntu-9.04
http://www.ubuntugeek.com/howto-install-cherokee-web-server-with-mysql-php-support-on-jaunty.html
http://www.cherokee-project.com/doc/cookbook_phpmyadmin.html
http://blog.naver.com/junix/80092137768
http://palpal.org/ko/installation
http://www.starhost.co.kr/xe/hosting_tip/1230

http://2bits.com/articles/benchmarking-drupal-with-php-op-code-caches-apc-eaccelerator-and-xcache-compared.html
http://wimleers.com/article/improving-drupals-page-loading-performance
http://tag1consulting.com/blog
http://translate.google.com/translate?prev=hp&hl=ko&js=y&u=http%3A%2F%2Fbbs.linuxpk.com%2Farchiver%2Ftid-37169.html&sl=zh-CN&tl=en&history_state0=



출처 : http://blog.naver.com/junix

Trackback 0 Comment 0
2009.02.10 11:37

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


Trackback 0 Comment 0
2008.10.20 10:07

Web 서버 lighttpd 설치 활용 (lighttpd + FastCGI)

제공 : 한빛 네트워크
저자 : Bill Lubanovic
역자 : 추홍엽
원문 : The lighttpd Web Server

최근까지 아파치는 심각한 오픈소스 라이벌이 없었다. Netcraft사의 최근 웹서버 조사에서 한가지 주목할 만한 것이 있다. 언제나처럼 아파치가 정상을 차지하고 있고, Microsoft사의 IIS가 2위, 그리고 꾸준한 인기를 얻어온 unknown이 3위였다. 4위는 Sun사의 Java Web Server(이전까지는 ONE으로, 그이전에는 iPlanet, 그 이전에는 Netscape으로 알려져있었던). 그런데 5위는 1천 4백만 사이트에서 사용하고 있는 lighttpd라는 서버였다. 대체 어디서 나타난 녀석이란 말인가. 이제부터 lighttpd의 역사와 기본 설치 및 설정방법, 그리고 앞으로의 비전에 대해 살펴보려 한다.

이것은 '라이-티-피-디(lite-tee-pee-dee)'라고 발음하며, 짧게는 '라이티(lighty)'라고 부른다. 뭐라고 찾던 간에 웹사이트나 위키, 블로그 혹은 포럼 등에서 이것에 대한 많은 정보를 찾을 수 있다. lighttpd는 적은 자원을 사용하여 높은 성능을 내는 웹서버로서 고안되었다. 이것은 아파치보다 훨씬 적은 메모리를 사용하면서도 일반적으로 아파치보다 속도가 빠르다. lighttpd는 YouTube, Wikipedia, Meebo, 그리고 A List Apart를 포함한 여러 중책 사이트에서 묵묵히 가동되고 있다. lighttpd가 루비 온 레일즈나 트랙(Trac)과 같은 인기 툴들과 함께 아파치를 대신하는 것을 종종 보게 될 것이다.

아파치의 잘못된 점

그 인기에도 불구하고 가끔 아파치는 최상의 솔루션이 아닐 때가 있다. 아파치는 서로 다른 런타임 환경에서 사용할 수 있게 하기 위해 서로 다른 다중-프로세싱 모델(Multi-Processing Models, MPMs)을 제공한다. 선분기(prefork) 모델 -- Linux에서 가장 인기 있다 -- 은 시작시에 여러 개의 아파치 프로세스를 생성하고 이들을 풀에서 관리한다. 이에 대한 대안적인 작업모델은 여러개의 프로세스 대신에 다중 스레드를 사용한다. 비록 스레드가 프로세스보다 가볍긴 하지만, 전체 서버가 스레드에 안전(threadsafe)하지 않으면 이를 사용할 수 없다. 아파치와 mod_php가 스레드에 안전하다고 하지만 서드파티 모듈에 대해 보장되진 않는다. PHP 사이트는 스레드를 쓰는 MPM을 가진 아파치2 사용을 말리고 있다. 이것이 개발자들로 하여금 아파치 1.3에서 2.0으로 이동하는 것을 늦추게 된건지도 모른다. 그러나 선분기 모델은 그 자체에 문제점을 가지고 있는데, 각 프로세스(아파치 + PHP + 서드파티 모듈)가 너무 많은 메모리를 사용한다(30MB도 이상하지 않을 정도다). 여기에 동시에 돌아가는 아파치 프로세스 수를 곱하면, 사용할 수 있는 RAM은 순식간에 사라질 것이다.

lighttpd의 과거

어떤 웹사이트들은 동시에 수천개의 파일을 수행하는데, 메모리와 최대 스레드 또는 프로세스 수는 제한되어 있다. Dan Kegel은 C10K 문제에 관한 그의 페이지에서 수천개의 동시 접속을 다룰때 마주치게 되는 문제들에 대해 자세히 설명했다. 2003년 독일의 MySQL 개발자인 Jan Kneschke는 이 문제에 관해 흥미를 가지게 되었고 올바른 기술에 초점을 맞춤으로써 아파치보다 더 빠른 웹서버를 만들 수 있을 것이라고 믿었다. 그는 단일 스레드와 비블러킹(non-blocking) I/O를 가진 단일 프로세스로서 lighttpd를 고안했다. poll, epoll, kqueue, 혹은 /dev/poll 중 어느 하나를 선택하는 대신에 목표 시스템에서 가장 빠른 이벤트 핸들러를 사용했다. 그리고 read나 write보다는 sendfile 같은 제로카피(zero-copy) 시스템 콜을 채택했다. 몇 개월 후 lighttpd는 아파치보다 더 빠르게 정적 파일들을 수행할 수 있었다.

다음 단계는 동적 어플리케이션(CGI), 특히 PHP를 다루는 문제였다. Kneschke 인터넷 초창기 시절 CGI 수행속도를 향상시키기 위해 Open Market에서 만들었던 FastCGI를 털어냈다. 각각의 호출상에서 웹서버가 똑같은 외부 CGI 프로그램을 시작하는 대신, FastCGI는 본질적으로 CGI 어플리케이션을 먼저 실행시키고 자신과 웹서버 사이에서의 통신을 다루는 데몬이었다. 이것도 빨랐지만 후에 펄과 PHP가 아파치에 모듈로 흡수되면서 더 빨라졌고 아파치의 내부 HTTP 실행 단계에 접근 할 수 있게 되었다. 아파치용 FastCGI는 등한시 되었지만 후에 lighttpd에 추가되고 PHP와 연결되면서 FastCGI의 성능은 mod_php를 쓰는 아파치와 상응하거나 그를 초월하게 되었다. 추가적으로 lighttpd구현에는 자동 로드밸런싱이 추가되었다.

lighttpd 생태계는 가상 호스트, 리플렉션, URL 재작성, 인증 및 다른 웹스런 것들을 관리하기 위한 모듈로 확장되어 왔다. 대부분의 용도로는 아파치로 할 수 있는 어떠한 것도 lighttpd에서 할 수 있다. 다음 몇개의 장들에서 lighttpd 설치와 설정하는 법들을 아파치의 경우와 함께 살펴보려 한다.

lighttpd 설치

lighttpd를 설치하고 이리저리 쿡쿡 찔러보도록 하자. 위키의 설치 페이지에서는 다양한 리눅스 배포판에 대한 바이너리 혹은 소스 설치 예를 보여주고 있다. 단순 무식한 남성미가 넘치는 개발자들(여러분들을 말하는 것은 아니다)을 위한, 전체 소스 인스톨은 다음과 같이 한다.

추가) 컴파일을 하기전에 pcre과 zlib 개발 패키지가 시스템에 설치되어야 한다.

    # yum install pcre-devel
    # yum -y install zlib-devel

    # wget http://www.lighttpd.net/download/lighttpd-1.4.13.tar.gz
    # tar xvzf lighttpd-1.4.13.tar.gz
    # cd lighttpd-1.4.13
    # ./configure
    # make
    # make install

이는 /usr/local 아래에 lignttpd를 설치할 것이다. 만약 빌드가 실패하면, 설치에 앞서 필요한 pcre과 zlib 개발 패키지가 시스템에 설치되어 있는지 확인하라.

lighttpd를 수동으로 시작하거나 종료하고 싶으면 여기서 끝이다. lighttpd를 아파치처럼 서비스로서 인스톨 하려면, init 스크립트를 수정하고 인스톨한다.

    # sed -e 's/FOO/lighttpd/g' doc/rc.lighttpd > lighttpd.init
    # chmod a+rx lighttpd.init
    # cp lighttpd.init /etc/init.d/lighttpd
    # cp -p doc/sysconfig.lighttpd /etc/sysconfig/lighttpd
    # install -Dp ./doc/lighttpd.conf /etc/lighttpd/lighttpd.conf
    # chkconfig lighttpd on

 

기본 설정

lighttpd 설정 파일의 문법은 아파치와의 눈에 보이는 가장 큰 차이점이라 할 수 있다. 위키의 설정 페이지 예제는 아파치의 XML스러운 httpd.conf보다 펄(혹은 PHP나 파이썬)쪽에 더 가까워 보인다. 정적인 파일들을 지닌 간단한 웹사이트의 경우, 아파치의 경우와 같이 도큐먼트 루트, 로그파일명, 리눅스 사용자와 그룹명 등을 명시할 필요가 있다. 다음의 아파치 설정(httpd.conf)과 lighttpd 설정(lighttpd.conf)은 대등하다.

Apache:

DocumentRoot /var/www/html
CustomLog /var/www/logs/access
ErrorLog /var/www/logs/error
User www
Group www
lighttpd:
server.document-root = "/var/www/html"
accesslog.filename = "/var/www/logs/access"
server.errorlog = "/var/www/logs/error"
server.username = "www"
server.groupname = "www"
server.modules = ( "mod_accesslog" )
lighttpd는 아파치와 유사한 인클루드 메커니즘을 가지고 있기 때문에 lighttpd.conf가 더 커질 필요가 없다. 추가적인 모듈을 사용하기 위해, 그 기능을 켜고 그 옵션을 설정하면 된다. 아파치는 LoadModule로 이것을 켜지만, lighttpd는 단지 server.modules 배열에서 주석처리 안된 모듈명을 인클루드 한다. 그보다 훨씬 필요한 유일한 하나는 mod_accesslog이다.

인증(Authentication)과 권한부여(Authorization)

lighttpd는 .htaccess 파일을 지원하지 않으므로 모든 설정을 lighttpd.conf 파일 혹은 그것이 인클루드하는 파일에 명시할 필요가 있다. 이것은 기본적인 아파치 user 파일을 잘 이해하고 인증을 소화한다. 그러나 group 파일 지원은 아직 구현되지 않았다. 다음은 special이라 부르는 최상위 디렉토리에 비밀번호 보호를 거는 방법이다.

Apache:
  AuthName "My Special Directory"
  AuthType Basic
  AuthUserFile /var/www/passwords/users
  Order deny,allow
  require valid-user

lighttpd: 
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/var/www/passwords/users"
auth.require = ( "/special/" =>
  (
  "method"   => "basic",
  "realm"    => "My Special Directory",
  "require"  => "valid-user"
  )
)



가상 호스트

이번엔 열심히 일하면서도 진가를 인정받지 못하는 여러분의 웹서버를 위한 또 다른 과제다: scratch.example.com과 sniff.example.com로 불리우는 두 사이트를 관리하는 일이다.

Apache:
NameVirtualHost *

  ServerName "scratch.example.com"
  DocumentRoot "/var/www/hosts/scratch/docs"


  ServerName "sniff.example.com"
  DocumentRoot "/var/www/hosts/sniff/docs"

lighttpd:
$HTTP["host"] == "scratch.example.com" {
  server.document-root = "/var/www/hosts/scratch/docs/" }
$HTTP["host"] == "sniff.example.com" {
  server.document-root = "/var/www/hosts/sniff/docs/" }
이는 힘들게 일하는 방식이다. 만약 여러분이 많은 호스트들을 관리한다면, 가상 호스트 모듈로 입력을 더 줄일 수 있다:

Apache:
LoadModule vhost_alias_module modules/mod_vhost_alias.so
VirtualDocumentRoot /var/www/hosts/%1/docs
lighttpd:
server.modules = ( ..., "mod_evhost", ... )
evhost.path-pattern = "/var/www/hosts/%3/docs"
Server-Side Includes (SSI)

동적 컨텐츠를 향한 기초 걸음마로, 파일끝에 .shtml를 붙여서 SSI를 켜는 것은 쉽다.

Apache:
AddHandler server-parsed .shtml
lighttpd:
server.modules = ( ..., "mod_ssi", ... )
ssi.extension = ( "shtml" )
PHP

lighttpd 는 CPU 집중적인 동적 컨텐츠를 또 다른 프로세스에 덜어줌으로써 정적 파일 처리량을 최적화 한다. PHP를 내부적으로 처리하기보다는 아파치가 mod_php를 쓰는 것처럼, lighttpd도 FastCGI에 그것을 맡긴다. 이러한 설정 부분은 지루하고 활기없는 .php파일들을 활기찬 PHP 스크립트로 변화시킨다. 이곳과 같은 패밀리 사이트에서 보는 것 보다 좀 더 즐겁게 세부적인 것을 보려면, 이 페이지를 참조하라.

Apache:
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
lighttpd:
server.modules = ( ..., "mod_fastcgi", ... )
fastcgi.server =
  ( ".php" =>
    ( "localhost" =>
      (
      "socket" => "/tmp/php-fastcgi.socket",
      "bin-path" => "/usr/local/bin/php"
      )
    )
  )
lighttpd의 실행 및 종료 (추가)
실행
# /usr/local/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
종료
# ps auwx | grep lighttpd
# kill [lighttpd ps]
lighttpd의 장점

lighttpd 는 압축, 디렉토리 목록나열, 사용자 디렉토리, SSL, WebDAV, 그리고 URL 다시쓰기(rewriting)나 리다이렉션에 대해 아파치와 동등한 모듈을 포함한다. 이러한 것들에 대해서는 웹사이트 상에서 읽어볼 수 있다. lighttpd에만 있는 다른 흥미로운 모듈들도 있다.

조그만 YouTube가 되고 싶다면, mod_flv_streaming 모듈을 사용하여 수천개의 플래시 무비를 평행하게 스트리밍할 수 있다. 비록 YouTube는 아직 이 모듈을 사용하지는 않지만, 정적 파일들에 대해서는 lighttpd로 수행한다.

여러분이 만약 수많은 플래시 파일들을 보유한 사이트를 가지고 있다면 핫링킹(hotlinking)에 대해 보호하는 것은 어떤가. 어떠한 파일 타입에도 적용가능한 lighttpd의 해결책은 mod_secdownload이다. 특별한 URL을 생성하는 함수를 작성하여 이 모듈이 그 URL을 가지고 주어진 파일을 주어진 시간만큼 접근할 수 있는 권한을 주는 것이다.

Lighty 1.5.0

Kneschke는 현재 1.5.0 버전에 박차를 가하고 있다. 이 버전에서는 성능과 유연성이 향상될 것이다. 새로운 I/O 서브시스템은 스레딩(여기서는 스레드가 맞을 듯 하다)과 비동기 I/O -- POSIX나 리눅스 네이티브, 혹은 glib 2.0에 있는 userland gthread wrapper -- 를 통해 향상될 것이다.

mod_proxy_core는 mod-proxy, mod-fastcgi, mod-scgi 세 개의 백-엔드(backend) 모듈을 통합한다. 실제 처리에서 프로토콜을 분리함으로써 로드밸런싱 및 실패처리(fail-over), keep-alive, 기본 프록시 기능에 내부 큐를 사용하는 것들이 가능해진다.

mod_magnet라 부르는 최근의 추가사항은 lighttpd의 미래에 커다란 역할을 할 것으로 기대된다. 이것은 URL 재작성이나 컨텐츠 생성을 포함하여 HTTP 요청과 응답의 서로다른 단계에 접근하게 할 수 있다. 한가지 흥미로운 선택은 아파치의 mod_rewrite와 같은 복잡한 문법 보다는 Lua라는 내장된 스크립트 언어를 사용한다는 것이다. 우리는 개발자들이 이것을 좋아하게 되던지 아니면 아파치의 친숙하지만 때론 어려운 rewrite 규칙에 고착하게 되는지 보게될 것이다.

Lighty는 어디로 가고 있는가?

Kneschke는 lighttpd의 미래가 다음 두가지 경우를 따를 것이라 기대한다:
  • 고성능, 고사용성의 컨텐츠 전송
  • 임베디드 서버, 크로스 컴파일, 적은 메모리 사용
1.5.0 이후에, mod_magnet는 좀더 많은 동적 서버 설정을 제공할 것이다. 이는 .htaccess을 지원하지 않아 lighttpd로 옮겨가길 거부해온 일부 아파치 개발자들을 끌어들일 것이다. 필자는 Comet--역 Ajax의 한 종류, 새로운 데이터가 있을때 서버가 클라이언트를 업데이트한다--에 대한 지원이 계획되길 고대하고 있다. 이것은 웹 대쉬보드나 채팅, 혹은 다른 상당히 인터랙티브한 어플리케이션들을 가지고 있다. Ajax와 Comet으로 웹 어플리케이션은 좀 더 전통적인 GUI 어플리케이션과 같은 모습을 할 수 있다. 그러나 이러한 새로운 기능들이 아니더라도 lighttpd는 벌써 아파치의 강력한 경쟁상대--특히 메모리가 제한되어 있거나 많은 정적파일들로 구성된 작업량에 대해서--이다. 가벼운게 좋은거다.


저자 Bill Lubanovic는 70년대에 UNIX로 소프트웨어 개발을 시작했고, 80년대에는 GUIs, 90년대에는 웹개발을 해왔다. 그는 현재 한 풍력 관련 회사에서 웹 비주얼 작업을 하고 있다.
 
 

원문 및 출처 - eLancer(http://www.elancer.co.kr)

lighttpd
(http://www.lighttpd.net/)는 고속 시큐어 동작을 목표로 개발된 Web 서버이다. Fedora Core 4는 Fedora Extras에 패키지가 준비되어 있으므로, yum 커멘드로 간단하게 인스톨 할 수 있다.

# yum install lighttpd

 lighttpd는 이하의 커멘드로 기동한다.

# service lighttpd start

 Web 브라우저를 사용해 Web 서버에 액세스 하면, 아래와 같은 Web 페이지가 표시될 것이다([시큐러티 레벨 설정]에서 「WWW(HTTP)」를 허가할 필요가 있다).

lighttpd의 디폴트 Web 페이지

 Apache의 경우 문서 루트의 디폴트 설정은 /var/www/html 디렉토리이지만, lighttpd의 경우는 /srv/www/lighttpd 디렉토리이다.

 CGI를 이용하는 경우엔 추가 패키지의 FastCGI를 인스톨 해 설정 파일(/etc/lighttpd/lighttpd.conf)을 변경할 필요가 있다.

# yum install lighttpd-fastcgi

 FastCGI를 인스톨 하고 /etc/lighttpd/lighttpd.conf를 이하와 같이 수정한다.

server.modules               = (
(생략) 
                                "mod_fastcgi", ←「#」을 삭제해 유효화
#                               "mod_proxy",
#                               "mod_simple_vhost",
#                               "mod_evhost",
#                               "mod_userdir",
                                "mod_cgi", ←「#」을 삭제해 유효화
(생략)


#### CGI module
cgi.assign                  = ( ".pl"  => "/usr/bin/perl", ←「#」을 삭제해 유효화
                                ".cgi" => "/usr/bin/perl" ) ←「#」을 삭제해 유효화

 /etc/lighttpd/lighttpd.conf의 수정이 끝나면, lighttpd를 재기동해 설정을 반영시킨다.

# service lighttpd restart

다음은 http://www.howtoforge.com/lighttpd_php5_mysql_centos5.0 문서를 우리말로 번역하면서 내 마음대로 수정한 문서입니다.

Simple Lighttpd Configuration

The FastCGI front-end was developed primarily for use with alternative webservers, such as lighttpd.

lighttpd is a secure, fast, compliant and very flexible web-server that has been optimized for high-performance environments. It has a very low memory footprint compared to other web servers and takes care of CPU load.

For using trac.fcgi with lighttpd add the following to your lighttpd.conf:

fastcgi.server = ("/trac" =>
                   ("trac" =>
                     ("socket" => "/tmp/trac-fastcgi.sock",
                      "bin-path" => "/path/to/cgi-bin/trac.fcgi",
                      "check-local" => "disable",
                      "bin-environment" =>
                        ("TRAC_ENV" => "/path/to/projenv")
                     )
                   )
                 )

Note that you will need to add a new entry to fastcgi.server for each separate Trac instance that you wish to run. Alternatively, you may use the TRAC_ENV_PARENT_DIR variable instead of TRAC_ENV as described above, and you may set one of the two in trac.fcgi instead of in lighttpd.conf using bin-environment (as in the section above on Apache configuration).

For using two projects with lighttpd add the following to your lighttpd.conf:

fastcgi.server = ("/first" =>
                   ("first" =>
                    ("socket" => "/tmp/trac-fastcgi-first.sock",
                     "bin-path" => "/path/to/cgi-bin/trac.fcgi",
                     "check-local" => "disable",
                     "bin-environment" =>
                       ("TRAC_ENV" => "/path/to/projenv-first")
                    )
                  ),
                  "/second" =>
                    ("second" =>
                    ("socket" => "/tmp/trac-fastcgi-second.sock",
                     "bin-path" => "/path/to/cgi-bin/trac.fcgi",
                     "check-local" => "disable",
                     "bin-environment" =>
                       ("TRAC_ENV" => "/path/to/projenv-second")
                    )
                  )
                )

Note that field values are different. If you prefer setting the environment variables in the .fcgi scripts, then copy/rename trac.fcgi, e.g., to first.fcgi and second.fcgi, and reference them in the above settings. Note that the above will result in different processes in any event, even if both are running from the same trac.fcgi script.

Note from c00i90wn: It's very important the order on which server.modules are loaded, if mod_auth is not loaded BEFORE mod_fastcgi, then the server will fail to authenticate the user.

For authentication you should enable mod_auth in lighttpd.conf 'server.modules', select auth.backend and auth rules:

server.modules              = (
...
  "mod_auth",
...
)

auth.backend               = "htpasswd"

# Separated password files for each project
# See "Conditional Configuration" in
# http://trac.lighttpd.net/trac/file/branches/lighttpd-merge-1.4.x/doc/configuration.txt

$HTTP["url"] =~ "^/first/" {
  auth.backend.htpasswd.userfile = "/path/to/projenv-first/htpasswd.htaccess"
}
$HTTP["url"] =~ "^/second/" {
  auth.backend.htpasswd.userfile = "/path/to/projenv-second/htpasswd.htaccess"
}

# Enable auth on trac URLs, see
# http://trac.lighttpd.net/trac/file/branches/lighttpd-merge-1.4.x/doc/authentication.txt

auth.require = ("/first/login" =>
                ("method"  => "basic",
                 "realm"   => "First project",
                 "require" => "valid-user"
                ),
                "/second/login" =>
                ("method"  => "basic",
                 "realm"   => "Second project",
                 "require" => "valid-user"
                )
               )

Note that lighttpd (I use version 1.4.3) stopped if password file doesn't exist.

Note that lighttpd doesn't support 'valid-user' in versions prior to 1.3.16.

Conditional configuration is also useful for mapping static resources, i.e. serving out images and CSS directly instead of through FastCGI:

# Aliasing functionality is needed
server.modules += ("mod_alias")

# Setup an alias for the static resources
alias.url = ("/trac/chrome/common" => "/usr/share/trac/htdocs")

# Use negative lookahead, matching all requests that ask for any resource under /trac, EXCEPT in
# /trac/chrome/common, and use FastCGI for those
$HTTP["url"] =~ "^/trac(?!/chrome/common)" {
# If you have previous fastcgi.server declarations for applications other than Trac, use += here
# instead of = so you won't overwrite them
fastcgi.server = ("/trac" =>
                   ("trac" =>
                     ("socket" => "/tmp/trac-fastcgi.sock",
                      "bin-path" => "/path/to/cgi-bin/trac.fcgi",
                      "check-local" => "disable",
                      "bin-environment" =>
                        ("TRAC_ENV" => "/path/to/projenv")
                     )
                   )
                 )
}

The technique can be easily adapted for use with multiple projects by creating aliases for each of them, and wrapping the fastcgi.server declarations inside conditional configuration blocks. Also there is another way to handle multiple projects and it's to use TRAC_ENV_PARENT_DIR instead of TRAC_ENV and use global auth, let's see an example:

#  This is for handling multiple projects
  alias.url       = ( "/trac/" => "/path/to/trac/htdocs/" )

  fastcgi.server += ("/projects"  =>
                      ("trac" =>
                        (
                          "socket" => "/tmp/trac.sock",
                          "bin-path" => "/path/to/cgi-bin/trac.fcgi",
                          "check-local" => "disable",
                          "bin-environment" =>
                            ("TRAC_ENV_PARENT_DIR" => "/path/to/parent/dir/of/projects/" )
                        )
                      )
                    )
#And here starts the global auth configuration
  auth.backend = "htpasswd"
  auth.backend.htpasswd.userfile = "/path/to/unique/htpassword/file/trac.htpasswd"
  $HTTP["url"] =~ "^/projects/.*/login$" {
    auth.require = ("/" =>
                     (
                       "method"  => "basic",
                       "realm"   => "trac",
                       "require" => "valid-user"
                     )
                   )
  }

Changing date/time format also supported by lighttpd over environment variable LC_TIME

fastcgi.server = ("/trac" =>
                   ("trac" =>
                     ("socket" => "/tmp/trac-fastcgi.sock",
                      "bin-path" => "/path/to/cgi-bin/trac.fcgi",
                      "check-local" => "disable",
                      "bin-environment" =>
                        ("TRAC_ENV" => "/path/to/projenv",
                        "LC_TIME" => "ru_RU")
                     )
                   )
                 )


MySQL 5 설치

Yum을 이용하여 mysql을 설치한다.

# yum install mysql mysql-server

서버 구동시에 자동으로 DB를 시작할 수 있도록 설정.

# chkconfig --levels 235 mysqld on /etc/init.d/mysqld start

mysql root 패스워드를 설정한다.

# mysqladmin -u root password yourrootsqlpassword

 

Lighttpd 설치

[참고]CentOS 공식 미러사이트에는 Lighttpd 패키지가 포함되어 있지 않으므로 설치를 위하여 rpmforge 저장소를 추가해야 한다.

# rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm  (존재하지 않는 주소 아래 내용 참조)

참고사이트 : http://dag.wieers.com/rpm/FAQ.php#B2

 http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

2008.07.11 위의 주소로 변경됨

Yum을 이용하여 Lighttpd를 설치한다.

# yum install lighttpd

서버 구동시에 자동으로 Lighttpd를 시작할 수 있도록 설정.  데몬 스타트.

# chkconfig --levels 235 lighttpd on /etc/init.d/lighttpd start

이제 80포트가 Listen 상태에 들어가고 웹 접속이 가능하다.

/etc/lighttpd/lighttpd.conf 파일을 적절히 수정하자.

 

PHP 설치

역시 Yum을 이용하여 PHP를 설치한다.

Lighttpd 와 PHP의 연동은 fastcgi 를 활용한다.

# yum install lighttpd-fastcgi php-cli

일단 설치는 끝났다.  이제 설정을 조정하자.

설정은 /etc/lighttpd/lighttpd.conf ,   /etc/php.ini  이 두 파일을 수정해야 한다.

/etc/php.ini 파일을 열어서

      # vi /etc/php.ini

마지막 라인에 아래 내용을 추가해 준다.

  1. ( 기존 내용 )
  2. cgi.fix_pathinfo = 1

/etc/lighttpd/lighttpd.conf 파일을 열어서

      # vi /etc/lighttpd/lighttpd.conf

mod_access / mod_fastcgi 부분의 주석을 해제하여 활성화 한다.

  1. [...]
    server.modules              = (
    #                               "mod_rewrite",
    #                               "mod_redirect",
    #                               "mod_alias",
                                  "mod_access",
    #                               "mod_cml",
    #                               "mod_trigger_b4_dl",
    #                               "mod_auth",
    #                               "mod_status",
    #                               "mod_setenv",
                                  "mod_fastcgi",
    #                               "mod_proxy",
    #                               "mod_simple_vhost",
    #                               "mod_evhost",
    #                               "mod_userdir",
    #                               "mod_cgi",
    #                               "mod_compress",
    #                               "mod_ssi",
    #                               "mod_usertrack",
    #                               "mod_expire",
    #                               "mod_secdownload",
    #                               "mod_rrdtool",
                                    "mod_accesslog" )
    [...]

php-cgi 파일의 경로에 맞게 해당 부분을 수정한다. ( 예: /usr/bin/php-cgi )

  1. [...]
    #### fastcgi module
    ## read fastcgi.txt for more info
    fastcgi.server    = ( ".php" =>
                    ( "localhost" =>
                        (
                          "socket" => "/tmp/php-fastcgi.socket",
                          "bin-path" => "/usr/bin/php-cgi"
                        )
                    )
                 )
    [...]

설정을 적용하기 위해 Lighttpd 데몬을 재시작한다.

      # /etc/init.d/lighttpd restart

 

PHP에 MySQL support 추가

Yum을 이용하여 PHP 확장모듈을 추가한다. 필요한 모듈만 적절히 추가할 것.

# yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc

설정을 적용하기 위해 Lighttpd 데몬 재시작

# /etc/init.d/lighttpd restart

설정이 제대로 적용되어 있는지는 phpinfo() 함수를 활용하면 된다.

 

[참고]

/etc/lighttpd/lighttpd.conf 파일에서 기본 Document_root는  /srv/lighttpd/www이다

적절히 수정하여 사용하도록 하자..


Trackback 3 Comment 2
  1. Favicon of http://alltuck.net 카리스턱 2010.11.21 15:29 address edit & del reply

    안녕하세요. 구글링하다가 궁금해서 이렇게 댓글남겼습니다. .htaccess 를 지원하지 않는다는 것은 어떤기능이 안된다는 건가요? 제가 초보라 이해가 잘 안되어서요. 예를 들면 저는 워드프레스를 사용중인데 저 파일이 주소표시줄의 주소를 한글이나 영문주소로 나타나게 해주는 서비스로만 알고있거든요. htaccess 가 안되면 한글주소나 영문주소가 안되는건가요?

    즐거운 주말되시구요.

    • lighttpd 2010.11.22 19:08 address edit & del

      lighttpd 는 웹서버 인데요..
      어떤 기능을 하시려고 하는건지ㅋ