Hay un poder oculto en las WebApps que se ha olvidado, los poderosos CGI, las WebApps basadas en lenguajes como PHP, C#, Java y otros no pueden competir contra un binario nativo, los CGI ofrecen la oportunidad de escribir aplicaciones en prácticamente cualquier lenguaje pero más importante que todo, estos lenguajes pueden ser C o cualquier otro compilado a código nativo, si la WebApp tratara de cálculos matemáticos, lo ideal sería hacerlo en lenguajes que compilen nativamente , tan rápidos como C, Ensamblador, Pascal y otros menos como Perl o simplemente el Shell del sistema operativo, una WebApp escrita en BASH por ejemplo.
Los CGI fueron olvidados por que son un poco más complicados de programar y usar que solo escribir el código dentro del html como PHP y estos requieren un tratamiento especial sin embargo usan los métodos de entrada y salida standart para intercambiar datos esto permite que cualquier lenguaje que pueda manejar STDIN o el STDOUT pueda ser usado como CGI, los primeros formularios de internet no se hacían con PHP ni lenguajes comunes disponibles actualmente, se hacían con CGIs para este ejemplo voy a configurar la carpeta tradicional de los CGI la CGI-BIN, dentro de esa carpeta van los CGI y los binarios que se ejecutaran para crear WebApps como se hacía originalmente. Por supuesto en la década de los 90’s no se llamaban WebApps solo CGIs
Para esta demostración uso un Apache 2.4.7
Por lo general el directorio o carpeta de CGI va junto con la de HTML, pero con las configuraciones de seguridad de mi servidor esto no podria ser, asi que la pondré en /usr/cgi-bin se declara en el virtualhost y se le da permiso al directorio donde se ejecutara los CGI de otra forma Apache mandaria un error de forbidden esto se debe a que no permite leer directorios que no estén previamente autorizados en la propia configuración de apache.
Order Deny,Allow
Allow from all
Options FollowSymLinks
AllowOverride AuthConfig Limit Options
Require all granted
Tambien se debe declarar que el directorio será usado como repositorio de CGI en virtualhosting con ScriptAlias
ServerAlias www.lastdragon.net
ScriptAlias /cgi-bin/ "/usr/cgi-bin/"
De esta forma cada que en URL del navegador ponemos /cgi-bin apache entiende que tiene que ir a buscar en /usr/cgi-bin
Tambien debe cargarse el modulo de CGI
LoadModule cgi_module modules/mod_cgi.so
Estos pasos son específicos para las versiones Apache 2.4.x, anteriormente incluso era más fácil pero dudo mucho que compilen versiones viejas si esta disponible las actuales.
A partir de ahora Apache puede de manejar CGIs, Apache provee a los CGI por medio de standat input o variables de entorno la información que viene del exterior, muchas de las variables que usan en PHP en realidad no son de PHP son de Apache
Ejemplo de un CGI hola mundo escrito en BASH
Nótese que he dejado 2 líneas en blanco, en un CGI son obligatorias o habrá un error 500 en el servidor web
Ahora manipulando métodos GET con un Shell BASH
Ahora un sencillo programa escrito en C
En próximos artículos podría incluir ejemplos para manejo de datos y hacerlo con binarios escritos en C u otros lenguajes como pascal, pero como ya seguro piensas incluso con CGI es posible manejar bases de datos con las librerías de C