La interfaz de gateway común (CGI) de Apache permite crear contenido dinámico con programas o guiones que normalmente se conocen como guiones CGI. En teoría, se pueden escribir guiones CGI en cualquier lenguaje de programación. Por lo general se emplean lenguajes de guiones como Perl o PHP.
Para hacer que Apache proporcione contenido creado mediante guiones CGI, se debe activar mod_cgi. También es necesario mod_alias. Ambos módulos están habilitados por defecto. Consulte la Sección 26.4.2, “Activación y desactivación” para obtener información detallada acerca de la activación de módulos.
![]() | Seguridad de CGI |
|---|---|
Cuando se permite que el servidor ejecute guiones CGI se genera una brecha potencial en la seguridad. Consulte la Sección 26.7, “Cómo evitar problemas de seguridad” para obtener más información. | |
En SUSE Linux, la ejecución de guiones CGI sólo está permitida en el directorio /srv/www/cgi-bin/. Esta ubicación está configurada de antemano para ejecutar guiones CGI. Si ha creado una configuración de host virtual (consulte Sección 26.2.1.2, “Configuración de hosts virtuales”) y quiere colocar los guiones en un directorio específico de hosts, debe desbloquear y configurar ese directorio.
Ejemplo 26.5. Configuración de CGI para VirtualHost
ScriptAlias /cgi-bin/ "/srv/www/example.com_cgi-bin/"<Directory "/srv/www/example.com_cgi-bin/"> Options +ExecCGI
AddHandler cgi-script .cgi .pl
Order allow,deny
Allow from all </Directory>
| Indica al servidor que debe tratar los archivos con las extensiones .pl y .cgi como guiones CGI. Se puede ajustar según las distintas necesidades. |
La programación de CGI se diferencia de la programación "normal" en que los programas y guiones CGI deben ir precedidos de un encabezado de tipo MIME, como Content-type: text/html. Este encabezado se envía al cliente para que entienda el tipo de contenido que recibe. En segundo lugar, la salida de los guiones debe ser algo que el cliente, normalmente un navegador Web, entienda: como HTML en la mayoría de los casos, texto sin formato o imágenes, por ejemplo.
El paquete de Apache incluye un guión simple de prueba en /usr/share/doc/packages/apache2/test-cgi. Con él se genera el contenido de algunas variables de entorno como texto sin formato. Copie este guión en /srv/www/cgi-bin/ o en el directorio de guiones de su host virtual (/srv/www/example.com_cgi-bin/) y asígnele el nombre test.cgi.
Los archivos a los que pueda acceder el servidor Web deben ser propiedad del usuario Root (consulte la Sección 26.7, “Cómo evitar problemas de seguridad” para obtener más información). Dado que el servidor Web se ejecuta con un usuario distinto, los guiones CGI deben poder ejecutarse y leerse globalmente. Acceda al directorio de CGI y utilice el comando chmod 755 test.cgi para aplicar los permisos adecuados.
A continuación, llame a http://localhost/cgi-bin/test.cgi o http://example.com/cgi-bin/test.cgi. Debería aparece el informe de prueba de guión “CGI/1.0 test script report”.
Si no se muestra el resultado del programa de prueba, sino un mensaje de error, compruebe lo siguiente:
Solución de problemas de CGI
¿Ha vuelto a cargar el servidor después de cambiar la configuración? Compruébelo con rcapache2 probe.
Si ha configurado un directorio de CGI personalizado, ¿está configurado correctamente? Si no está seguro, pruebe el guión dentro del directorio CGI por defecto, /srv/www/cgi-bin/, y actívelo con http://localhost/cgi-bin/test.cgi.
¿Son correctos los permisos de archivo? Acceda al directorio de CGI y ejecute el comando ls -l test.cgi. El resultado debe comenzar con
-rwxr-xr-x 1 root root
Asegúrese de que el guión no incluya errores de programación. No debería ocurrir si no ha cambiado el archivo test.cgi; pero, si utiliza programas propios, asegúrese siempre de que no contengan errores de programación.