Comment exécuter des scripts CGI sur Nginx ?

Publié 20 janvier 2026

Problème : Exécuter des scripts CGI sur Nginx

L'exécution de scripts CGI sur Nginx peut être complexe en raison de la conception de Nginx, qui diffère des autres serveurs web. Nginx ne prend pas en charge CGI par défaut, il faut donc configurer des modules supplémentaires pour exécuter correctement les scripts CGI.

La solution : Utiliser FastCGI avec Nginx

Configuration de FastCGI pour les scripts Perl

Pour exécuter des scripts CGI sur Nginx, vous devez utiliser FastCGI. Cette méthode est plus performante que CGI traditionnel et fonctionne bien avec l'architecture de Nginx. Voici comment la configurer :

  1. Installer les paquets : Installez les logiciels requis. Sur CentOS, utilisez cette commande :

    sudo yum install nginx fcgi-perl spawn-fcgi
  2. Configurer Nginx pour FastCGI : Modifiez votre fichier de configuration Nginx (généralement situé dans /etc/nginx/nginx.conf) pour inclure la prise en charge de FastCGI. Ajoutez ces lignes dans le bloc server :

    location ~ \.pl$ {
       fastcgi_pass unix:/var/run/fcgiwrap.socket;
       include fastcgi_params;
    }
  3. Créer un script wrapper pour votre CGI Perl : Créez un script wrapper pour exécuter votre script CGI Perl. Enregistrez-le sous /usr/local/bin/perl-cgi-wrapper :

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

    Définissez les permissions appropriées :

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

En suivant ces étapes, vous disposerez de la configuration de base pour exécuter des scripts CGI Perl sur Nginx avec FastCGI. Cette approche permet à Nginx de traiter les requêtes CGI de manière performante tout en conservant ses avantages en termes de performances.

Conseil: Optimiser les performances de FastCGI

Pour améliorer les performances de FastCGI, ajustez le nombre de processus FastCGI en fonction des ressources de votre serveur et du trafic. Ajoutez la ligne suivante à votre configuration Nginx :

fastcgi_keep_conn on;

Cela maintient la connexion entre Nginx et FastCGI ouverte, réduisant ainsi la charge pour plusieurs requêtes.

Configurer Nginx pour FastCGI

Modifier le fichier de configuration Nginx

Pour configurer Nginx pour FastCGI, vous devez modifier le fichier de configuration Nginx. Ce fichier se trouve souvent dans /etc/nginx/nginx.conf. Voici comment procéder :

  1. Ajouter un bloc location pour les scripts CGI : Ouvrez le fichier de configuration Nginx et ajoutez ce bloc dans la section server :

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

    Ce bloc indique à Nginx de traiter tous les fichiers se terminant par .cgi en utilisant FastCGI.

  2. Configurer les paramètres FastCGI : Dans le même fichier, ajoutez ou modifiez la section fastcgi_params :

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

    Ces paramètres transmettent les informations nécessaires au processus FastCGI.

  3. Configurer le socket FastCGI : Ajoutez cette ligne dans la section http de votre configuration Nginx :

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

    Cela définit le socket que Nginx utilisera pour communiquer avec le processus FastCGI.

Après avoir effectué ces modifications, enregistrez le fichier et redémarrez Nginx pour appliquer les nouveaux paramètres :

sudo systemctl restart nginx

Avec ces modifications, Nginx est maintenant configuré pour fonctionner avec FastCGI pour traiter les scripts CGI.

Conseil: Vérifier la configuration FastCGI

Après avoir configuré Nginx pour FastCGI, il est recommandé de vérifier que la configuration est correcte. Vous pouvez utiliser la commande suivante pour tester la configuration Nginx et détecter les erreurs de syntaxe :

sudo nginx -t

Si la configuration est correcte, vous verrez un message indiquant « nginx: configuration file /etc/nginx/nginx.conf test is successful ». S'il y a des erreurs, la commande indiquera les problèmes spécifiques dans votre fichier de configuration.

Exécuter le processus FastCGI

Démarrer le processus FastCGI manuellement

Pour démarrer le processus FastCGI manuellement, utilisez la commande spawn-fcgi :

  1. Exécutez cette commande :
sudo spawn-fcgi -u nginx -g nginx -s /var/run/fcgiwrap.socket -P /var/run/fcgiwrap.pid -F 1 -- /usr/sbin/fcgiwrap

Cette commande démarre le processus FastCGI avec l'utilisateur et le groupe nginx, crée un fichier socket et définit le chemin vers le binaire fcgiwrap.

  1. Vérifiez que le processus est en cours d'exécution :
ps aux | grep fcgiwrap

Vous devriez voir le processus fcgiwrap dans le résultat.

Automatiser le processus FastCGI

Pour démarrer automatiquement le processus FastCGI au démarrage de votre système, créez un fichier de service et activez-le.

  1. Créer un fichier de service :

Créez un nouveau fichier nommé fcgiwrap.service dans le répertoire /etc/systemd/system/ :

sudo nano /etc/systemd/system/fcgiwrap.service
  1. Ajoutez ce contenu au fichier :
[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. Enregistrez le fichier et quittez l'éditeur.

  2. Rechargez le daemon systemd pour reconnaître le nouveau service :

sudo systemctl daemon-reload
  1. Activez le service pour qu'il démarre au démarrage :
sudo systemctl enable fcgiwrap
  1. Démarrez le service :
sudo systemctl start fcgiwrap

Maintenant, le processus FastCGI démarrera automatiquement au démarrage de votre système, et vous pouvez le gérer à l'aide de commandes systemctl comme start, stop et restart.

Conseil: Surveiller le processus FastCGI

Pour suivre l'état du processus FastCGI, utilisez la commande systemctl status :

sudo systemctl status fcgiwrap

Cela affichera si le processus est actif, quand il a démarré et les messages de log récents. C'est un bon moyen de vérifier si le processus fonctionne correctement ou s'il y a des problèmes.

Tester votre configuration CGI

Pour vérifier que votre configuration CGI fonctionne, vous pouvez créer un script CGI de test et l'ouvrir dans un navigateur web. Voici comment :

  1. Créer un script CGI de test :

Créez un nouveau fichier nommé test.cgi dans le répertoire CGI de votre serveur web (souvent /usr/share/nginx/html/cgi-bin/) :

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

Ajoutez ce contenu au fichier :

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>Script de test CGI</h1>";
print "<p>Si vous voyez ceci, votre configuration CGI fonctionne !</p>";
print "</body></html>";

Enregistrez le fichier et quittez l'éditeur.

  1. Définir les permissions appropriées :

Rendez le script exécutable :

sudo chmod +x /usr/share/nginx/html/cgi-bin/test.cgi
  1. Ouvrir le script dans un navigateur web :

Utilisez un navigateur web et entrez l'URL de votre serveur suivi du chemin vers le script CGI. Par exemple :

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

Si la configuration est correcte, vous devriez voir une page web avec le message « Si vous voyez ceci, votre configuration CGI fonctionne ! »

En cas de problème :

  • Consultez le log d'erreurs Nginx pour tout message d'erreur :

    sudo tail -f /var/log/nginx/error.log
  • Assurez-vous que le processus FastCGI est en cours d'exécution :

    sudo systemctl status fcgiwrap
  • Vérifiez les permissions de fichier et la propriété du script CGI.

En exécutant ce script de test, vous pouvez confirmer que votre serveur Nginx est configuré pour traiter les scripts CGI en utilisant FastCGI.

Conseil: Déboguer les scripts CGI

Si votre script CGI ne fonctionne pas comme prévu, vous pouvez ajouter des informations de débogage pour identifier le problème. Modifiez votre script test.cgi pour inclure les variables d'environnement :

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>Script de test CGI</h1>";
print "<p>Si vous voyez ceci, votre configuration CGI fonctionne !</p>";
print "<h2>Variables d'environnement :</h2>";
print "<ul>";
foreach $key (sort keys %ENV) {
    print "<li><strong>$key:</strong> $ENV{$key}</li>";
}
print "</ul>";
print "</body></html>";

Ce script affichera toutes les variables d'environnement, ce qui peut vous aider à comprendre comment votre script CGI est exécuté et quelles informations sont disponibles.