Merecat httpd ∴ Small Simple Speedy Server
Merecat started out as a pun at Mongoose, but is now useful for actual web serving purposes. It is however not a real Meerkat, merely yet another copycat, forked from the great thttpd created by Jef Poskanzer.
The limited feature set makes it very quick. Virtual hosts and the URL-traffic-based throttling are just about its only features. This small footprint makes Merecat very suitable for small and embedded systems, even those smaller than a Raspberry Pi.
For questions see the included
merecat(8) man page or the FAQ.
Merecat is free software under the simplified 2-clause BSD license.
To protect a directory in your
~USERNAME/public_html/, create a simple
.htpasswd file using the included
cd ~/public_html/Downloads htpasswd -c .htpasswd friend Changing password for user friend New password: ***** Re-type new password: *****
Setting up virtual hosts on a server can be a bit of a hassle with other web servers. With Merecat you simply create directories for each host in the web server root:
/var/www/ |-- icons/ |-- cgi-bin/ |-- errors/ | `-- err404.html |-- ftp.example.com/ `-- www.example.com/
virtual-host = true cgi-pattern = /cgi-bin/*|**.cgi
Now the web server root,
/var/www/, no longer serves files, only
virtual host directories do, execpt for the shared files in
On Linux bind mounts can be used to set up FTP and web access to the
same files. Example
/srv/ftp /var/www/ftp.example.com none defaults,bind 0 0
There are many tricks to optimizing the performance of your web server.
One of the most important ones is browser caching. Merecat supports
Cache-Control:, however to enable the latter you need
to define the
max-age setting in
max-age = 3600 # One hour
The value is completely site dependent. For an embedded system you might want to set it to the maximum value, whereas for other scenarios you will likely want something else. By default this is disabled (0).
Another trick is to employ
gzip compression. Merecat has built-in
support for serving HTML, CSS, and other
text/* files if there is a
.gz version of the same file. Here is an example of how to compress
$ cd /var/www/ $ for file in `find . -name '*.html' -o -name '*.css'`; do \ gzip -c $file > $file.gz; done
Merecat depends on libConfuse
which, if built from source, by default installs to
Debian/Ubuntu systems rarely support this GNU standard, so this is how
you reference it for the Merecat
To build Merecat without support for
If you build from GIT sources and not a released tarball, then remember:
/usr/sbin/, default index and icons into
/var/www, and config file to
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc make sudo make install
Merecat consists of a front-end,
merecat.c, and a standalone HTTP
libhttpd.c, which can be tweaked in various ways and used
for embedding a web server in another applications if needed.
The most common options are available from the
merecat command line
merecat.conf configuration file. Other, less common options,
can be enabled using the
--enable-htaccess Enable .htaccess files for access control --enable-htpasswd Enable .htpasswd files for authentication --enable-public-html Enable $HOME/public_html as ~USERNAME/ --enable-msie-padding Enforce padding of httdp error messages sent to Internet Explorer, otherwise it will detect too short msg and display its own.
The source file
merecat.h has even more features that can be tweaked,
some of those are mentioned in the man page, but the header file has
very useful comments as well.