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! ✌

1º - Atualize todo o sistema de maneira efetiva com os dois comandos abaixo

sudo pacman -Syy sudo pacman -Syu

2º - Instale o Apache

sudo pacman -S apache

3º - Habilite o Apache para iniciar junto com o sistema e também start para já poder usá-lo:

sudo systemctl enable httpd.service sudo systemctl start httpd.service

Por padrão o conteúdo que acessa pelo localhost está no endereço /srv/http/ lá após instalação não haverá nada, então crie um arquivo index.html e insira um conteúdo nele para poder visualizar, use um editor de texto ou com o comando abaixo: 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.

Usando um diretório alternativo sem precisa de root ou sudo

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/

Entendimentos básicos

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:

ServerRoot “/etc/httpd” - Diretório raíz do Apache onde ficam os arquivos de configuração /etc/httpd/conf/ e os módulos /etc/httpd/modules/

- Diretório raíz do Apache onde ficam os arquivos de configuração /etc/httpd/conf/ e os módulos /etc/httpd/modules/ Listen 80 - Porta que o servidor irá exibir as páginas na Web via http, se quiser que fique acessível só pra seu computador e ninguém consiga acessar externamente altere para Listen 127.0.0.1:80

- Porta que o servidor irá exibir as páginas na Web via http, se quiser que fique acessível só pra seu computador e ninguém consiga acessar externamente altere para ServerAdmin you@example.com - Este é o endereço de e-mail do administrador, que pode ser encontrado, por exemplo, em páginas de erro. Se quiser altere para o que você deseja.

- Este é o endereço de e-mail do administrador, que pode ser encontrado, por exemplo, em páginas de erro. Se quiser altere para o que você deseja. DocumentRoot “/srv/http” - Este é o diretório onde você deve colocar suas páginas da web. Você pode alterá-lo, mas não se esqueça de também alterar <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 .

- Este é o diretório onde você deve colocar suas páginas da web. Você pode alterá-lo, mas não se esqueça de também alterar para o que você mudou seu DocumentRoot , ou você provavelmente vai ter um (falta de privilégios) quando você tenta acessar a nova raiz do documento. Não se esqueça de alterar a linha para , 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 ), caso contrário você obterá um . AllowOverride None - Esta diretiva nas seções <Directory> faz com que o Apache ignore completamente os arquivos .htaccess . Observe que esse é o padrão do Apache 2.4, portanto, é necessário permitir explicitamente substituições se você planeja usar arquivos .htaccess . Se você pretende usar mod_rewrite ou outras configurações em arquivos .htaccess , pode permitir quais diretivas declaradas nesse arquivo podem substituir a configuração do servidor.

- Esta diretiva nas seções faz com que o Apache ignore completamente os arquivos . Observe que esse é o do Apache 2.4, portanto, é necessário permitir explicitamente substituições se você planeja usar arquivos . Se você pretende usar ou outras configurações em arquivos , pode permitir quais diretivas declaradas nesse arquivo podem substituir a configuração do servidor. ServerSignature Off - Para ocultar informações do servidor, como as versões do Apache, linguagem, sistema operacional…

- Para ocultar informações do servidor, como as versões do Apache, linguagem, sistema operacional… Include conf/extra/httpd-userdir.conf - Se você não quiser que os diretórios dos usuários estejam disponíveis na web, comente essa linha. Ou se quiser alterar o nome e/ou localização do mesmo, edite o arquivo: /etc/httpd/conf/extra/httpd-userdir.conf .

- Se você não quiser que os diretórios dos usuários estejam disponíveis na web, comente essa linha. Ou se quiser alterar o nome e/ou localização do mesmo, edite o arquivo: . Entre outras opções e diretivas que podem ser vistas no próprio arquivo.

Habilitando Shell Web cgi

Introdução

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 as extensões de arquivo que você deseja que ele aceite, encontre a linha que tem a palavra Addhandler e altere como deseja, 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!

Solução de possíveis problemas

O Apache usa um programinha chamado suexec que serve pra gerar problemas de permissão ☹ . Verifique ele está habilitado e carregado com o Apache, use o comando: apachectl -V se na saída houver a uma linha com o conteúdo: -D SUEXEC_BIN=”/usr/bin/suexec” , tente renomear ele e reiniciar o Apache e depois verifique se agora funcionou a exibição via browser:

sudo mv /usr/bin/suexec /usr/bin/suexec_tchau sudo systemctl restart httpd

Se aparecer mensagens como: Proibido, POST Method Not Allowed,… Verifique os logs de erro lá em /var/log/apache_ou_http/ .

. Problemas com caracteres em Hexadecimais em requições POST ou GET ? Haha, aí é seu programinha que irá resolver, esse não é um problema do Apache, no entanto, existem alguns módulos que podem lhe ajudar, mas vai por mim, é melhor você mexer a cuca e tentar resolver com sua linguagem de programação! ☻

Dicas adicionais

Se quiser que o Apache leia seus index.sh , index.py ,… encontre a palavra index.html e ao lado dela inclua os indexes que deseja, exemplo:

DirectoryIndex index.html index.sh index.py

Você pode habilitar o TLS;

Criar uma chave e um certificado (autoassinado) OpenSSL CSR

Virtual Hosts /etc/hosts

Integração com MySQL e PHP.

Protocolo HTTPS.

Conheça nosso Treinamentos de Shell Script, Vim, Expressões Regulares e Sed

Crie Sua Promoção

Acompanhe todos os vídeos da Série Shell Script Profissional

Abraços! ☝

apache shellscript python web