This post originated from an RSS feed registered with Ruby Buzz
by Christian Neukirchen.
Original Post: Review: Lighttpd
Feed Title: chris blogs: Ruby stuff
Feed URL: http://chneukirchen.org/blog/category/ruby.atom
Feed Description: a weblog by christian neukirchen - Ruby stuff
Lighttpd
by Andre Bogus.
Packt Publishing, Birmingham 2008.
223 pages.
[Full disclosure: I have received a copy of the book in exchange for
this review.]
The web server Lighttpd has become rather
popular in the last few years and thus it was just a matter of time
someone wrote a book about it. Packt published Andre Bogus’ book in
October 2008. I review the first edition.
After a short overview of what Lighttpd is, the book starts with a
chapter about installing Lighttpd. It is fairly detailed and contains
installation instructions for many Linux distributions as well as how
to install from source. It explains which configure options there are
and which dependencies one needs to take care of.
Chapter 2 deals with basic setup of Lighttpd. After a quick overview
of how to run Lighttpd the book dives into the configuration files.
This chapter includes a short tutorial into regular expressions (PCRE
style) as well as they are essential for rewriting/redirecting URLs
and configuring specific parts of your site.
Chapter 3 explains how to set up CGI and virtual hosts. It gives an
overview of the three modules for virtual hosting and explains how to
use each one (mod_simple_vhost, mod_evhost, mod_mysqlvhost).
Then, it shows how to setup and configure CGI, FastCGI and SCGI
backends. While the setup is explained pretty well, I missed a
section on debugging CGI, especially since this can be quite tricky at
times. While not really part of Lighttpd, I’d also have expected a
quick explanation on how to setup virtual hosts in the domain name
system.
Chapter 4 is about serving and streaming static files, a task which
Lighttpd really was made for. Traffic shaping, securing downloads
with tokens and FLV streaming are addressed here.
Chapter 5 explains logging and log formatting as well as user
tracking. Again, it would have been nice to mention more tools:
there is a whole section on click stream tracking but the reader wont
learn about any tool he can use to make sense of this data.
The next chapters are about security:
Chapter 6 shows how to setup SSL with self-signed keys, an own CA, or
by buying a certificate. This chapter is a bit too short and doesn’t
detail debugging SSL, either.
Chapter 7 tells how to secure parts of the site with passwords and the
various authentication backends as well as how to avoid DDOS attacks
by using mod_evasive.
Chapter 8 explains how to run Lighttpd in a chroot, possibly separated
from the backends.
Chapter 9 is about optimizing Lighttpd. The author uses http_load
to benchmark the web server and shows a few options that can be
configured in Lighttpd and the underlying OS (Linux and BSD are
addressed) to make it faster. Elementary caching is explained as
well. This chapter ends with an rather useless section on how to
profile Lighttpd with gprof but doesn’t explain how this would help
you to speed up your web server.
Chapter 10 (available
online)
is about migration from Apache. The reader should have no problems
moving simple to medium complex Apache setups to Lighttpd, given that
he can workaround the lack of .htaccess in Lighttpd. This section
also tells how to use Lighttpd as a reverse proxy to forward requests
it cannot (yet) take care of to different web servers.
Chapter 11 shows how to setup a few common web applications: Ruby on
Rails with mod_fastcgi, Wordpress, phpMyAdmin, MediaWiki, Trac,
AWStats and AjaxTerm. Apart from the last, they all use
mod_fastcgi, which makes this chapter not very exciting.
Chapter 12 and 13 contain really original content that is not found
easily on the net: Extending Lighttpd with Lua scripts (Chapter 12)
and with C modules (Chapter 13). The author gives a short
introduction to Lua and provides a few examples of using it to script Lua
with mod_magnet: a random file server and a shoutbox are
implemented. Chapter 13 introduces the Lighttpd API and shows how to
write the random file server as a Lighttpd module. There also is an
example of a module that adds proper doctypes to HTML pages.
The book concludes with an overview of HTTP status codes and a list of
all Lighttpd configuration options.
Conclusion: The book is pretty compact and therefore occasionally too shallow.
But it is well researched (I found no serious technical errors and
just the few typographical goofs that are especially annoying in
source code but seem to be unavoidable in modern technical books) and
documents all aspects of the actual Lighttpd configuration. It
includes many well-commented examples and code snippets. I would have
wished it provided more detail on debugging configurations, setting up
web servers beyond the actual Lighttpd configuration and modern
application deployment (reverse proxying, load balancing…). Also,
I found the index of the book rather lacking (for example, there is no
mention of “Content type” in it). The stressed administrator may
rather straight turn to Google or the Lighttpd wiki (which explains
all options as well) than trying to find them in the book. Last but
not least, I’d like to remark that the book is part of the “Packt Open
Source Project Royalties” and the Lighttpd project gets “some of the
money” Packt makes from each sale.
I can recommend the book to administrators and web developers that are
new to Lighttpd but already have some experience in setting up web
servers/web applications and who would like to get a good overview
of the possibilities Lighttpd provides. Due to the last two chapters,
the book also can be interesting for people that want to extend Lighttpd.