Lighttpd is a secure, fast and very flexible open source web server. It is optimised for a high performance environment and uses very low memory as compared to other web servers. It supports many advanced features for example FastCGI, CGI, Auth, Output-Compression, URL-Rewriting and many more. It is a popular web server for the Catalyst and Ruby on Rails web frameworks. Lighttpd is used by many high traffic websites like Bloglines, WikiMedia etc.
Some the most notable features of Lighttpd are
- It supports SCGI, HTTP proxy and FastCGI for load balancing.
- It supports web server event mechanism performance also provides also support for more efficient event notification schemes.
- It supports chroot that changes the apparent root directory for the current running process and its children.
- It supports conditional URL rewriting (mod_rewrite), TLS/SSL with SNI support, via OpenSSL and authentication against an LDAP server.
- It supports HTTP compression using mod_deflate.
Lighttpd does not require any special hardware requirement but to follow this guide you will need a server with CentOS 7 installed. You will also need sudo or root access to the server. If you are logged in as a non-root but sudo user, run
sudo su to switch to root user.
You can install Lighttpd either from the available packages or installing from source. It is recommended to update your system and available repositories before we install any packages. Run the following command to do so.
yum -y update
Before installing Lighttpd we need to make sure that Apache or nginx is not installed on your server. Run the following commands to remove these packages.
yum -y erase httpd nginx
If they are not installed in your server, the command will simply show you
No Match for argument: httpd No Match for argument: nginx No Packages marked for removal
Lighttpd is not available on the default CentOS YUM repository hence you will need to add EPEL repository to your system. Install EPEL repository in your system using the following command.
yum -y install epel-release yum -y update
Now you can install Lighttpd using the following command.
yum -y install lighttpd
Once the packages are installed, you can run the Lighttpd server also enable it to automatically start at boot time using the following commands:
systemctl start lighttpd systemctl enable lighttpd
You can see the version of Lighttpd installed in your system using the following command:
You will see following output:
lighttpd/1.4.39 (ssl) - a light and fast webserver Build-Date: Mar 1 2016 15:43:12
Now you will need to adjust your firewall to allow the
https traffic to pass. Run the following commands to add new firewall rules. If you do not have
firewalld installed, no need to run these commands.
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
Now you can browse the following URL using your favorite browser to see your web server working.
You will see a not found message as shown below:
This due to the default document root directory of Lighttpd is
/var/www/htdocs but the startup promo files for Lighttpd is saved in
Now you have two options to correct this issue. You can either rename
/var/www/htdocs or you can change the configuration files to make
/var/www/lighttpd directory as the default document root directory. To rename
/var/www/htdocs run the following command.
mv /var/www/lighttpd /var/www/htdocs
You can now check the web front of your server, by going to
http://Your-IP-addr and you will see the following page.
You can change the default web root directory by editing the default configuration file of Lighttpd, which is
/etc/lighttpd/lighttpd.conf. Use your favorite editor to edit the files. In this tutorials we will be using
nano, if you do not have
nano installed, you can run following command to install
yum -y install nano.
Scroll down to find the following lines:
## ## Document root ## server.document-root = server_root + "/htdocs"
lighttpd to make it look like the following code.
## ## Document root ##
server.document-root = server_root + "/lighttpd"
Now save the file and you should see your server running. If you renamed your directory to
/var/www/htdocs then your document root directory is
/var/www/htdocs and if you have changed your configuration file then your default document root is
You can install PHP to work with Lighttpd using PHP-FPM. PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.
yum -y install php-fpm lighttpd-fastcgi
Now we will need configure PHP-FPM to run a FastCGI server on port
/etc/php-fpm.d/www.conf file using your favorite editor.
Scroll down to see the following code:
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = apache ; RPM: Keep a group allowed to write in log dir. group = apache
Change the value of
lighttpd and make it look like shown below.
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = lighttpd ; RPM: Keep a group allowed to write in log dir. group = lighttpd
Save and exit the file. Now start PHP-FPM and enable it to automatically start at boot time using the following command:
systemctl start php-fpm systemctl enable php-fpm
This should run PHP-FPM on your server successfully.
Configuring Lighttpd to Work With PHP
To enable PHP to work with Lighttpd web server, we will need to make few configuration changes. Open your
/etc/php.ini file in your favorite editor:
Look for the following lines in the configuration:
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. $ ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not $ ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Se$ ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A sett$ ; of zero causes PHP to behave as before. Default is 1. You should fix your s$ ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo ;cgi.fix_pathinfo=1
Uncomment the line
;cgi.fix_pathinfo=1 to make it
cgi.fix_pathinfo=1. Save the file and exit the editor.
Now open another file
/etc/lighttpd/conf.d/fastcgi.conf using your favorite editor.
Now look for the following lines in the file:
## server.modules += ( "mod_fastcgi" )
Add the following lines just below the above line:
fastcgi.server += ( ".php" => (( "host" => "127.0.0.1", "port" => "9000", "broken-scriptfilename" => "enable" )) )
Save the file and exit from editor:
/etc/lighttpd/modules.conf file using your favorite editor.
Look for the following lines in the file:
## ## FastCGI (mod_fastcgi) ## #include "conf.d/fastcgi.conf"
#include "conf.d/fastcgi.conf" to make it look line
include "conf.d/fastcgi.conf". Save the file and exit from editor.
Now restart PHP-FPM and Lighttpd using the following command.
systemctl restart php-fpm systemctl restart lighttpd
Now to verify if Lighttpd is configured to use PHP-FPM, you will need to view your php information. Create a new file in your document root directory which may be
/var/www/lighttpd according how you have configured it before.
Now add the following php code into the file.
Now browse the following file through frontend using your favorite web browser. Go to the following URL.
You will see following page, which will show you all your php configuration and information.
You will find that your server API is FPM/FastCGI. This shows that you have a working Lighttpd web server with PHP-FPM.
In this tutorial we have learnt to install Lighttpd web server, which is known for its ability to handle more than thousands concurrent connections in parallel without using much resources. We also learnt to install and configure PHP-FPM to use with Lighttpd web server. You can install MySQL or MariaDB to make it full LLMP stack.