sábado, 20 de agosto de 2011

Configurando CGI no Apache

Configurando CGI no Apache | Nação Livre






























Com a massa de usuários de internet cada vez maior, um site ou sistema web, seja ele um blog ou um site institucional, fica inviável a sua utilização sem qualquer conteúdo dinâmico. Com a necessidade batendo a porta as páginas dinâmicas cresceram e melhoraram muito nos últimos anos, sendo possível efetuar ações que antes eram exclusivas de softwares desktop.
Os recursos como o Ajax, linguagens do lado do servidor (Java, PHP, ASP, C#, Ruby e dentre outras), possibilitam a manipulação de informações, podendo-se trabalhar  dados específicos de forma dinâmica para os usuários. Um grande exemplo de tal recurso são os gerenciadores de conteúdos, como WordPress, Joomla, sistemas de  E-commerce etc.


CGI – Common Gateway Interface

O CGI é um recurso fantástico, que fornece um interface de
portabilidade entre linguagens diversas a fornecerem conteúdo para a web de
forma simples e transparente. Sua simplicidade torna o desenvolvimento mais
fácil, pois não existe a necessidade de aprender uma nova linguagens de
programação. É possivel até criar um programa em C++ , compila-lo e utilizar sua
saida para fornecer seus dados para a internet.
Como foco principal desta postagem vamos conhecer o CGI e
como implementa-lo no servidor Apache.


Habilitando o CGI

Primeiramente é necessário configurar um diretório para
servir de repositório para as aplicações que rodarão como cgi. Isto pode ser
efetuado, colocando a propriedade “ScriptAlias” dentro das configurações do seu
domínio web no arquivo de configuração do apache.
1 2 3 4 5 6 7 8 9 10 11
<VirtualHost *:80> ...

ServerName dominio-da-web.com.br

ScriptAlias /cgi-bin/ /home/dominio-da-web/cgi-bin/ <Directory
/home/dominio-da-web/cgi-bin>

allow from all


Options +ExecCGI

AddHandler cgi-script .cgi </Directory>
... </VirtualHost>
Uma observação importante é que você pode denominar
quantos “ScriptAlias” forem necessários , porem aconselho a criar um repositório
único para não ter problemas com gerenciamento.
A configuração acima diz ao servidor Apache que o
diretório “cgi-bin” dentro do diretório do usuário do domínio manipulado será o
repositório dos arquivos CGI, que serão acessados publicamente pela URL do
navegador como http://www.dominio-da-web.com.br/cgi-bin/arquivo.cgi.
Ainda no exemplo acima, é configurado a extensão a ser
aceita como CGI dentro da tag <Directory> com a propriedade “AddHandler
cgi-script” como “.cgi”. Nesta configuração foi apenas configurado a extensão
“.cgi” para exemplo, mas se necessário pode-se especificar extensões diferente
ou até mesmo mais de uma extensão, como .pl, .bin, .py, .sh etc.

Vejamos:
1 2 3 4 5 6 7 8 9 10
<VirtualHost *:80> ...

ScriptAlias /cgi-bin/ /home/dominio-da-web/cgi-bin/ <Directory
/home/dominio-da-web/cgi-bin>

allow from all

Options +ExecCGI


AddHandler cgi-script .pl .py
.bin .sh </Directory> ... </VirtualHost>

Podemos ainda utilizar um documento padrão para ser
especificado quando houver a requisição para um diretório CGI. A utilização
deste recurso não utiliza “ScriptAlias” pois a diretiva “DirectoryIndex” com
esta opção emitiria uma mensagem de erro, para solucionar este problema
utilizaremos “Alias”.
1 2 3 4 5 6 7 8 9 10 11 12 13
<VirtualHost *:80> ...

Alias /cgi-bin/ /home/dominio-da-web/cgi-bin/
<Directory/home/dominio-da-web/cgi-bin>    
   Options ExecCGI     
   SetHandler
cgi-script    
   DirectoryIndex
index.py   
   Order allow,deny    
   Allow
from all    
   AllowOverride
none
</Directory>
...
</VirtualHost>


Testes de Configuração


Para efetuar testes em teu servidor de aplicações CGI,
segue abaixo alguns exemplos de códigos para serem utilizados.
Exemplo em C/C++
1 2 3 4 5 6 7 8 9 10 11
#include <iostream>




using namespace std;



int main(int
argc, char**
argv) {    
cout << "Content-type: text/plain"
<<
endl << endl;    
cout << "<h1>C/C++</h1>"
<<
endl;     cout
<<
"<p>Olá mundo !!! eu sou um CGI.</p>"
<<
endl;    
return
0;


}
Exemplo em Python
1 2 3 4 5
#! /usr/bin/env python



print("Content-type:
text/plain\n\n"
)

print("<h1>Python</h1>\n")


print("<p>Olá
mundo !!! eu sou um CGI.</p>\n"
)
Exemplo em Perl
1 2 3 4 5
#! /usr/bin/perl



print
"Content-type: text/plain\n\n"
;


print
"<h1>Perl</h1>\n"
;

print
"<p>Olá mundo !!! eu sou um CGI.</p>\n"
;
Exemplo em Shell Script

1 2 3 4 5
#! /bin/sh



echo "Content-type: text/plain\n\n"

echo "<h1>Perl</h1>\n"


echo "<p>Olá mundo !!! eu sou um
CGI.</p>\n"

Nenhum comentário:

Postar um comentário