Project

General

Profile

Actions

TutorialLighttpdAndPHP » History » Revision 31

« Previous | Revision 31/91 (diff) | Next »
Anonymous, 2006-07-19 12:15
mod_fastcgi needs to be loaded.


= Setting up PHP with Lighttpd =
Introduction

Lighttpd supports PHP through both CGI and FastCGI. As the name suggests, FastCGI is preferable.

Performance

In all our tests it has shown better performance than Apache 1.3.x + mod_php4. See http://www.lighttpd.net/benchmark/ for the results.

Does it support opcode cachers like APC, TurckMM, XCache and friends?

YES! Even if their docs say they do not work in CGI. Under lighttpd, PHP is usually run as FastCGI which supports those opcode cachers like mod_php4 in Apache.

(more to add)

You might be interested in reading the [http://sourceforge.net/forum/forum.php?thread_id=1205624&forum_id=416741 Support for FASTCGI mode?] thread from eAccelerator Open Discussion Forum.

= Installation =

'''Startingpoint:''' Lighttpd is already [wiki:TutorialInstallation installed and working]

First of all you need a PHP which is providing FastCGI support. Depending on your
distribution you might already have it: === ArchLinux ===
Read http://wiki.archlinux.org/index.php/Fastcgi_and_lighttpd === FreeBSD === {{{
#!ShellExample
$ cd /usr/ports/www/php-cgi
$ make install clean
}}} === Gentoo ===
Make sure the USE flag 'cgi' is enabled. {{{
#!ShellExample
$ emerge -pv dev-lang/php
}}}
If it is not, then add it to make.conf or just to php. {{{
#!ShellExample
  1. echo dev-lang/php cgi >> /etc/portage/package.use
    }}}
    Emerge php. {{{
    #!ShellExample
  2. emerge dev-lang/php
    }}} === Debian ===
    Debian provides (at least in Sarge) a fastcgi enabled version - though it's called php4-cgi. {{{
    #!ShellExample
  3. apt-get install php4-cgi
    }}} === Others ===
    Download a source tar-ball from http://www.php.net/ and configure it with at least this settings: {{{
    #!ShellExample
    $ ./configure \
    --enable-fastcgi \
    --enable-discard-path \
    --enable-force-redirect
    }}}
    If you want to have the same PHP as you are using in a mod_php configuration somewhere else call {{{
    #!php

    }}}
    • copy the configure options from the output of the script
    • remove the ``--with-apxs`` and ``--with-apxs2`` options
    • add the three options from above.
      Build PHP now by callings ``make`` and ``make install`` and see if you can find a php binary which is responding: {{{
      #!ShellExample
      $ php -v
      PHP 5.0.3 (cgi-fcgi) (built: Dec 21 2004 12:59:18)
      Copyright (c) 1997-2004 The PHP Group
      Zend Engine v2.0.3, Copyright (c) 1998-2004 Zend Technologies
      with eAccelerator v0.9.3, Copyright (c) 2004-2005 eAccelerator, by eAccelerator
      }}}
      or something like this. The ``(cgi-fcgi)`` is the important part. The binary might also called ``php-cgi`` or if
      you still can't find it follow this hint: {{{
      #!ShellExample
      $ ls sapi/cgi/php
      }}}
      Configuration
      Add this line:

{{{
cgi.fix_pathinfo = 1
}}}

to you ``php.ini``. And make sure mod_fastcgi is loaded: {{{
server.modules = (
"mod_fastcgi",
)
}}}

Then add this basic section to you ``lighttpd.conf``: {{{
fastcgi.server = ( ".php" => ((
"bin-path" => "/path/to/php-cgi",
"socket" => "/tmp/php.socket",
)))
}}}
A little bit more advance is this setting which tries the tune some more options. If you need PATH_INFO the broken-scriptfilename is
for you. {{{
fastcgi.server = ( ".php" => ((
"bin-path" => "/path/to/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "16",
"PHP_FCGI_MAX_REQUESTS" => "10000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)))
}}}

If you're using any php opcode cacher, it is important to keep '''"max-procs" => 2''' low (1 or 2), unless you want to eat up so much memory.

Please read the configuration section for more background * http://www.lighttpd.net/documentation/configuration.html * http://www.lighttpd.net/documentation/fastcgi.html
and use
http://trac.lighttpd.net/trac/file/branches/lighttpd-1.3.x/doc/lighttpd.conf
as starting point for the configuration.

Per directory PHP Config
If you're used to use Apache .htaccess files to set PHP options for each directory, see HowToPhpHtaccess :

''When using a cgi version of php (plain old cgi or fast-cgi) apache can't pass
any php settings from htaccess files it parses. This can be solved by giving
each user it's own php.ini file, but I didn't like that solution.
This extension parses these configuration files (in most cases .htaccess) and
changes the settings. It will search all directories for a configuration file
from the docroot until the directory where the request scripts is found.''

[http://files.zoeloelip.be/htscanner/ Download htscanner]

Updated by Anonymous over 18 years ago · 31 revisions