Fetch virtualhosts fra mysql i apache

Når jeg selv har testet det af ryger min egen version online:
http://guides.printf.dk/perl-dbi.htm

Apache med virtualhosts fra en MySQL DB
Af: Jesper Noehr <spike@printf.dk> 21/01/03
Smid dette perl-kode i bunden af din httpd.conf:

<Perl>
use DBI;
my ($sth, $dbh, $sname, $sadmin, $droot, $id, $soptions);

$dbh = DBI->connect("DBI:mysql:apache","USERNAME","PASSWORD");
$sth = $dbh->prepare("SELECT * FROM vhosts");
$sth->execute();

while (($id,$sname,$droot,$sadmin,$sdomain,$soptions) = $sth->fetchrow_array()) {
    #warn "+PERL DEBUG+ Addded name: $sname.$sdomain root: $droot admin: $sadmin\n";
    push @{$VirtualHost{'*'}}, {
        ServerName       => "$sname.$sdomain",
        ServerAdmin      => $sadmin,
        DocumentRoot     => "/home/customers/$sdomain/$droot",
        ErrorLog         => "/home/customers/$sdomain/log/httpd-error.log",
        TransferLog      => "/home/customers/$sdomain/log/httpd-access.log",
  Directory	 => {
        "/home/customers/$sdomain/$droot" => {
          Options => $soptions,
             	       },
          },
    };
}
$sth->finish();
$dbh->disconnect();
</Perl>

Yderlige opsaetning:

Du skal lave en database i din MySQL med navnet 'apache', og tabellen 'vhosts', ellers kan du vel selv rette det til.
Felterne skal vaere 5 varchars paa 255, hhv. 'sname','droot','sadmin','sdomain','soptions'.
Navnene giver vel sig selv. 'sdomain' dog er det felt som virtualhostet hoerer til. Jeg bruger det i mit PHP frontend, og der hvor den placerer logfilerne.
Min opsaetning placerer logfilerne i ``/home/customers/<sdomain>/log/'', saa jeg kan lave webalizer stats paa dem.
BEMAERK: Dette kode kraever at du har mod_perl compilet til din apache. En let maade at goere det paa en FreeBSD er `pkg_add -r mod_perl`.
Den vil oven i koebet saette din apache op til at bruge det. :-)
Held og lykke med det.

$Id: perl-dbi.htm,v 1.3 2003/02/22 21:55:35 spike Exp $

 

Dette indlæg blev udgivet i Apache, Knowledge Base, Old Base. Bogmærk permalinket.

Skriv et svar