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.