httpd-wiki-changes mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Httpd Wiki] Update of "ApacheVirtualHostMysql/hosts.conf" by sjorge
Date Thu, 03 Apr 2008 10:10:13 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Httpd Wiki" for change notification.

The following page has been changed by sjorge:
http://wiki.apache.org/httpd/ApacheVirtualHostMysql/hosts%2econf

New page:
{{{
############################
#      Host Settings       #
############################
<IfModule !mod_perl.c>
        # lets trow and error
        please enable mod_perl!
</IfModule>

<IfModule mod_perl.c>
        # Required Modules
        <IfDefine DAV>
            LoadModule dav_module modules/mod_dav.so
            LoadModule dav_fs_module modules/mod_dav_fs.so
            DAVLockDB logs/davlock
        </IfDefine>

        # Listening Sockets
        Listen 80
        NameVirtualHost *:80
        <IfDefine DAV>
                Listen 81
                NameVirtualHost *:81
        </IfDefine>

        <Perl>
                # database configuration
                my %dbcfg = (
                        server          => 'localhost',
                        database        => 'httpd',
                        user            => 'apache',
                        pass            => 'wRu3REfr'
                );
                my %host = (
                        http_tmpl       => '/srv/httpd/conf/templates/http.tmpl',
                        dav_tmpl        => '/srv/httpd/conf/templates/webdav.tmpl',
                        path            => '/srv/hosts'
                );

                # modules
                use strict;
                use warnings;
                use DBI;                                        # DBI + DBD MySQL Driver
                use Apache2::PerlSections;      # Apache2::PerlSection is needed for add_config

                # read templates
                open(TMPL, $host{'http_tmpl'}) or die "Can't read template";
                $host{'http_tmpl'} = '';
                while (<TMPL>){
                        chomp;
                        $host{'http_tmpl'} = $host{'http_tmpl'} . $_ . "\n";
                }
                close(TMPL);

                open(TMPL, $host{'dav_tmpl'}) or die "Can't read template";
                $host{'dav_tmpl'} = '';
                while (<TMPL>){
                        chomp;
                        $host{'dav_tmpl'} = $host{'dav_tmpl'} . $_ . "\n";
                }
                close(TMPL);

                # apache server hook
                my $srv = Apache2::PerlSections->server();

                # database connection
                my $dbh = DBI->connect(
                        'DBI:mysql:'.$dbcfg{'database'}.':'.$dbcfg{'server'},
                        $dbcfg{'user'},
                        $dbcfg{'pass'}
                );

                if(not $dbh){
            print "Can't connect to mysql server!\n";
            die $DBI::errstr;
                }

                # fetch hosts
                my $hosts = $dbh->prepare(q{
                        SELECT hosts.id, name, IF( ISNULL( configuration), '', configuration)
configuration, webdav, cgi, ssi, php
                        FROM hosts
                        LEFT JOIN configuration ON (configuration.id = hosts.id)
                        WHERE enabled = 1
                        ORDER BY hosts.id ASC;
                }) or die $dbh->errstr;

                # generate vhosts
                $hosts->execute;
                while ( (my $id,my $name,my $cfg,my $bDAV,my $bCGI,my $bSSI,my $bPHP) = $hosts->fetchrow_array()
) {
                        # generate aditional configuration
                        if ($bSSI == 1) {
                                my $ssi = '';
                                $ssi = $ssi . "<IfModule mod_include.c>\n";
                        $ssi = $ssi . "\tAddType text/html .shtml .shtm\n";
                        $ssi = $ssi . "\tAddOutputFilter INCLUDES .shtml  .shtm\n";
                $ssi = $ssi . "</IfModule>\n";
                                $cfg = $ssi . $cfg;
                        }

                        if ($bCGI == 1) {
                                my $cgi = '';
                                $cgi = $cgi . "ScriptAlias /cgi-bin/ \"%host_dir%/%name%/cgi-bin/\"\n";
                        $cgi = $cgi . "<Directory \"%host_dir%/%name%/cgi-bin\">\n";
                $cgi = $cgi . "\tAllowOverride None\n";
                $cgi = $cgi . "\tOptions None\n";
                $cgi = $cgi . "\tOrder allow,deny\n";
                $cgi = $cgi . "\tAllow from all\n";
                $cgi = $cgi . "</Directory>\n";

                                $cgi = $cgi . "<IfModule mod_cgi.c>\n";
                        $cgi = $cgi . "\tAddHandler cgi-script .cgi .pl\n";
                $cgi = $cgi . "</IfModule>\n";
                $cgi = $cgi . "<IfModule mod_cgid.c>\n";
                $cgi = $cgi . "\tAddHandler cgi-script .cgi .pl\n";
                $cgi = $cgi . "</IfModule>\n";
                                $cfg = $cgi . $cfg;
                        }

                        if ($bPHP == 1) {
                                my $php = '';
                                $php = $php . "<IfModule mod_php5.c>\n";
                        $php = $php . "\tAddHandler application/x-httpd-php .php\n";
                        $php = $php . "\tAddHandler application/x-httpd-php-source .phps\n";
                $php = $php . "</IfModule>\n";
                                $cfg = $php . $cfg;
                        }

                        # get aliases
                        my $aliases = '';
                        my $alias = $dbh->prepare(q{
                                SELECT alias
                                FROM aliases
                                WHERE id = ?;
                }) or die $dbh->errstr;
                        $alias->execute($id);

                        while ( (my $n) = $alias->fetchrow_array() ) {
                                $aliases = $aliases . " " . $n;
                        }

                        if ($aliases ne '') {
                                $aliases = "ServerAlias" . $aliases;
                        }

                        # validate documentroot
                        if(!-d "$host{'path'}/$name"){
                mkdir("$host{'path'}/$name", 0755);
                mkdir("$host{'path'}/$name/_sys", 0755);
                mkdir("$host{'path'}/$name/_sys/logs", 0755);
                mkdir("$host{'path'}/$name/_sys/tmp", 0755); #for php temp directory
                mkdir("$host{'path'}/$name/_sys/sessions", 0755); #for php sessions directory
                mkdir("$host{'path'}/$name/httpdocs", 0755);
                mkdir("$host{'path'}/$name/cgi-bin", 0755);
                                system('chown -R apache:apache "'.$host{'path'}.'/'.$name.'"');
                        }

                        # create vhost
                        my $vhost = $host{'http_tmpl'};
                        if ($bDAV == 1) {
                                $vhost = $vhost . "\n" . $host{'dav_tmpl'}
                        }
                        $vhost =~ s/%id%/$id/g;
                        $vhost =~ s/%cfg%/$cfg/g;
                        $vhost =~ s/%host_dir%/$host{'path'}/g;
                        $vhost =~ s/%name%/$name/g;
                        $vhost =~ s/%aliases%/$aliases/g;

                        $vhost =~ s/%db_server%/$dbcfg{'server'}/g;
                        $vhost =~ s/%db_name%/$dbcfg{'database'}/g;
                        $vhost =~ s/%db_user%/$dbcfg{'user'}/g;
                        $vhost =~ s/%db_pass%/$dbcfg{'pass'}/g;

                        $srv->add_config([split /\n/, $vhost]);
                }

                # cleanup
                $dbh->disconnect();
    </Perl>
</IfModule>

}}}

Mime
View raw message