Mason Web Server

Mason Web Server

Mason is a fantastic object-oriented web-authoring system built on Perl.


I grew very tired of updating sites the "old-fashioned" way, making dozens of changes whenever the look or feel of a website changed. This site, and others I have been involved with, use Mason extensively, allowing me to make drastic site re-designs with only a few modifications.

Mason is an Apache handler written in Perl, and can sometimes be a bit of effort to get configured correctly. I am posting my configurations here so that it will hopefully be of some use.

NOTE: As of Fedora Core 6, Mason has been packaged into RPM format (thank god) as perl-HTML-mason. The below configuration may still be useful as a reference, particularly if you want to link your own modules into Mason.

Apache Configuration


NOTE: Make sure index.mhtml and index.mhtm are in your DirectoryIndex


# Configure perl environment and fire up some handy perl modules
PerlRequire /etc/httpd/conf/

# External modules need to be linked with the Commands namespace to be used by mason components.
{ package HTML::Mason::Commands;
  use FritzMason;       # my library

PerlSetVar  MasonArgsMethod  CGI

PerlModule HTML::Mason::ApacheHandler

# Anything ending in these file extensions gets handled by mason
<LocationMatch "\.m(html|htm)$">
           SetHandler perl-script
           PerlHandler HTML::Mason::ApacheHandler
# Anything ending in these file extensions gets an error (kludge)
<LocationMatch "\.(mas|fla|xcf|psd)|autohandler$">
           SetHandler perl-script
           PerlInitHandler Apache2::Constants::NOT_FOUND
#          ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var

NOTE: This Perl script is called by the Apache PerlRequire directive, and loads all the modules referenced below into memory. You may or may not want all of this, but it can be a performance saver depending on the environment.

 use Apache2::compat ();
 use ModPerl::Util (); #for CORE::GLOBAL::exit
 use Apache2::RequestRec ();
 use Apache2::RequestIO ();
 use Apache2::RequestUtil ();
 use Apache2::ServerRec ();
 use Apache2::ServerUtil ();
 use Apache2::Connection ();
 use Apache2::Log ();
 use Apache::Session ();
 use CGI ();
 use CGI::Cookie ();
 use APR::Table ();
 use ModPerl::Registry ();
 use Apache2::Const -compile => ':common';
 use APR::Const -compile => ':common';
 use Carp ();


ctime: 2004-07-08