Generalidades
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 más solicitudes de páginas web a la vez.
PHP
PHP se corre a través de FastCGI por defecto en DreamHost. Puedes cambiar esto en tu panel ajustando la versión de PHP de tu sitio.
Diferencias entre CGI y FCGI
CGI
CGI es un protocolo para servidores web para ejecutar programas web dinámicos. CGI crea nuevos procesos para cada solicitud, lo que hace que los programas de CGI sean simples de implementar pero limita la eficiencia y la escalabilidad. Con cargas altas, la sobrecarga de creación de procesos CGI se vuelve significativa.
FCGI
FCGI usa procesos persistentes para manejar una serie de solicitudes. Cada proceso FastCGI individual puede manejar muchas solicitudes a lo largo de su vida útil, lo que evita la sobrecarga de la creación y terminación de procesos por solicitud.
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.
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.