Solucionar problemas de FastCGI

Generalidades

El siguiente artículo describe los errores comunes y los pasos para solucionar de problemas de los scripts de FastCGI.

FastCGI

FCGI es un protocolo para permitir que los programas interactúen con un servidor web. Mejora el rendimiento sobre CGI al reducir la sobrecarga y permitir que un servidor maneje varias solicitudes en su vida activa. Evita la sobrecarga de la creación y finalización de procesos por solicitud y permite que un servidor maneje más solicitudes de páginas web simultáneamente.

Detalles de configuración

En los servidores de DreamHost, FastCGI es manejado por mod_fcgid. Este es un módulo de Apache que proporciona una interfaz FastCGI que está específicamente ajustada para la configuración dinámica de FastCGI usada en los servidores DreamHost.

PHP

PHP se ejecuta a través de FastCGI en DreamHost por defecto.

Usar $ENV{'QUERY_STRING'} en vez de @ARGV

No puedes obtener la cadena de consulta en FastCGI usando la matriz @ARGV. Debes usar $ENV{'QUERY_STRING'}en vez. Por ejemplo, agrega el siguiente código a un nombre de archivo test.pl.

#!/usr/bin/perl

print "Content-type:text/html\n\n";
print "QUERY_STRING = $ENV{'QUERY_STRING'}";

Siguiente, visita la siguiente URL.

  • example.com?123

Verás que el valor 123 está impreso en la página.

Errores y solución de problemas

Errores

Si ocurre un error en tu secuencia de comandos FastCGI, es posible que no se devuelva de inmediato. Si el script carga una página web, la página parecerá que se cuelga. Cuando se agota el tiempo de espera de la secuencia de comandos, es posible que el mensaje de error no se registre y solo veas un error 500.

Pruebas

Por las razones expuestas anteriormente, las pruebas con FastCGI no son prácticas. El desarrollo debe realizarse con CGI estándar o en tu computador local. FastCGI solo debe agregarse después de que el script ya se haya depurado.

Probar la línea de comandos

Probar un script desde la línea de comandos te permite confirmar inmediatamente si fallará.

Es posible que esto no detecte el 100% de los errores debido a las diferencias con %ENV.

Por ejemplo:

[server]$ perl ~/example.com/myscript.fcgi

También puedes agregar la banderilla -d para más información de depuración.

[server]$ perl -d ~/example.com/myscript.fcgi

Parar los procesos antiguos

Es posible que corregir un error no corrija el script de inmediato porque el servidor aún podría estar ejecutando una versión anterior del script desde la memoria. Para obligar al servidor a ejecutar la versión actual del script, ubica el nombre de los procesos antiguos o viejos, y luego para o elimina esos procesos:

Asegúrate de cambiar username a tu usuario Shell.

[server]$ killall -u username processname

Si el comando de arriba no funciona, reemplaza killall con killall -9.

Ver el archivo error.log

Siempre verifica el archivo error log de tu sitio web si recibes un error.

Ver los permisos del archivo y del directorio

Asegúrate de que el script que estás intentando correr esté configurado como ejecutable.

[server]$ chmod +x myscript.fcgi

El directorio en el que se encuentra el script y los directorios anteriores también deben tener permisos de escritura.

[server]$ chmod -R 755 ~/example.com/

Directivas del archivo .htaccess

Revisa tu archivo .htaccess para ver si hay una línea que referencie .cgi.

RewriteRule ^(.*)$ scriptname.cgi [QSA,L]

Si es asi, cámbialo a .fcgi.

RewriteRule ^(.*)$ scriptname.fcgi [QSA,L]

Limpiar tu directorio tmp

Finalmente, intenta eliminar todas las sesiones en tu carpeta /tmp.

Esta opción solo es posible si tu sitio están en un VPS o Servidor Dedicado.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?