É assim que scripts CGI Perl são executados corretamente no CentOS 7.
Estou deixando isso aqui, pois parece que muitos dos recursos na internet não combinam os passos e deixam pessoas como eu muito confusas.
Em resumo, isso é o que precisa ser feito.
- Instalar software.
- Crie seu arquivo CGI de teste.
- Verifique se o módulo CGI está carregado. Dentro de
httpd.conf
. - Altere as configurações do diretório em
httpd.conf
. - Altere as permissões para permitir a execução de CGI.
Instalar e configurar software
sudo yum update
sudo yum install httpd
sudo yum install perl perl-CGI
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
Crie seu arquivo CGI de teste
Mesmo seguindo essas etapas durante todo o tempo, nunca obtive um script CGI dentro de /var/www/cgi-bin
para carregar sem modificar a raiz da Web dentro de httpd.conf
. Em vez disso, decidi ativar o CGI em outro diretório.
No meu servidor, quero que a raiz da web html
mantenha meus arquivos CGI. Isso é /var/www/html/hello.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n"; # This is mandatory.
print "<h2>Hello world!</h2>";
Certifique-se de que o módulo CGI esteja carregado. Dentro de httpd.conf
Você pode fazer uma verificação fácil para isso por meio do comando.
grep -n "LoadModule" /etc/httpd/conf/httpd.conf
Eu pude ver que nenhum módulo CGI foi especificado e confirmei sua existência dentro da pasta de módulos via:
find /etc/httpd/modules/ -iname "*cgi*"
Este é o que eu sou depois:
/etc/httpd/modules/mod_cgi.so
Vamos adicionar isso ao arquivo /etc/httpd/conf/httpd.conf
:
LoadModule cgi_module modules/mod_cgi.so
Eu acredito que você precisa carregar o de uma maneira diferente no Ubuntu , tenha isso em mente.
Altere as configurações do diretório em httpd.conf
Antes de reiniciar o httpd
, temos que alterar mais uma coisa em /etc/httpd/conf/httpd.conf
:
<Directory "var/www/html">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
De acordo com muitos Googlings, talvez seja necessário também modificar essa parte do arquivo httpd.conf
para que aponte para o mesmo diretório acima de "var/www/html"
:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
Eu não modifiquei o meu, não pareceu fazer diferença.
Altere as permissões para permitir que o CGI seja executado
E este me deixou muito preso! Não negligencie isso!
Você precisa dizer ao seu servidor que esses scripts CGI podem ser executados como programas.
chmod 705 *.cgi
Ou você pode segmentar scripts CGI individuais.
chmod 705 hello.cgi
(Algumas pessoas na internet disseram que chmod 755
e 777
também funcionam.)
Agora reinicie httpd
da seguinte forma:
sudo systemctl restart httpd.service
Neste ponto, meus scripts CGI são renderizados corretamente em HTML.
Eles estão sendo veiculados da raiz da Web assim: http://<IP>/hello.cgi
Por favor, sinta-se à vontade para adicionar mais informações que possam ajudar os outros.