Gerir VirtualHosts do Apache
Publicado por Rubem Mota (última atualização em 20/08/2012)
[ Hits: 3.701 ]
Homepage: rubemlrm.com
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
#!/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();
Postando mensagem no Facebook com Perl
Automatizando o envio de arquivo p/ o FTP !
Avisar por e-mail se o IP da conexão ADSL mudar
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta