Outils pour utilisateurs

Outils du site


lumo:configurer_debian_nginx_pour_executer_des_scripts_cgi_bash:accueil

Debian : configurer nginx pour exécuter des scripts cgi bash

Introduction

Configurer Nginx sur Debian pour exécuter des scripts CGI Bash est une tâche réalisable, mais elle nécessite quelques étapes spécifiques car Nginx ne gère pas le CGI nativement comme Apache. Il faut utiliser un interpréteur externe, généralement fcgiwrap.

1. Installer les dépendances

Vous devez installer fcgiwrap (qui permet à Nginx de communiquer avec les scripts via FastCGI) et spawn-fcgi (pour lancer le processus fcgiwrap).

sudo apt update
sudo apt install fcgiwrap spawn-fcgi

2. Configurer le service fcgiwrap

Sur Debian, fcgiwrap est souvent configuré pour s'exécuter via un socket Unix. Assurez-vous que le service est activé et démarré.

sudo systemctl enable fcgiwrap.socket
sudo systemctl start fcgiwrap.socket

Vérifiez que le socket existe (généralement /var/run/fcgiwrap.socket) :

ls -l /var/run/fcgiwrap.socket

Note : Si le fichier n'existe pas ou si le service échoue, redémarrez-le avec sudo systemctl restart fcgiwrap.socket.

3. Préparer le répertoire des scripts CGI

Créez un répertoire pour vos scripts (par exemple /usr/lib/cgi-bin) et assurez-vous qu'il est accessible par l'utilisateur www-data (celui qui tourne Nginx).

sudo mkdir -p /usr/lib/cgi-bin
sudo chown www-data:www-data /usr/lib/cgi-bin
sudo chmod 755 /usr/lib/cgi-bin

Créez un script de test pour vérifier que tout fonctionne :

sudo nano /usr/lib/cgi-bin/test.sh

Collez ce contenu :

#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<html><body>"
echo "<h1>Ceci est un script CGI Bash !</h1>"
echo "<p>Date : $(date)</p>"
echo "</body></html>"

Rendez le script exécutable :

sudo chmod +x /usr/lib/cgi-bin/test.sh

4. Configurer Nginx

Modifiez votre configuration de site (souvent dans /etc/nginx/sites-available/default ou un fichier spécifique dans /etc/nginx/sites-available/).

Ajoutez ou modifiez le bloc server pour inclure la gestion du CGI :

server {
    listen 80 default_server;
    listen [::]:80 default_server;
 
    root /var/www/html;
    index index.html index.htm;
 
    server_name _;
 
    # ... autres configurations ...
 
    # Configuration pour les scripts CGI
    location /cgi-bin/ {
        # Autorise l'exécution de scripts
        gzip off;
 
        # Utilise fastcgi_pass pour pointer vers le socket fcgiwrap
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
 
        # Inclut les paramètres standards de FastCGI
        include fastcgi_params;
 
        # Définit le script à exécuter
        fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin$fastcgi_script_name;
 
        # Important : Force l'interprétation en tant que CGI
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
 
        # Sécurité : Vérifie que le fichier existe avant d'exécuter
        try_files $uri =404;
    }
 
    # Pour les fichiers statiques normaux
    location / {
        try_files $uri $uri/ =404;
    }
}

Points clés de la configuration :

  • fastcgi_pass unix:/var/run/fcgiwrap.socket; : Connecte Nginx au démon fcgiwrap.
  • SCRIPT_FILENAME : Indique le chemin complet du script sur le disque.
  • try_files $uri =404; : Empêche Nginx d'essayer d'exécuter un fichier qui n'existe pas, évitant des erreurs 500 inutiles.

5. Tester et redémarrer Nginx

Vérifiez la syntaxe de la configuration :

sudo nginx -t

Si tout est correct, redémarrez Nginx :

sudo systemctl reload nginx

Warning

Ouvrez votre navigateur et accédez à : http://votre-ip/cgi-bin/test.sh

Vous devriez voir la page HTML générée par votre script Bash.

Dépannage courant

  • Erreur 502 Bad Gateway : Souvent dû au fait que fcgiwrap n'est pas en cours d'exécution ou que le socket n'est pas accessible. Vérifiez avec systemctl status fcgiwrap.socket.
  • Erreur 403 Forbidden : Problème de permissions. Assurez-vous que le script est exécutable (chmod +x) et que le propriétaire du fichier ou du dossier est bien www-data ou accessible par lui.
  • Erreur 500 Internal Server Error : Vérifiez les logs d'erreur de Nginx (/var/log/nginx/error.log) et les logs de fcgiwrap. Souvent, c'est un problème de shebang (#!/bin/bash) ou de sortie manquante des en-têtes HTTP (Content-type: …).

Cette méthode est la plus robuste sous Debian pour faire tourner du CGI avec Nginx aujourd'hui.

lumo/configurer_debian_nginx_pour_executer_des_scripts_cgi_bash/accueil.txt · Dernière modification : de estro

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki