Gerir VirtualHosts do Apache
Publicado por Rubem Mota (última atualização em 20/08/2012)
[ Hits: 3.933 ]
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();
Obtendo a temperatura com Perl
Automatizando o envio de arquivo p/ o FTP !
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Warcraft II Remastered no Linux? (6)
O programa assinador digital (5)









