Come eseguire script CGI su Nginx?

Pubblicato 20 gennaio 2026

Problema: Eseguire Script CGI su Nginx

Eseguire script CGI su Nginx può essere difficile a causa della struttura di Nginx, che è diversa da quella di altri web server. Nginx non supporta CGI in modo nativo, quindi è necessario configurare moduli e impostazioni aggiuntive per eseguire correttamente gli script CGI.

La Soluzione: Utilizzare FastCGI con Nginx

Configurare FastCGI per Script Perl

Per eseguire script CGI su Nginx, è necessario utilizzare FastCGI. Questo metodo è più efficiente del CGI tradizionale e funziona bene con l'architettura di Nginx. Ecco come configurarlo:

  1. Installare i pacchetti: Installare il software richiesto. Su CentOS, utilizzare questo comando:

    sudo yum install nginx fcgi-perl spawn-fcgi
  2. Configurare Nginx per FastCGI: Modificare il file di configurazione di Nginx (solitamente in /etc/nginx/nginx.conf) per includere il supporto FastCGI. Aggiungere queste righe all'interno del blocco server:

    location ~ \.pl$ {
       fastcgi_pass unix:/var/run/fcgiwrap.socket;
       include fastcgi_params;
    }
  3. Creare uno script wrapper per il CGI Perl: Creare uno script wrapper per eseguire lo script CGI Perl. Salvare questo file come /usr/local/bin/perl-cgi-wrapper:

    #!/bin/sh
    exec /usr/bin/perl $1

    Impostare i permessi corretti:

    sudo chmod +x /usr/local/bin/perl-cgi-wrapper

Seguendo questi passaggi, avrai la configurazione di base per eseguire script CGI Perl su Nginx utilizzando FastCGI. Questo approccio consente a Nginx di gestire le richieste CGI in modo efficiente mantenendo i suoi vantaggi in termini di prestazioni.

Suggerimento: Ottimizzare le Prestazioni FastCGI

Per migliorare le prestazioni di FastCGI, regola il numero di processi FastCGI in base alle risorse del server e al traffico. Aggiungi la seguente riga alla configurazione di Nginx:

fastcgi_keep_conn on;

Questo mantiene aperta la connessione tra Nginx e FastCGI, riducendo l'overhead per richieste multiple.

Configurare Nginx per FastCGI

Modificare il File di Configurazione di Nginx

Per configurare Nginx per FastCGI, è necessario modificare il file di configurazione di Nginx. Questo file si trova spesso in /etc/nginx/nginx.conf. Ecco come procedere:

  1. Aggiungere un blocco location per gli script CGI: Aprire il file di configurazione di Nginx e aggiungere questo blocco nella sezione server:

    location ~ \.cgi$ {
       fastcgi_pass unix:/var/run/fcgiwrap.socket;
       fastcgi_index index.cgi;
       include fastcgi_params;
    }

    Questo blocco indica a Nginx di processare tutti i file che terminano con .cgi utilizzando FastCGI.

  2. Configurare i parametri FastCGI: Nello stesso file, aggiungere o modificare la sezione fastcgi_params:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param QUERY_STRING    $query_string;

    Questi parametri passano le informazioni necessarie al processo FastCGI.

  3. Configurare il socket FastCGI: Aggiungere questa riga alla sezione http della configurazione di Nginx:

    upstream fcgiwrap {
       server unix:/var/run/fcgiwrap.socket;
    }

    Questo definisce il socket che Nginx utilizzerà per comunicare con il processo FastCGI.

Dopo aver apportato queste modifiche, salvare il file e riavviare Nginx per applicare le nuove impostazioni:

sudo systemctl restart nginx

Con queste modifiche, Nginx è ora configurato per funzionare con FastCGI per l'elaborazione degli script CGI.

Suggerimento: Verificare la Configurazione FastCGI

Dopo aver configurato Nginx per FastCGI, è consigliabile verificare che la configurazione sia corretta. Puoi utilizzare il seguente comando per testare la configurazione di Nginx per eventuali errori di sintassi:

sudo nginx -t

Se la configurazione è corretta, vedrai un messaggio che dice "nginx: configuration file /etc/nginx/nginx.conf test is successful". Se ci sono errori, il comando indicherà i problemi specifici nel file di configurazione.

Eseguire il Processo FastCGI

Avviare Manualmente il Processo FastCGI

Per avviare manualmente il processo FastCGI, utilizzare il comando spawn-fcgi:

  1. Eseguire questo comando:
sudo spawn-fcgi -u nginx -g nginx -s /var/run/fcgiwrap.socket -P /var/run/fcgiwrap.pid -F 1 -- /usr/sbin/fcgiwrap

Questo comando avvia il processo FastCGI con l'utente e il gruppo nginx, crea un file socket e imposta il percorso del binario fcgiwrap.

  1. Verificare se il processo è in esecuzione:
ps aux | grep fcgiwrap

Dovresti vedere il processo fcgiwrap nell'output.

Automatizzare il Processo FastCGI

Per avviare automaticamente il processo FastCGI all'avvio del sistema, creare un file di servizio e abilitarlo.

  1. Creare un file di servizio:

Creare un nuovo file chiamato fcgiwrap.service nella directory /etc/systemd/system/:

sudo nano /etc/systemd/system/fcgiwrap.service
  1. Aggiungere questo contenuto al file:
[Unit]
Description=FastCGI wrapper
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/var/run/fcgiwrap.pid
ExecStart=/usr/bin/spawn-fcgi -u nginx -g nginx -s /var/run/fcgiwrap.socket -P /var/run/fcgiwrap.pid -F 1 -- /usr/sbin/fcgiwrap
ExecStop=/bin/kill -QUIT $MAINPID

[Install]
WantedBy=multi-user.target
  1. Salvare il file e uscire dall'editor.

  2. Ricaricare il daemon systemd per riconoscere il nuovo servizio:

sudo systemctl daemon-reload
  1. Abilitare il servizio per l'avvio automatico:
sudo systemctl enable fcgiwrap
  1. Avviare il servizio:
sudo systemctl start fcgiwrap

Ora, il processo FastCGI si avvierà automaticamente all'avvio del sistema e puoi gestirlo utilizzando i comandi systemctl come start, stop e restart.

Suggerimento: Monitorare il Processo FastCGI

Per monitorare lo stato del processo FastCGI, utilizza il comando systemctl status:

sudo systemctl status fcgiwrap

Questo mostrerà se il processo è attivo, quando è stato avviato e i messaggi di log recenti. È un buon modo per verificare se il processo funziona correttamente o se ci sono problemi.

Testare la Configurazione CGI

Per verificare se la configurazione CGI funziona, puoi creare uno script CGI di esempio e aprirlo in un browser web. Ecco come:

  1. Creare uno script CGI di esempio:

Creare un nuovo file chiamato test.cgi nella directory CGI del web server (spesso /usr/share/nginx/html/cgi-bin/):

sudo nano /usr/share/nginx/html/cgi-bin/test.cgi

Aggiungere questo contenuto al file:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>Script di Test CGI</h1>";
print "<p>Se puoi vedere questo, la tua configurazione CGI funziona!</p>";
print "</body></html>";

Salvare il file e uscire dall'editor.

  1. Impostare i permessi corretti:

Rendere lo script eseguibile:

sudo chmod +x /usr/share/nginx/html/cgi-bin/test.cgi
  1. Aprire lo script in un browser web:

Utilizzare un browser web e inserire l'URL del server seguito dal percorso dello script CGI. Per esempio:

http://ip_del_tuo_server/cgi-bin/test.cgi

Se configurato correttamente, dovresti vedere una pagina web con il messaggio "Se puoi vedere questo, la tua configurazione CGI funziona!"

Se riscontri problemi:

  • Controlla il log degli errori di Nginx per eventuali messaggi di errore:

    sudo tail -f /var/log/nginx/error.log
  • Assicurati che il processo FastCGI sia in esecuzione:

    sudo systemctl status fcgiwrap
  • Verifica i permessi e la proprietà del file dello script CGI.

Eseguendo questo script di test, puoi confermare che il tuo server Nginx è configurato per gestire script CGI utilizzando FastCGI.

Suggerimento: Debug degli Script CGI

Se lo script CGI non funziona come previsto, puoi aggiungere informazioni di debug per aiutare a identificare il problema. Modifica lo script test.cgi per includere le variabili d'ambiente:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>Script di Test CGI</h1>";
print "<p>Se puoi vedere questo, la tua configurazione CGI funziona!</p>";
print "<h2>Variabili d'Ambiente:</h2>";
print "<ul>";
foreach $key (sort keys %ENV) {
    print "<li><strong>$key:</strong> $ENV{$key}</li>";
}
print "</ul>";
print "</body></html>";

Questo script mostrerà tutte le variabili d'ambiente, il che può aiutarti a capire come viene eseguito lo script CGI e quali informazioni sono disponibili.