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.