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-devel

Ahora 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 install

Esto 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-fcgi

Abre /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.service

Ahora 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.service

A 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-bin

Ahora 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 (línea de comandos # en el servidor.) print "Content-type: text/html\n\n"; # imprimir tus etiquetas html básicas. # y el contenido de ellas. print "¡Hola Mundo!! \n"; print "

Hola mundo

\n"; |

chmod 755 /var/www/www.example.com/cgi-bin/hello_world.cgi

Abre un navegador y prueba el script:

http://www.example.com/cgi-bin/hello_world.cgi

Si todo va bien, deberías obtener la siguiente salida:

4 Enlaces

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”.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.