O tutorial de hoje vamos configurar o Apache para rodar Shell Script e Python como exemplos, mas você pode testar em qualquer linguagem de programação de seu interesse. Também vamos usar de cobaia o Arch Linux, mas com mínimas adaptações é o mesmo procedimento pra qualquer Linux ou BSD, e até mesmo qualquer sistema baseado em UNIX.
Let’s go! ✌
sudo pacman -Syy
sudo pacman -Syu
sudo pacman -S apache
sudo systemctl enable httpd.service
sudo systemctl start httpd.service
Lembre-se que dentro deste diretório precisa ser root ou sudo , não tente
sudo echo
echo 'Minha pagina HTML' | sudo tee /srv/http/index.html
Agora abra o navegador e acesse o endereço: http://localhost/ , você verá o conteúdo que você escreveu.
Os diretórios de usuários estão disponíveis por padrão através de http://localhost/~usuario/ e mostram o conteúdo de ~/public_html
Note que há o sinal til (~) na URL, logo digite ela também antes do seu nome de usuário, caso contrário haverá erro 404, exemplo:
Mas para criar uma visualização customizada é necessário criar o diretório, alterar as permissões e criar um arquivo html:
mkdir ~/public_html
chmod o+x ~
chmod o+x ~/public_html/
chmod o+r ~/public_html/
echo 'Teste de página WEB com diretorio do usuario' > ~/public_html/index.html
sudo systemctl restart httpd.service
Depois acesse o endereço: http://localhost/~seu_usuario/
O Apache possui opções e diretivas <Directory ..i> para determinar suas configurações.
O arquivo de configuração principal é /etc/httpd/conf/httpd.conf , que inclui vários outros arquivos de configuração. Ao abrir ele verifique que as linhas que estão descomentadas(sem começar com tralha #), quer dizer que já estão pré-configuradas pra você, vejamos alguns exemplos:
<Directory "/srv/http">
para o que você mudou seu DocumentRoot , ou você provavelmente vai ter um erro 403 (falta de privilégios) quando você tenta acessar a nova raiz do documento. Não se esqueça de alterar a linha Require all denied para Require all granted , caso contrário, você receberá um erro 403 . Lembre-se de que o diretório DocumentRoot e suas pastas pai devem permitir permissão de execução para outros (pode ser configurado com chmod o+x /path/to/DocumentRoot ), caso contrário você obterá um erro 403 .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.
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.
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!")
sudo chmod -R a+x /srv/http/cgi-bin/
Reinicie o Apache
sudo systemctl restart httpd
sudo mv /usr/bin/suexec /usr/bin/suexec_tchau
sudo systemctl restart httpd
DirectoryIndex index.html index.sh index.py