26.5. Obtendo scripts CGI para trabalhar

A CGI (Common Gateway Interface, interface de gateway comum) do Apache permite a criação de conteúdo dinâmico usando programas ou scripts geralmente chamados de scripts CGI. Os scripts CGI podem ser escritos em qualquer linguagem de programação. Em geral, são usadas linguagens de script como Perl ou PHP.

Para habilitar o Apache a fornecer conteúdo criado por scripts CGI, é necessário ativar mod_cgi. mod_alias também é necessário. Ambos são habilitados por padrão. Consulte a Seção 26.4.2, “Ativação e desativação” para obter detalhes sobre a ativação de módulos.

[Warning]Segurança de CGI

A permissão concedida ao servidor para executar scripts CGI constitui uma potencial falha de segurança. Consulte a Seção 26.7, “Evitando problemas de segurança” para obter informações adicionais.

26.5.1. Configuração do Apache

No SUSE Linux, a execução de scripts CGI é permitida somente no diretório /srv/www/cgi-bin/. A localização já está configurada para executar scripts CGI. Se você criou uma configuração de host virtual (consulte Seção 26.2.1.2, “Configuração do host virtual”) e deseja colocar seus scripts em um diretório específico de host, deverá desbloquear e configurar esse diretório.

Exemplo 26.5. Configuração de CGI para VirtualHost

 
ScriptAlias /cgi-bin/ "/srv/www/exemplo.com_cgi-bin/"1

<Directory "/srv/www/exemplo.com_cgi-bin/"> 
 Options +ExecCGI2 
 AddHandler cgi-script .cgi .pl3 
 Order allow,deny4 
 Allow from all 
</Directory> 
    
1

Instrui o Apache a tratar todos os arquivos dentro desse diretório como scripts CGI.

2

Habilita a execução de scripts CGI.

3

Instrui o servidor a tratar os arquivos com extensões .pl e .cgi como scripts CGI. Ajuste de acordo com as suas necessidades.

4

As diretivas Order e Allow controlam o estado de acesso padrão e a ordem em que as diretivas Allow e Deny são avaliadas. Neste caso, as declarações “deny” são avaliadas antes das declarações “allow”, e o acesso de todos os lugares é habilitado.

26.5.2. Executando um script de exemplo

A programação CGI difere da programação "normal" no sentido de que os programas e scripts CGI precisam ser precedidos por um cabeçalho de tipo MIME como Content-type: text/html. Esse cabeçalho é enviado ao cliente, para que ele identifique o tipo de conteúdo que está recebendo. Além disso, a saída do script deve ser compreensível pelo cliente, geralmente um browser da Web (HTML na maioria dos casos, texto simples ou imagens, por exemplo).

Um script de teste simples, disponível em /usr/share/doc/packages/apache2/test-cgi, faz parte do pacote do Apache. Ele gera o conteúdo de algumas variáveis de ambiente como texto simples. Copie-o para /srv/www/cgi-bin/ ou para o diretório de script do seu host virtual (/srv/www/exemplo.com_cgi-bin/) e nomeie-o como teste.cgi.

Os arquivos acessíveis pelo servidor Web devem ser de propriedade do usuário Root (consulte a Seção 26.7, “Evitando problemas de segurança” para obter informações adicionais). Como os servidores Web são executados com outro usuário, os scripts CGI devem ser passíveis de execução e leitura universais. Passe para o diretório CGI e use o comando chmod 755 teste.cgi para aplicar as permissões apropriadas.

Agora chame http://localhost/cgi-bin/teste.cgi ou http://exemplo.com/cgi-bin/teste.cgi. Você deverá ver o “relatório do script de teste CGI/1.0”.

26.5.3. Solução de problemas

Se em vez de da saída do programa de teste for exibida uma mensagem de erro, verifique o seguinte:

Solução de problemas de CGI

  • Você recarregou o servidor após mudar a configuração? Verifique com rcapache2 probe.

  • Se você configurou seu diretório CGI personalizado, ele está configurado corretamente? Em caso de dúvida, experimente o script dentro do diretório CGI padrão /srv/www/cgi-bin/ e chame-o com http://localhost/cgi-bin/teste.cgi.

  • As permissões de arquivo estão corretas? Passe para o diretório CGI e execute o comando ls -l teste.cgi. A saída deverá começar com

     -rwxr-xr-x  1 root root 
  • Verifique se o script não contém erros de programação. Se você não tiver mudado o teste.cgi, talvez não seja essa a questão. Porém, se você estiver usando seus próprios programas, sempre verifique se eles não contêm erros de programação.