viernes, 18 de marzo de 2011

Fastcgi en apache

Para poder ejecutar programas o scripts en el servidor apache mediante el modulo fastcgi debe tener en cuenta algunas recomendacion.
Dependiendo de la version del servidor apache que este usando , es necesario activar el modulo mod_fcgid.so y configurar los virtual host en la configuracion de apache para poder ejecutar fastcgi.
En este caso solo se programara en C el ejemplo, tambien se puede usar otros lenguajes de programacion por ejemplo java, perl, tcl, etc.
Existen varios ejemplos que se pueden encontrar por internet pero la gran mayoria no funcionan, es necesario tener instalado la libreria fcgi lo puede obtener atravez de la herramienta que le proporciona su distribucion de linux o puede obtener el codigo fuente en este link http://mirror.star4u.org/ubuntu/pool/universe/libf/libfcgi/libfcgi_2.4.0.orig.tar.gz , en el codigo fuente existe ejemplos que solo hay que copilarlo y hacerlo funcionar.
Por ejemplo echo.c
/*****************************/

/*
* echo.c --
*
* Produce a page containing all FastCGI inputs
*
*
* Copyright (c) 1996 Open Market, Inc.
*
* See the file "LICENSE.TERMS" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
*/
#ifndef lint
static const char rcsid[] = "$Id: echo.c,v 1.5 1999/07/28 00:29:37 roberts Exp $";
#endif /* not lint */

#include "fcgi_config.h"

#include

#ifdef HAVE_UNISTD_H
#include
#endif
extern char **environ;
#include "fcgi_stdio.h"


static void PrintEnv(char *label, char **envp)
{
printf("%s:
\n
\n", label);
for ( ; *envp != NULL; envp++) {
printf("%s\n", *envp);
}
printf("

\n");

}

int main ()
{
char **initialEnv = environ;
int count = 0;

while (FCGI_Accept() >= 0) {
char *contentLength = getenv("CONTENT_LENGTH");
int len;

printf("Content-type: text/html\r\n"
"\r\n"
"FastCGI echo"
"

FastCGI echo

\n"
"Request number %d, Process ID: %d

\n", ++count, getpid());


if (contentLength != NULL) {
len = strtol(contentLength, NULL, 10);
}
else {
len = 0;
}

if (len <= 0) {
printf("No data from standard input.

\n");

}
else {
int i, ch;

printf("Standard input:
\n
\n");
for (i = 0; i <>
if ((ch = getchar()) <>
printf("Error: Not enough bytes received on standard input

\n");

break;
}
putchar(ch);
}
printf("\n

\n");

}

PrintEnv("Request environment", environ);
PrintEnv("Initial environment", initialEnv);
} /* while */

return 0;
}
/*****************************/


Para copilarlo:
gcc -o echo.fcgi echo.c -lfcgi
Tenga en cuenta la extension del archivo (.fcgi) generado debe ser la que se configuro en el apache para poder ejecutar fastcgi.
Lo puede ejecutar en una consola el binario obtenido le mostrara una salida formateada en html, pero la forma correcta es atravez de un navegador web, ejecute http://midominio.com/echo.fcgi

Si tiene alguna duda, consulte la documentacion de fastcgi http://www.fastcgi.com/drupal/node/6



No hay comentarios:

Publicar un comentario