Nginx CGI · 2 min read · Jan 23, 2026

Servire script CGI con Nginx su Fedora 18 - Pagina 2

3 Utilizzo di Fcgiwrap

Fcgiwrap è un wrapper CGI che può essere utilizzato per ambienti di hosting condivisi perché consente a ciascun vhost di utilizzare la propria directory cgi-bin.

Poiché non esiste un pacchetto fcgiwrap per Fedora, dobbiamo compilarlo noi stessi. Prima installiamo alcune dipendenze:

yum groupinstall 'Development Tools'
yum install fcgi-devel

Ora possiamo compilare fcgiwrap come segue:

cd /usr/local/src/  
git clone git://github.com/gnosek/fcgiwrap.git  
cd fcgiwrap  
autoreconf -i  
./configure  
make  
make install

Questo installa fcgiwrap in /usr/local/sbin/fcgiwrap.

Successivamente installiamo il pacchetto spawn-fcgi che ci consente di eseguire fcgiwrap come un demone:

yum install spawn-fcgi

Apri /etc/sysconfig/spawn-fcgi…

vi /etc/sysconfig/spawn-fcgi

… e modifica il file come segue:

| # Devi impostare alcune opzioni di lavoro prima che il servizio "spawn-fcgi" funzioni. # Se SOCKET punta a un file, questo file viene pulito dallo script di init. # # Vedi spawn-fcgi(1) per tutte le opzioni possibili. # # Esempio : #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 i collegamenti di avvio del sistema per spawn-fcgi…

systemctl enable spawn-fcgi.service

… e avvialo come segue:

systemctl start spawn-fcgi.service

Ora dovresti trovare il socket fcgiwrap in /var/run/fcgiwrap.socket, di proprietà dell’utente e del gruppo nginx.

Ora apri il tuo file di configurazione vhost…

vi /etc/nginx/conf.d/www.example.com.vhost

… e aggiungi una sezione location /cgi-bin {} al contenitore server {}:

| server { [...] location /cgi-bin/ { # Disabilita gzip (rende gli script più lenti poiché devono completare # prima di essere compressi) gzip off; # Imposta la radice su /usr/lib (all'interno di questa posizione significa che stiamo # dando accesso ai file sotto /usr/lib/cgi-bin) root /var/www/www.example.com; # Socket Fastcgi fastcgi_pass unix:/var/run/fcgiwrap.socket; # Parametri Fastcgi, includi quelli standard include /etc/nginx/fastcgi_params; # Regola i parametri non standard (SCRIPT_FILENAME) fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } [...] } |

Ricarica nginx:

systemctl reload nginx.service

Successivamente creiamo la nostra directory cgi-bin - /var/www/www.example.com/cgi-bin perché abbiamo definito root /var/www/www.example.com; nel contenitore location /cgi-bin {}:

mkdir /var/www/www.example.com/cgi-bin

Ora posizioniamo i nostri script CGI in essa e rendiamoli eseguibili. A scopo di test creerò un piccolo script Perl Hello World (anziché hello_world.cgi puoi anche usare l’estensione .pl -> hello_world.pl):

vi /var/www/www.example.com/cgi-bin/hello_world.cgi

| #!/usr/bin/perl -w # Dì a perl di inviare un'intestazione html. # Così il tuo browser riceve l'output # piuttosto che (linea di comando # sul server.) print "Content-type: text/html\n\n"; # stampa i tuoi tag html di base. # e il contenuto di essi. print "Hello World!! \n"; print "

Hello world

\n"; |

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

Apri un browser e testa lo script:

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

Se tutto va bene, dovresti ottenere il seguente output:

4 Link

Informazioni sull’autore

Falko Timme è il proprietario di Timme Hosting (hosting web nginx ultra-veloce). È il principale manutentore di HowtoForge (dal 2005) e uno dei core developer di ISPConfig (dal 2000). Ha anche contribuito al libro di O’Reilly “Linux System Administration”.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.