Nginx CGI · 2 min read · Jan 23, 2026
Sirviendo Scripts CGI Con Nginx En Fedora 18 - Página 2
3 Usando Fcgiwrap
Fcgiwrap es un envoltorio CGI que se puede usar para entornos de alojamiento compartido porque permite que cada vhost use su propio directorio cgi-bin.
Como no hay un paquete fcgiwrap para Fedora, debemos construirlo nosotros mismos. Primero instalamos algunos requisitos previos:
yum groupinstall 'Development Tools'yum install fcgi-develAhora podemos construir fcgiwrap de la siguiente manera:
cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make installEsto instala fcgiwrap en /usr/local/sbin/fcgiwrap.
A continuación, instalamos el paquete spawn-fcgi que nos permite ejecutar fcgiwrap como un demonio:
yum install spawn-fcgiAbre /etc/sysconfig/spawn-fcgi…
vi /etc/sysconfig/spawn-fcgi… y modifica el archivo de la siguiente manera:
| # Debes establecer algunas opciones de trabajo antes de que el servicio "spawn-fcgi" funcione. # Si SOCKET apunta a un archivo, entonces este archivo es limpiado por el script de inicio. # # Consulta spawn-fcgi(1) para todas las opciones posibles. # # Ejemplo : #SOCKET=/var/run/php-fcgi.sock #OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi" FCGI_SOCKET=/var/run/fcgiwrap.socket FCGI_PROGRAM=/usr/local/sbin/fcgiwrap FCGI_USER=nginx FCGI_GROUP=nginx FCGI_EXTRA_OPTIONS="-M 0700" OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM" |
Crea los enlaces de inicio del sistema para spawn-fcgi…
systemctl enable spawn-fcgi.service… y inícialo de la siguiente manera:
systemctl start spawn-fcgi.serviceAhora deberías encontrar el socket de fcgiwrap en /var/run/fcgiwrap.socket, propiedad del usuario y grupo nginx.
Ahora abre tu archivo de configuración de vhost…
vi /etc/nginx/conf.d/www.example.com.vhost… y agrega una sección location /cgi-bin {} al contenedor server {}:
| server { [...] location /cgi-bin/ { # Desactivar gzip (hace que los scripts se sientan más lentos ya que tienen que completarse # antes de ser comprimidos) gzip off; # Establecer la raíz en /usr/lib (dentro de esta ubicación esto significa que estamos # dando acceso a los archivos bajo /usr/lib/cgi-bin) root /var/www/www.example.com; # Socket de Fastcgi fastcgi_pass unix:/var/run/fcgiwrap.socket; # Parámetros de Fastcgi, incluye los estándar include /etc/nginx/fastcgi_params; # Ajustar parámetros no estándar (SCRIPT_FILENAME) fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } [...] } |
Recarga nginx:
systemctl reload nginx.serviceA continuación, creamos nuestro directorio cgi-bin - /var/www/www.example.com/cgi-bin porque definimos root /var/www/www.example.com; en el contenedor location /cgi-bin {}:
mkdir /var/www/www.example.com/cgi-binAhora colocamos nuestros scripts CGI en él y los hacemos ejecutables. Para fines de prueba, crearé un pequeño script Perl Hello World (en lugar de hello_world.cgi también puedes usar la extensión .pl -> hello_world.pl):
vi /var/www/www.example.com/cgi-bin/hello_world.cgi| #!/usr/bin/perl -w # Indicar a perl que envíe un encabezado html. # Así tu navegador recibe la salida # en lugar de |Hola mundo
\n";
chmod 755 /var/www/www.example.com/cgi-bin/hello_world.cgiAbre un navegador y prueba el script:
http://www.example.com/cgi-bin/hello_world.cgiSi todo va bien, deberías obtener la siguiente salida:

4 Enlaces
- Nginx: http://nginx.org/
- Wiki de Nginx: http://wiki.nginx.org/
- Thttpd: http://acme.com/software/thttpd/
- nginx ThttpdCGI: http://wiki.nginx.org/ThttpdCGI
- nginx Fcgiwrap: http://wiki.nginx.org/Fcgiwrap
Acerca del Autor
Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultra-rápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los desarrolladores principales de ISPConfig (desde 2000). También ha contribuido al libro de O’Reilly “Administración de Sistemas Linux”.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.