CGI (Common Gateway Interface) define una manera de que un servidor Web interactúa con programas externos generadores de contenido, los cuales son a menudo denominados programas CGI o CGI scripts. Este es el modo más común y simple de crear contenido dinámico en tu sitio Web.

Este artúclo es una introducción para configurar CGI sobre un servidor web Apache.

Configurando Apache para permitir CGI

Para conseguir que tus programas CGI funcionen apropiadamente, necesitas tener Apache configurado para permitir ejecución CGI. Hay bastantes formas de hacer esto.

ScriptAlias

La directiva ScriptAlias le dice a Apache que un directorio concreto es asignado para programas CGI. Apache asumirá que cada fichero de este directorio es un programa CGI, e intentará ejecutarlo, cuando este recurso particular sea solicitado por un cliente.

La directiva ScriptAlias se muestra así:

ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/

El ejemplo pertenece a tu fichero de configuración por defecto httpd.conf, si es que has instalado Apache en la ruta por defecto. La directiva ScriptAlias es más agradable que la directiva Alias, que define un prefijo URL que se mapea a un directorio particular. Alias y ScriptAlias son usados normalmente para directorios que están fuera del directorio DocumentRoot. La diferencia entre Alias y ScriptAlias es que ScriptAlias tiene el significado adicional de que todo bajo el prefijo URL se considera un programa CGI.

Así pues, el ejemplo anterior le dice a Apache que cualquier solicitud de un un recurso que comienza con /cgi-bin/ deberá servirse desde el directorio "/usr/local/apache/cgi-bin/" y deberá tratarse como un programa CGI.

Por ejemplo, si la URL "http://www.midominio.com/cgi-bin/test.pl" es solicitada, Apache intentará ejecutar el fichero "/usr/local/apache/cgi-bin/test.pl" y devolver la salida. Por supuesto el fichero tendrá que existir, y ser ejecutable, y devolver la salida de una manera concreta, o Apache devolverá un mensaje de error.

CGI fuera de los directorios

Los programas CGI son restringidos a menudo a los directorios ScriptAlias por razones de seguridad. De este modo, los Administradores pueden controlar estrictamente a quien se permite usar programas CGI. Sin embargo, si las precauciones de seguridad apropiadas, no hay razón por la que los programas CGI no puedan ser ejecutados desde directorios arbitrarios. Por ejemplo, puedes querer permitir a los usuarios tener contenido web en sus directorios con la directiva UserDir. Si ellos quieren tener sus propios programas CGI, pero no tienen acceso al directorio principal cgi-bin, necesitarán ejecutar los programas CGI desde alguna parte.

En Apache podemos especificar la directiva Options, dentro de un fichero de configuración principal del servidor, para especificar que la ejecución CGI esta permitida en un directorio concreto:

<Directory /usr/local/apache/htdocs/directoriocualquiera>
Options +ExecCGI
</Directory>

La directiva anterior le dice a Apache que permita la ejecución de ficheros CGI. Necesitarás a su vez decirle al servidor que ficheros son CGI. La directiva AddHandler le dice al servidor que trate todos los ficheros con extensión cgi o pl como programas CGI:

AddHandler cgi-script cgi pl


Fichero .htaccess

Un fichero .htaccess es un modo de establecer directivas de configuración basadas en un directorio. Cuando Apache sirve un recurso, mira en el directorio del cual esta sirviendo, un fichero llamado .htaccess, y, si lo encuentra, aplicará las directivas que encuentre en el. Los ficheros .htaccess pueden estar permitidos a través de la directiva AllowOverride, que especifica que tipos de directivas pueden aparecer en ellos, o si no están permitidos en ningún caso. Para permitir la directiva que necesitamos en este caso, será necesaria la siguiente configuración en tu servidor principal.:

AllowOverride Options

En el fichero .htaccess, necesitarás la directiva:

Options +ExecCGI

la cual informa a Apache que la ejecución de programas CGI está permitida en este directorio.