Execução de scripts CGI com utilização de mod_perl
Dica publicada em Linux / Configuração
Execução de scripts CGI com utilização de mod_perl
Tendo em vista que os scripts CGI são lentos e ocupam mais
recursos sob carga pesada, em um mundo ideal você não executará
scripts CGI quando mod_perl estiver funcionando em seu
sistema.
Porém a realidade é que os administradores são pessoas ocupadas e portar algo que já está funcionando é com freqüência uma tarefa ignorada porque outro trabalho mais sério está esperando em algum lugar.
Felizmente mod_perl lhe permite executar seus scripts CGI usando um módulo mod_perl default denominado Apache::Registry.pm. Desse modo você pode executar seus scripts CGI sob mod_perl imediatamente. Aqui está como fazê-lo.
1. No arquivo httpd.conf, crie um nome alternativo /apps/ para indicar o diretório do seu script CGI, adicionando a linha a seguir:
Porém a realidade é que os administradores são pessoas ocupadas e portar algo que já está funcionando é com freqüência uma tarefa ignorada porque outro trabalho mais sério está esperando em algum lugar.
Felizmente mod_perl lhe permite executar seus scripts CGI usando um módulo mod_perl default denominado Apache::Registry.pm. Desse modo você pode executar seus scripts CGI sob mod_perl imediatamente. Aqui está como fazê-lo.
1. No arquivo httpd.conf, crie um nome alternativo /apps/ para indicar o diretório do seu script CGI, adicionando a linha a seguir:
Alias /apps/ "/www/meusite/cgi-bin"
Certifique-se de trocar /www.meusite/cgi-bin pelo diretório de scripts CGI que for apropriado ao seu sistema.
2. Informe ao Apache para carregar o módulo Apache:Registry durante a inicialização, adicionando a linha a seguir em httpd.conf:
PerlModule Apache::Registry
3. Informe ao Apache para executar todos os scripts via Apache::Registry para o diretório /apps/, acrescentando este segmento de configuração em httpd.conf:
<Location /apps>
SetHandler perl-script
PerlHandler Apache::Registry
Options ExecCGI
</Location>
SetHandler perl-script
PerlHandler Apache::Registry
Options ExecCGI
</Location>
4. Reinicie o servidor Apache usando o comando:
# /usr/local/apache/bin/apachectl restart
5. Acesse um servidor CGI que utilize um navegador web, empregando:
http://nome_do_seu_servidor/apps/nome_de_script
Se tiver uma diretiva ScriptAlias configurada de modo a apontar /cgi-bin/ para /www/meusite/cgi-bin (ou qualquer que seja o diretório de scripts CGI no seu sistema), você poderá acessar os scripts CGI como o script "CGI" usando o mesmo script com mod_perl:
http://nome_do_seu_servidor/apps/nome_de_script
Esse último código tem a vantagem de não gerar um novo processo de CGI a cada solicitação, permitindo que ela funcione mais rápido. Observe que a variável de ambiente mod_perl pode distinguir o modo como um script está sendo executado (CGI ou mod_perl). Considere, por exemplo, o segmento de código a seguir:
if ($ENV(MOD_PERL) ne '') {
# Funciona como um script mod_perl, como um módulo mod_perl
# nativo ou um script de execução de Apache::Registry
}else {
# Script CGI sendo executado via mod_cgi como um
# processo separado
}
# Funciona como um script mod_perl, como um módulo mod_perl
# nativo ou um script de execução de Apache::Registry
}else {
# Script CGI sendo executado via mod_cgi como um
# processo separado
}
A instrução condicional anterior detecta como um script está sendo executado. Os scripts no diretório "apps" serão executados por meio do módulo Apache::Registry. Isso significa que você pode remover completamente o módulo mod_cgi de seu sistema recompilando o Apache com a opção --disable-module=cgi.