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-develOra possiamo compilare fcgiwrap come segue:
cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make installQuesto 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-fcgiApri /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.serviceOra 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.serviceSuccessivamente 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-binOra 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 |Hello world
\n";
chmod 755 /var/www/www.example.com/cgi-bin/hello_world.cgiApri un browser e testa lo script:
http://www.example.com/cgi-bin/hello_world.cgiSe tutto va bene, dovresti ottenere il seguente output:

4 Link
- Nginx: http://nginx.org/
- Nginx Wiki: http://wiki.nginx.org/
- Thttpd: http://acme.com/software/thttpd/
- nginx ThttpdCGI: http://wiki.nginx.org/ThttpdCGI
- nginx Fcgiwrap: http://wiki.nginx.org/Fcgiwrap
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”.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.