Lighttpd has mod_cgi module that allows you running Perl and other server side programs via cgi-bin directory. The Common Gateway Interface (CGI) is a standard protocol for interfacing external application software with an information server.
Step #1: Create a CGI cgi-bin Directory
First you need to create a cgi-bin directory for your domain. Assuming that your domain hosted at /home/lighttpd/theos.in/http (DocumentRoot), create cgi-bin as follows:
# mkdir -p /home/lighttpd/theos.in/cgi-bin
Step # 2: Load mod_cgi Module
Open lighttpd configuration file using a text editor such as vi:
# vi /etc/lighttpd/ligttpd.conf
Now append or modify text as follows so that support for mod_cgi get loaded:
server.modules += ( "mod_cgi" )
Find out your virtual server configuration and append the following:
$HTTP["url"] =~ "/cgi-bin/" { cgi.assign = ( ".pl" => "/usr/bin/perl" ) }
Here is complete my config code:
$HTTP["host"] =~ "theos.in" {
server.document-root = "/home/lighttpd/theos.in/http"
accesslog.filename = "/var/log/lighttpd/theos.in/access.log"
$HTTP["url"] =~ "/cgi-bin/" {
cgi.assign = ( ".pl" => "/usr/bin/perl" )
}
}
Step # 3:Restart the Lighttpd
Restart lighttpd webserver, enter:
# /etc/init.d/lighttpd restart
Step # 4: Test It
Create a file/perl program in /home/lighttpd/theos.in/cgi-bin/sample.pl:
#!/usr/bin/perl print "Content-Type: text/plain", "\n\n"; print "Hi there! This is a sample perl program!!!", "\n";
Save and execute the program (http://yourdomain.com/cgi-bin/sample.pl).
- Email this to a friend
- Printable version
- Rss Feed
- Last Updated: May/23/2009

{ 10 comments… read them below or add one }
thanks mate, works sweet as
Can I enable CGI globally by entering:
lighty-enable-mod cgi
and restarting Lighttpd ?
Thanks for the info… it works like a charm,
A life saver!
Thank you.
Thank you!
Trying this sample I got 403 Forbidden from lighttpd.
Would you please, explain why?
Thanks again.
Check for directory permission and set +x permission on your script:
chmod +x script.plAlso, look at your error log file.
Thanks Vivek,
The problem has been solved by reading POST data from stdin by cgi script.
Thanks.
why using the so fast lighttpd when you are using the so slow perl… in 2009, it’s really pathetic still using perl…
thank you for the post. nginx has a limited embed implementation as well, alternatively you can wrap cgi for it and run Perl inside.
@nobody for many reasons too numerous to write down here.
@nobody and @twit Friendly The “so slow perl” is probably due to your inability to program it properly. The only thing faster then perl is mod_perl! Why don’t you use PHP. It’s a dumbed down version of perl and might be more to your speed.
Can anyone explain why it gives a 500 Internal Server Error?