Problema:  Esecuzione di script in perl al di fuori della cgi-bin con Apache in Fedora Core 7
 

Abbiamo un Apache 2.2.8

[root]# httpd -v
Server version: Apache/2.2.8 (Unix)
Server built: Jan 24 2008 10:44:19

installato con Fedora Core 7

[root]# uname -r
2.6.21-1.3194.fc7

Vogliamo eseguire gli script in perl al di fuori della directory cgi-bin


Soluzione:

_________________________________________________________________________________________________________

1. Apache ha la gestione dinamica dei moduli, ovvero non va ricompilato se si installano moduli nuovi. Questo si verifica vedendo la presenza di "mod_so.c" per la gestione dei DSO, ovvero dei moduli dinamici. Questo e' di default nell'installazione di apache da fedora. Se non lo avete probabilmente avete installato apache successivamente per conto vostro e quindi questo tutorial non fa per voi in quanto dovete reinstallare apache.

[root]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
________________________________________________________________________________________________________


2. Verificate che nel sistema c'e' mod_perl.c

 [root]# cat /var/log/rpmpkgs | grep mod_perl
mod_perl-2.0.3-7.i386.rpm

Se non lo avete installatelo con "
yum install mod_perl"

_________________________________________________________________________________________________________

3. Editate il file /etc/httd/conf/httpd.conf

Poiche' volete utilizzare gli script al di fuori di cgi-bin dovete specificare il nuovo path. Qui supponiamo che la directory con i file in perl sia /var/www/html/HOMEPAGE. Allora cambiate la riga:

ScriptAlias    /cgi-bin/    "var/www/cgi-bin/"

con:

ScriptAlias  /    "/var/www/html/mieiscript/"

Altrimenti potreste avere l'errore:
Forbidden
You don't have permission to access /pippo.pl on this server.

_________________________________________________________________________________________________________

4. Verificate che nella configurazione del VirtualHost o comunque del vostro sito web vi sia la riga:

Options ExecCGI
 

Altrimenti potreste avere l'errore:
[Wed Jun 18 10:34:10 2008] [error] [client 192.168.9.8] Options ExecCGI is off in this directory: /var/www/html/mieiscript/pippo.pl

_________________________________________________________________________________________________________

 

Note:

1.
Non e' necessario che nel file httpd.conf aggiungiate la riga
   
 LoadModule perl_module modules/mod_perl.so
Il modulo viene caricato comunque.

2. In "
httpd -l" non e' necessario che appaia il modulo "mod_perl.so"

3. Se nella pagina web avete l'errore:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

probabilmente c'e' un errore durante l'esecuzione dello script in perl. Vedete con "tail -f /var/log/httpd/error_log"

4. Errore "Premature end of script headers"

[Wed Jun 18 11:23:56 2008] [error] [client 192.168.9.8] (13)Permission denied: exec of '/var/www/html/mieiscript/index.htm' failed
[Wed Jun 18 11:23:56 2008] [error] [client 192.168.9.8] Premature end of script headers: index.htm

Se avete un errore su un file .html ma relativo agli script probabilmente avete sovrapposto la cartella degli script con quella dei file html.