O
CGI (
Common Gateway Interface) define uma maneira de um servidor da Web interagir com programas geradores de conteúdo externos, que são geralmente chamados de programas CGI ou scripts CGI. É uma maneira simples de colocar conteúdo dinâmico em seu site, usando qualquer linguagem de programação com a qual você esteja mais familiarizado.
1. Procure no arquivo de configuração do Apache
/etc/httpd/conf/httpd.conf, a linha que possui esse conteúdo "LoadModule cgid_module modules/mod_cgid.so" ou algo parecido, use um editor de texto (por exemplo, no Vim "/LoadModule cgid_module.*" ) ou se quiser procurar diretamente pelo terminal, rode:
# egrep 'LoadModule cgid_module modules.*' /etc/httpd/conf/httpd.conf
Verifique que ela estará comentada (com uma tralha "#" na frente), mais ou menos assim: "#LoadModule cgid_module modules/mod_cgid.so", tire a tralha da frente e deixe mais ou menos assim:
LoadModule cgid_module modules/mod_cgid.so
2. Próximo passo é verificar se a linha correspondente ao ScriptAlias está descomentada, procure a linha ScriptAlias /cgi-bin/ "/srv/http/cgi-bin/", geralmente ela já está descomentada e pronta pra uso e também pode ser que ela esteja apontando para outro diretório.
Lembre-se desse diretório, pois é lá que você guardará seus scripts. Isso quer dizer que você vai guardar no diretório
/srv/http/cgi-bin/, mas acessará o conteúdo pelo endereço:
http://localhost/cgi-bin/
Se o diretório não existir, crie:
sudo chmod -p /srv/http/cgi-bin/ .
3. Permitir a execução de CGI utilizando a diretiva Options. Encontre as tags mais ou menos iguais a essa abaixo, na sua distro pode ser que esteja com o caminho diferente, mas esse exemplo é no Arch
Linux, mas serve pra qualquer distro:
<Directory "/srv/http/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
Altere e insira a linha "Options +ExecCGI" antes de "AllowOverride None", ficando assim:
<Directory "/srv/http/cgi-bin">
Options +ExecCGI
AllowOverride None
Options None
Require all granted
</Directory>
Não esqueça de ir salvando o arquivo a cada alteração correta feita.
4. O quarto passo é adicionar a diretiva AddHandler às extensões de arquivo que você deseja que ele aceite, encontre a linha que tem a palavra "Addhandler" e altere como desejar, por exemplo, ela vai estar mais ou menos assim:
Essa palavra pode ser encontrada em outros lugares do arquivo, mas a única linha que não possui tralha "#" na frente, é justamente a que você deve alterar.
AddHandler cgi-script .cgi
Vamos supôr que você vai querer rodar no seu servidor extensões Shell Script .sh, Python .py e Perl .pl, então deixe ela assim:
AddHandler cgi-script .cgi .sh .py .pl
Além, lógico, dos arquivo com extensão ".cgi", que provavelmente haverá qualquer linguagem de programação, e quem irá identificar é SheBang "#!/bin/linguagem" que estará no arquivo.
5. Criando um arquivo de teste para verificarmos se já está tudo Ok, exemplo para Shell Script:
sudo vim /srv/http/cgi-bin/teste.sh
Dentro do arquivo, coloque esse conteúdo:
Obs.: respeite a linha em branco logo abaixo da "shebang", um echo vazio logo abaixo de "echo "content-type: text/html"" também precisa ser respeitado, caso contrário haverá erro exibido pelo apache.
Arquivo exemplo:
#!/bin/bash
echo "content-type: text/html"
echo
echo
echo "
<html> <head> <meta charset='utf-8' /> <title> CGI script </title> </head>
<body>
<h1>Algumas informações sobre a máquina que o CGI está rodando:</h1>
"
echo "<h4>uptime</h4>"
echo "<pre>$(uptime)</pre>"
echo "<h4>uname</h4>"
echo "<pre>$(uname -a)</pre>"
echo "<h4>/proc/cpuinfo</h4>"
echo "<pre>$(cat /proc/cpuinfo)</pre>"
echo "
</body>
</html>
"
Exemplo Python:
#!/usr/bin/python
print("Content-Type: text/plain;charset=utf-8")
print("")
print("Hello World!")
6. Dando as permissões necessárias para o Apache ler o navegador ler o arquivo e o diretório:
sudo chmod -R a+x /srv/http/cgi-bin/
Reinicie o Apache:
sudo systemctl restart httpd
7. Agora, abra o navegador e acesse o endereço:
http://localhost/cgi-bin/teste.sh
e veja o conteúdo!