Gerir VirtualHosts do Apache

Publicado por Rubem Mota (última atualização em 20/08/2012)

[ Hits: 3.567 ]

Homepage: rubemlrm.com

Download 5527.apache




Ora boas tardes,

Depois de algum tempo sem escrever nada no blog , trago-vos um script em perl acabado de sair do forno que nos permite adicionar , remover , listar , verificar , desativar os nossos virtualhosts.

Para tal temos temos ao nosso dispor as seguintes opções:

-add : para adicionar um virtualhost no apache , para tal basta usar a seguinte sintaxe:
                    
sudo ./apache -add <url> <pasta>
ex:
sudo ./apache -add www.rubemlrm.com rubemlrm

  -rem : para remover um virtualhost no apache, para tal basta usar a seguinte sintaxe:
sudo ./apache -rem <url>
ex:
sudo ./apache -rem www.rubemlrm.com

   -dis : para desativar um virtualhost no apache , para tal basta usar a seguinte sintaxe:
                    
sudo ./apache -dis <url>
ex:
sudo ./apache -dis www.rubemlrm.com

-c :Esta opção poderá receber um argumento que é o <url> para mostrar a informação do virtualhost , caso não se passe o argumento do url irá mostrar todos os .conf que estão na diretoria /etc/apache2/sites-enabled/. Para tal basta usar a seguinte sintax:
                
sudo ./apache -c #irá listar todos os .conf da directoria

ou

sudo ./apache -c www.rubemlrm.com #para mostrar o conteúdo do .conf deste url
-h : Por fim temos esta opção para nos mostrar os comandos que temos disponíveis.
                
./apache -h

           De seguida fica o código do script

  



Esconder código-fonte

#!/usr/bin/perl
use warnings;
use strict;

#####################################################
#  Script para gerir VirtualHosts no Apache                                                       #
#                                                                                                                  #
#  Permite adicionar , remover , verificar , listar,                                              #
#  desactivar os vhosts que temos na mossa máquina.                                    #
#                                                                                                                 #
#  Developed by Rubem Mota                                                                         #
#  Twitter: @rubemlrm                                                                                  #
#  Site: rubemlrm.com                                                                                  #
####################################################


#funcoes
sub AddEntry($){
    my $info = $_[0];
    
    #valida o número de valores do array
    if($info eq '2'){
        die("Erro: Número de argumentos inválido\n");
    }else{
    
        my $dir = @$info[1];
        my $url = @$info[0];

        #validação do url
        if($url !~ /(\w+\.){2,}[a-z]{2,4}$/){
            print("Erro: URL inválido\n");
            exit(1);
        }

        #extrai a informação relativa ao dominio do url
        my $domain = substr($url,4);
        #verifica se a directoria existe
        if(!-d "/home/rubem/public_html/$dir/"){
            print "erro directoria não existe\n";
            DirOp($dir,'newFolder');
        }else{
            #verifica se o ficheiro existe
            if(-f "/etc/apache2/sites-enabled/$url.conf"){
                print "Ficheiro ja existe!\n";
                exit(1);
            }
            DirOp($dir,'repairDirTree');
            open(FILE, ">/etc/apache2/sites-enabled/$url.conf") ||die($!);
            print FILE "<VirtualHost *:80>\n";
            print FILE "\tServerAdmin webmaster\@$domain\n";
            print FILE "\tServerName $url\n";
            print FILE "\tServerAlias $domain\n";
            print FILE "\t#Index + Directory Root\n";
            print FILE "\tDirectoryIndex index.html\n";
            print FILE "\tDocumentRoot /home/rubem/public_html/$dir/htdocs/\n";
            print FILE "\t#CGI Directory\n";
            print FILE "\tScriptAlias /cgi-bin/ /home/rubem/public_html/$dir/cgi-bin/\n";
            print FILE "\t<Location /cgi-bin>\n";
            print FILE "\t\toptions +ExecCGI\n";
            print FILE "\t</Location>\n";
            print FILE "\t#LogFiles\n";
            print FILE "\tErrorLog /home/rubem/public_html/$dir/logs/error.log\n";
            print FILE "\tCustomLog /home/rubem/public_html/$dir/logs/access.log combined\n";
            print FILE "</VirtualHost>";
            close(FILE);
            system("/etc/init.d/apache2 restart");
            print "VirtualHost $url adicionado\n";
            
        }


    }
}
sub DirOp($$){
    my $dir = $_[0];
    my $opt = $_[1];
    if($opt eq 'newFolder'){
        print "Deseja que o script crie a directoria ?(S/N)\n";
        chomp(my $choice=<STDIN>);
        if($choice !~ /[S|s|n|N]/){
            print "opcao inválida";
        }elsif($choice eq 'S' || $opt eq 's'){
            mkdir("/home/rubem/public_html/$dir") || die "$!";
            mkdir("/home/rubem/public_html/$dir/htdocs/") || die "$!";
            mkdir("/home/rubem/public_html/$dir/cgi-bin/") || die "$!";
            mkdir("/home/rubem/public_html/$dir/logs/") || die "$!";
            print "Pastas criadas\n";    
        }else{
            print "O programa irá encerrar\n";
            exit(1);
        }
    }elsif($opt eq 'repairDirTree'){
        if(!-d "/home/rubem/public_html/$dir/htdocs/"){
            mkdir("/home/rubem/public_html/$dir/htdocs/") || die"$!";
        }elsif(!-d "/home/rubem/public_html/$dir/cgi-bin/"){
            mkdir("/home/rubem/public_html/$dir/cgi-bin/") || die "$!";
        }elsif(!-d "/home/rubem/public_html/$dir/logs/"){
            mkdir("/home/rubem/public_html/$dir/logs/") || die "$!";
        }else{
            print "";
        }
    }
}
sub RemEntry($){
        my $url = $_[0];
        if($url !~ /(\w+\.){2,}[a-z]{2,4}$/){
            print("Erro: Parametro invalido\n");
            exit(1);
        }else{
            my $flag = `ls /etc/apache2/sites-enabled/ || grep $url.conf`;
            if(!$flag){print"Ficheiro não existe\n";die(1);}else{
                unlink("/etc/apache2/sites-enabled/$url.conf");
                system("/etc/init.d/apache2 restart");
                print "VirtualHost $url removido\n ";
            }
        }

}
sub CheckEntry($){
    my $check = $_[0];
    if($check =~ /0/){
        my $sites = `ls /etc/apache2/sites-enabled/ || grep *.config`;
        print $sites;
    }else{
        my $siteconf = `cat /etc/apache2/sites-enabled/$check.conf`;
        print $siteconf."\n";
    
    }
}
sub DisEntry($){
    my $url = $_[0];
    if($url !~ /(\w+\.){2,}[a-z]{2,4}$/){
        print "Erro: Paramentro invalido\n";
        exit(1);
    }else{
        my $flag = `ls /etc/apache2/sites-enabled/$url.conf`;
        if (!$flag){print "Ficheiro não existe";}else{system("mv /etc/apache2/sites-enabled/$url.conf /etc/apache2/sites-available/$url.conf");};
        system("/etc/inid.d/apache2 restart"); 
    }
}

sub Main(){
    my $opt;
    if((@ARGV == 0 || $ARGV[0] !~ /^-(ad|rem|c|h|dis)$/)){
        print "Primeiro Argumento inválido\n";
    }else{
        $opt = $ARGV[0];
        shift(@ARGV);
        if($opt eq '-ad'){
            AddEntry(\@ARGV);
        }elsif($opt eq '-rem'){
            RemEntry($ARGV[0]);
        }elsif($opt eq '-c'){
            if(@ARGV == 1){
            CheckEntry($ARGV[0]);
            }elsif(@ARGV == 0){
            CheckEntry(0);
            }else{
                print "Número de paramentros inválidos\n";
            }
        }elsif($opt eq '-h'){
            print ":=====================================:\n";
            print ":            MENU DE Ajuda            :\n";
            print ": -add <url> <directoria>             :\n";
            print ": ex: -add www.rubemlrm.com rubemlrm  :\n";
            print ": -rem <url>                          :\n";
            print ": ex: -rem www.rubemlrm.com           :\n";
            print ": -c <url>                            :\n";
            print ": ex: -c www.rubemlrm.com             :\n";
            print ": -c (Esta opção lista todos os .conf :\n";
            print ": -dis <url>                          :\n";
            print ": ex: -dis www.rubemlrm.com           :\n";
            print ":=====================================:\n";
        }else{
          DisEntry($ARGV[0]);
        }
    }
}

Main();

Scripts recomendados

Script para fazer buscas no arquivo de logs do squid

Perl Check Port - Entenda melhor os sockets

Descubra se seu e-mail ou conta foi "pwned"

Baixar o Diário Oficial da União e salvar como um único PDF completo

Gmail::SendMail - Enviando emails usando gmail


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts