Search

Language:  

Available article translations:

Cuando intento llamar a mi script cgi a través de URL usando un navegador, recibo “500 Internal Server Error”. Qué puedo hacer?

Resolución

1. Compruebe /etc/httpd/logs/suexec_log o /var/log/httpd/suexec_log para comprobar si se producen errores cuando intenta ejecutar scripts CGI. Suexec recoge errores de propiedade y de permiso.

Compruebe que la carpeta cgi-bin/ tiene los siguientes permisos y propiedad:

drwxr-x--- myuser psaserv cgi-bin

El propio script debe ser propiedad de un usuario de dominio FTP pero el grupo debe ser 'psacln':

-rwxr-xr-x myuser psacln script.cgi

Compruebe que los permisos del archivo del script  y del árbol del directorio (relativos a la raíz de documentos del servidor) no tienen un valor superior a 755 o usuario: lectura, escritura, ejecución; grupo: lectura, ejecución; otros: lectura, ejecución (-rwxr-xr-x).

2. Parallels Plesk Panel usa su propio archivo suexec y puede que haya sido reemplazado por el archivo original incluido en el paquete estándar de apache. En este caso, restáurelo usando el comando:
# /bin/cp /usr/sbin/psa-suexec /usr/sbin/suexec

Si está usando SuSe 9.x, reemplace /usr/sbin/suexec2 por el original.
# /bin/cp /usr/sbin/psa-apache2-suexec /usr/sbin/suexec2

En el caso de sistemas operativos Debian, use esta línea de comandos:
# /bin/cp /opt/psa/suexec/psa-suexec2 /usr/lib/apache2/suexec2

Si desea más información sobre la actualización de Apache en un servidor basado en Parallels Plesk Panel, consulte el artículo 762.

3. Puede que el script contenga símbolos "carriage-return" Windows al final de cada línea, que no fueron eliminados cuando cargó el archivo al servidor a través de FTP desde la estación de trabajo Windows.

En sistemas Windows, los finales de las líneas en los archivos se marcan con los caracteres ocultos 'carriage-return' (CR) y 'line-feed' (LF), mientras que en sistemas Unix se marcan únicamente con el caracter LF.

En equipos Windows, es necesario cargar lso archivos de texto en modo de transferencia ASCII. En este caso, los caracteres CR y LF serán reemplazados únicamente por LF. Si carga scripts CGI en modo BINARIO, estos archivos se cargarán tal cual, sin reconvertirse. De esta forma, cuando se ejecute el script, los caracteres CR serán reconocidos como parte del texto y no serán interpretados correctamente. Por ejemplo:

#!/usr/bin/perlCR
use strict;CR

También puede definir el modo de transferencia por defecto a nivel de servidor a ASCII en el archivo /etc/proftpd.conf:

DefaultTransferMode ascii

Para comprobar y corregir el script ya cargado con caracteres CR de forma manual, use una de las siguientes opciones:

a) elimine CR con la utilidad col:
# cd /home/httpd/vhosts/domain.com/cgi-bin
# col -bx < script.cgi > script2.cgi
# ls -l
total 84
-rw-r--r-- 1 myuser psacln 27683 Jun 14 15:51 script2.cgi
-rwxr-xr-x 1 myuser psacln 25753 Jun 14 11:20 script.cgi
# mv script2.cgi script.cgi
mv: overwrite `script.cgi'? y
# chmod 755 script.cgi
# chown myuser:psacln script.cgi

Use el nombre del propietario del script en lugar de myuser.

b) abra el archivo en el editor de texto pico, guárdelo y este eliminará los símbolos CR del archivo.
# pico script.cgi


4. Ejecute el script desde la línea de comando e identifique los errores.
Ejemplos:
 
# cd /home/httpd/vhosts/domain.com/cgi-bin
# ./script.cgi
: bad interpreter: No such file or directory

Compruebe el script para confirmar que el comentario mágico indica la ubicación de perl: #!/usr/bin/perl y/o compruebe que el símbolo CR aparece al final de la línea #!/usr/bin/perl tal y como detallamos en la opción 3.

o
# ./script.cgi
String found where operator expected at sc.cgi line 3, near "xcprint """
(Do you need to predeclare xcprint?)
syntax error at sc.cgi line 3, near "xcprint """
Execution of sc.cgi aborted due to compilation errors.

Este ejemplo muestra que existen algún error de sintaxis en este script y que no funcionará correctamente hasta que lo corrija.



FEEDBACK
Was this article helpful?
Tell us how we may improve it.
Yes No