Lighttpd 1.5 fastcgi php mod proxy backend fastcgi configuration howto

last updated in Categories lighttpd, Linux, RedHat/Fedora Linux, Suse Linux, Tips, Ubuntu Linux, UNIX

Old version 1.4.xx has mod_fastcgi for PHP. This module has been replaced by mod_proxy_backend_fastcgi and mod_proxy_core in Lighttpd 1.5.xx.

FastCGI was developed by FastCGI and is a binary container around HTTP requests which reduces the parsing overhead.

FastCGI used for both PHP and rails application. In this small howto I will explain howto configure PHP under Lighttpd 1.5.xx.

Required softwares

[a] Make sure you have Lighttpd v1.5.xx installed

[b] spawn-fcgi binary (part of lighttpd software) to spawns fastcgi processes. It is used to spawn remote/local FastCGI processes such as PHP or ruby.

[c] PHP compiled / installed as fastcgi. Type the following command to verify that php is installed as fastcgi binary (look for cgi-fcgi word):
$ php-cgi -v
OR
$ php -v
Output:

PHP 5.1.6 (cgi-fcgi) (built: Mar  9 2007 07:25:36)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

mod_proxy_backend_fastcgi configuration

Open configuration file /etc/lighttpd/lighttpd.conf
# vi /etc/lighttpd/lighttpd.conf
Make sure following modules are loaded:
server.modules += ( "mod_proxy_core", "mod_proxy_backend_fastcgi" )

Configure fastcgi PGP module by appending following configuration directives:

$HTTP["url"] =~ "\.php$" {
        proxy-core.balancer = "round-robin"
        proxy-core.allow-x-sendfile = "enable"
        proxy-core.check-local = "enable"
        proxy-core.protocol = "fastcgi"
        proxy-core.backends = ( "unix:/tmp/php-fastcgi.sock" )
        proxy-core.max-pool-size = 16
}

Save and close the file.

Task: Start lighttpd

Type the following command to swap php using spawn-fcgi:
# /usr/bin/spawn-fcgi -s /tmp/php-fastcgi.sock -f /usr/bin/php-cgi -u lighttpd -g lighttpd -C 5 -P /var/run/spawn-fcgi.pid

Start/restart lighttpd:
# /etc/init.d/lighttpd start

Task: Stop lighttpd

Type the following command:
# /etc/init.d/lighttpd stop
Kill external php process:
# killall php-cgi

Task: Patch lighttpd init startup script

Since lighttpd uses external binary to swap php or ruby application you need to add stop and start functionality by patching /etc/init.d/lighttpd file. You can grab my /etc/init.d/lighttpd file .
# cd /etc/init.d/
# mv lighttpd lighttpd.old
# wget http://www.cyberciti.biz/files/lighttpd/1.5.0/lighttpd.init.d.txt
# mv lighttpd.init.d.txt lighttpd
# chmod +x lighttpd

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

10 comment

  1. Ah, nice work. I’ll have to play with this once 1.5x comes out officially. Bookmarked till then.

  2. good job dude, just upgraded today from 1.4.18 to 1.5 and was surprise to see the fastCGI system fuly rewrote, but finnally that’s better I no more have to use the 3rd party tool execwrap now because spawn-cgi does the job, thanks for the nice page dude, already ready for 1.5.x by your help 😉

  3. Thanks for this very informative tutorial, I was able to compile and get lighttpd 1.5.0 running but I’m having a problem with the init script to run spawn-fcgi and lighttpd automatically. I’m using ubuntu 8.10 and the script that you have does not seem to work.

    Can you please provide instructions on how I can configure lighttpd on ubuntu and also using virtual host.

    Thanks 🙂

  4. Thank you for apwn-fcgi command.
    I was install Lighttpd 1.5 and get problem with php engine.
    After apwan-fcgi I can run .php file.

  5. After following all the steps when i am trying to start lighttpd its showing me this error:
    Can’t open /etc/rc.d/init.d/functions

    any clue wil be very much appreciated , please

  6. Just wanted to mention that PHP 5.3 has fcgi enabled by default, and the output of the “php -v” command won’t containg the “cgi” word ..

    Have a question? Post it on our forum!