lighttpd is an open-source web server more optimized for speed-critical environments than common products while remaining standards-compliant, secure and flexible. This tutorial shows how you can install Lighttpd on a CentOS 6 server with PHP (PHP-FPM).
First, update CentOS to latest version, login root and type the following command
# yum update -y
Install some packages need for the following steps
# yum install wget make cpp gcc gcc-c++ -y
Make a folder where you will store lighttpd and php sources
# mkdir -p /opt/source
Installing Lighttpd
You need to download the latest lighttpd source from http://www.lighttpd.net/download into the /opt/source. Type the following command
# cd /opt/source # wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.30.tar.gz
Extract lighttpd-1.4.30.tar.gz package
# tar zxvf lighttpd-1.4.30.tar.gz # cd lighttpd-1.4.30
To build lighttpd, type the following command
# ./configure --prefix=/webserver/lighttpd --disable-ipv6 # make # make install
During ./configure, you might get some errors like the following
... configure: error: pcre-config not found, install the pcre-devel package or build with --without-pcre ...
To solve the problem, type the following command
# yum install pcre pcre-devel
... configure: error: zlib-headers and/or libs where not found, install them or build with --without-zlib ...
To solve the problem, type the following command
# yum install zlib zlib-devel
... configure: error: bzip2-headers and/or libs where not found, install them or build with --without-bzip2 ...
To solve the problem, type the following command
# yum install bzip2 bzip2-devel
Configuring Lighttpd
Access to folder of lighttpd, where lighttpd installed [/webserver/lighttpd] and make dirs
# cd /webserver/lighttpd # mkdir -p etc/init.d # mkdir -p etc/sysconfig # mkdir -p www/htdocs # mkdir -p var/run # mkdir -p var/log # mkdir -p var/lock/subsys # mkdir -p var/cache
Add a user called “lighttpd” and chown all dir made for lighttpd user
# useradd -s /sbin/nologin -d /webserver/lighttpd/www/ lighttpd # chown lighttpd -R etc # chown lighttpd -R var # chown lighttpd -R www
Return back forder /opt/source/lighttpd-1.4.30 to copy configuration files
# cd /opt/source/lighttpd-1.4.30 # cp doc/config/modules.conf /webserver/lighttpd/etc/ # cp -r doc/config/conf.d /webserver/lighttpd/etc/ # cp -r doc/config/vhosts.d/ /webserver/lighttpd/etc/
Create default lighttpd configuration file: /webserver/lighttpd/etc/lighttpd.conf (download sample lighttpd.conf file). Type the following command
# wget http://www.lifelinux.com/wp-content/uploads/2012/04/lighttpd.conf_.txt -O /webserver/lighttpd/etc/lighttpd.conf
If you want to run lighttpd by default when the system boots, create file called lighttpd in /webserver/lighttpd/etc/init.d/
# vi /webserver/lighttpd/etc/init.d/lighttpd
Append following line
#!/bin/sh
#
# lighttpd     Startup script for the lighttpd server
#
# chkconfig: - 85 15
# description: Lightning fast webserver with light system requirements
#
# processname: lighttpd
# config: /webserver/lighttpd/etc/lighttpd.conf
# config: /webserver/lighttpd/etc/sysconfig/lighttpd
# pidfile: /webserver/lighttpd/var/run/lighttpd.pid
#
# Note: pidfile is assumed to be created
# by lighttpd (config: server.pid-file).
# If not, uncomment 'pidof' line.
# Source function library
. /etc/rc.d/init.d/functions
if [ -f /webserver/lighttpd/etc/sysconfig/lighttpd ]; then
	. /webserver/lighttpd/etc/sysconfig/lighttpd
fi
if [ -z "$LIGHTTPD_CONF_PATH" ]; then
	LIGHTTPD_CONF_PATH="/webserver/lighttpd/etc/lighttpd.conf"
fi
prog="lighttpd"
lighttpd="/webserver/lighttpd/sbin/lighttpd"
RETVAL=0
start() {
	echo -n $"Starting $prog: "
	daemon $lighttpd -f $LIGHTTPD_CONF_PATH
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && touch /webserver/lighttpd/var/lock/subsys/$prog
	return $RETVAL
}
stop() {
	echo -n $"Stopping $prog: "
	killproc $lighttpd
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && rm -f /webserver/lighttpd/var/lock/subsys/$prog
	return $RETVAL
}
reload() {
	echo -n $"Reloading $prog: "
	killproc $lighttpd -HUP
	RETVAL=$?
	echo
	return $RETVAL
}
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		stop
		start
		;;
	condrestart)
		if [ -f /webserver/lighttpd/var/lock/subsys/$prog ]; then
			stop
			start
		fi
		;;
	reload)
		reload
		;;
	status)
		status $lighttpd
		RETVAL=$?
		;;
	*)
		echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
		RETVAL=1
esac
exit $RETVAL
Chmod lighttpd with executed permission and create symbolic link in “/etc/init.d”. Type the following command
# chmod +x /webserver/lighttpd/etc/init.d/lighttpd # ln -s /webserver/lighttpd/etc/init.d/lighttpd /etc/init.d/lighttpd
Create file called “lighttpd” in /webserver/lighttpd/etc/sysconfig
# vi /webserver/lighttpd/etc/sysconfig/lighttpd
Append following line
LIGHTTPD_CONF_PATH=/webserver/lighttpd/etc/lighttpd.conf
To start lighttpd for the first time, type the following command
# /etc/init.d/lighttpd start
Install PHP (PHP-FPM)
Download latest version of PHP at http://download.php.net
# cd /opt/source # wget http://www.php.net/get/php-5.3.10.tar.gz/from/ca.php.net/mirror
To Extract its, enter
# tar zxvf php-5.3.10.tar.gz # cd php-5.3.10
To build PHP, I’ll create bash file called build.sh
# vi build.sh
Append following line
#!/bin/sh "./configure" \ "--prefix=/webserver/php" \ "--enable-fpm" \ "--with-libdir=lib64" \ "--with-bz2" \ "--with-config-file-path=/webserver/php/etc" \ "--with-config-file-scan-dir=/webserver/php/etc/php.d" \ "--with-curl=/usr/local/lib" \ "--with-gd" \ "--with-gettext" \ "--with-jpeg-dir=/usr/local/lib" \ "--with-freetype-dir=/usr/local/lib" \ "--with-kerberos" \ "--with-mcrypt" \ "--with-mhash" \ "--with-mysql" \ "--with-mysqli" \ "--with-pcre-regex=/usr" \ "--with-pdo-mysql=shared" \ "--with-pdo-sqlite=shared" \ "--with-pear=/usr/local/lib/php" \ "--with-png-dir=/usr/local/lib" \ "--with-pspell" \ "--with-sqlite=shared" \ "--with-tidy" \ "--with-xmlrpc" \ "--with-xsl" \ "--with-zlib" \ "--with-zlib-dir=/usr/local/lib" \ "--with-openssl" \ "--with-iconv" \ "--enable-bcmath" \ "--enable-calendar" \ "--enable-exif" \ "--enable-ftp" \ "--enable-gd-native-ttf" \ "--enable-libxml" \ "--enable-magic-quotes" \ "--enable-soap" \ "--enable-sockets" \ "--enable-mbstring" \ "--enable-zip" \ "--enable-wddx"
Type the following command to install PHP
# sh build.sh # make # make install
If you have problems building PHP then read the article. Next step, copy php.ini to /webserver/php/etc/, enter
# cp php.ini-production /webserver/php/etc/php.ini
Rename php-fpm.conf, enter
# cd /webserver/php/etc # cp php-fpm.conf.default php-fpm.conf
Open php-fpm.conf, type
# vi php-fpm.conf
Append following line
[global] pid = run/php-fpm.pid error_log = log/php-fpm.log [www] listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1 user = nobody group = nobody pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.max_requests = 500
If you want to run PHP-FPM by default when the system boots, create file called php-fpm in /etc/init.d/
# vi /etc/init.d/php-fpm
Append following line
#! /bin/sh
### BEGIN INIT INFO
# Provides:          php-fpm
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/webserver/php/sbin/php-fpm
php_fpm_CONF=/webserver/php/etc/php-fpm.conf
php_fpm_PID=/webserver/php/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
	try=0
	while test $try -lt 35 ; do
		case "$1" in
			'created')
			if [ -f "$2" ] ; then
				try=''
				break
			fi
			;;
			'removed')
			if [ ! -f "$2" ] ; then
				try=''
				break
			fi
			;;
		esac
		echo -n .
		try=`expr $try + 1`
		sleep 1
	done
}
case "$1" in
	start)
		echo -n "Starting php-fpm "
		$php_fpm_BIN $php_opts
		if [ "$?" != 0 ] ; then
			echo " failed"
			exit 1
		fi
		wait_for_pid created $php_fpm_PID
		if [ -n "$try" ] ; then
			echo " failed"
			exit 1
		else
			echo " done"
		fi
	;;
	stop)
		echo -n "Gracefully shutting down php-fpm "
		if [ ! -r $php_fpm_PID ] ; then
			echo "warning, no pid file found - php-fpm is not running ?"
			exit 1
		fi
		kill -QUIT `cat $php_fpm_PID`
		wait_for_pid removed $php_fpm_PID
		if [ -n "$try" ] ; then
			echo " failed. Use force-exit"
			exit 1
		else
			echo " done"
		fi
	;;
	force-quit)
		echo -n "Terminating php-fpm "
		if [ ! -r $php_fpm_PID ] ; then
			echo "warning, no pid file found - php-fpm is not running ?"
			exit 1
		fi
		kill -TERM `cat $php_fpm_PID`
		wait_for_pid removed $php_fpm_PID
		if [ -n "$try" ] ; then
			echo " failed"
			exit 1
		else
			echo " done"
		fi
	;;
	restart)
		$0 stop
		$0 start
	;;
	reload)
		echo -n "Reload service php-fpm "
		if [ ! -r $php_fpm_PID ] ; then
			echo "warning, no pid file found - php-fpm is not running ?"
			exit 1
		fi
		kill -USR2 `cat $php_fpm_PID`
		echo " done"
	;;
	*)
		echo "Usage: $0 {start|stop|force-quit|restart|reload}"
		exit 1
	;;
esac
Chmod php-fpm with executed permission, enter
# chmod +x /etc/init.d/php-fpm
To start PHP-FPM for the first time, type the following command
# /etc/init.d/php-fpm start
Configure PHP-FPM and Lighttpd working together
Uncomment the following line in /webserver/lighttpd/etc/modules.conf
## ## FastCGI (mod_fastcgi) ## include "conf.d/fastcgi.conf"
Open /webserver/lighttpd/etc/conf.d/fastcgi.conf, and append following line
server.modules += ( "mod_fastcgi" )
fastcgi.server = ( ".php" =>
  ( "php-tcp" =>
    (
      "host" => "127.0.0.1",
      "port" => "9000"
    )
  )
)
Save and close the file. Type the following command to restart Lighttpd
# /etc/init.d/lighttpd restart
This completes the installation steps. To test php you can create a info.php file in the document root folder
# vi /webserver/lighttpd/www/htdocs/info.php
Append following line
<?php phpinfo(); ?>

If you see the above, you have completed a successful installation of lighttpd and php.
Related Posts:
- How To Install Nginx And PHP-FPM On CentOS 6 Via Yum
- How To Setup A LAMP Server On Centos 6.0
- How To Flush/Remove All Iptables Rules In Linux
- Setting Up Password Aging In Linux
- How To Configure Static IP Address On CentOS
- How To Restart Networking Service In Linux
- How To Install Nginx And PHP (PHP-FPM) On CentOS 6
- How To Enable/Disable Firewall On Centos / RedHat / Fedora
- How To Increase The Number Of PTY (Pseudo-Terminal Driver)
- How To Enable IP Forwarding On CentOS / RedHat