I wanted to write a mod_perl handler that would read vhost configurations out of a database. However, it made more sense, at least to get something working quickly, do to this as a <Perl> section in the configuration file
I guess this could be done as a mod_perl handler instead, and I hope to eventually do it that way (mostly as an exercise, actually) but here it is the way I have it working:
#
#
# create table vhosts
# (ID int(11) not null auto_increment,
# servername varchar(255),
# serveralias varchar(255),
# docroot varchar(255),
# scriptalias varchar(255),
# primary key (ID)
# )
#
# Note: serveralias can be a space-separated list. Change the field to
# a text field if you have more than 255 characters of aliases.
# scriptalas should have a trailing slash
#
<Perl>
use DBI;
my $db = 'DBI:mysql:vhosts';
my $login = 'www';
my $password = 'www';
my $dbh = DBI->connect( $db, $login, $password );
my $sth = $dbh->prepare( "SELECT servername, serveralias,
docroot, scriptalias
FROM vhosts " );
$sth->execute;
$sth->bind_columns( my ( $servername, $serveralias,
$docroot, $scriptalias ) );
while ( $sth->fetch ) {
push @{$VirtualHost{'*'}}, {
ServerName => $servername,
ServerAlias => $serveralias,
DocumentRoot => $docroot,
ScriptAlias => "/cgi-bin/ $scriptalias",
};
}
$sth->finish;
$dbh->disconnect;
</Perl>
This goes in httpd.conf, and requires mod_perl. And, of course, you can add additional fields if you need them, like ErrorLog and CustomLog.