lumo:debian_configurer_nginx_pour_executer_des_scripts_cgi_bash_api_rest:accueil
Debian, configurer nginx pour exécuter des scripts cgi bash api rest
Intoduction
Comment configurer Nginx sur Debian pour exécuter des scripts CGI Bash dans le cadre d'une API REST.
Architecture recommandée
Nginx ne supporte pas nativement CGI comme Apache. Vous aurez besoin de fcgiwrap pour faire le pont entre Nginx et vos scripts Bash.
1. Installation des paquets nécessaires
sudo apt update sudo apt install nginx fcgiwrap spawn-fcgi
2. Configuration de fcgiwrap
Créez ou modifiez /etc/default/fcgiwrap :
FCGI_WRAP_OPTS="--socket /var/run/fcgiwrap.socket"
Créez le socket avec les bons permissions :
sudo mkdir -p /var/run/fcgiwrap sudo chown www-data:www-data /var/run/fcgiwrap
3. Configuration Nginx
Éditez votre fichier de configuration (ex: /etc/nginx/sites-available/api) :
server { listen 80; server_name api.votre-domaine.com; root /var/www/api; index index.cgi; # Scripts CGI location ~ \.cgi$ { fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; include fastcgi_params; } # Sécurité location / { try_files $uri $uri/ =404; } }
4. Exemple de script Bash REST API
Créez /var/www/api/users.cgi :
#!/bin/bash # En-têtes CGI echo "Content-Type: application/json" echo "" # Méthode HTTP METHOD="${REQUEST_METHOD:-GET}" case "$METHOD" in GET) echo '{"status": "success", "message": "Liste des utilisateurs"}' ;; POST) # Lire le corps de la requête read -r -n "$CONTENT_LENGTH" BODY echo "{\"status\": \"created\", \"body\": \"$BODY\"}" ;; *) echo '{"status": "error", "message": "Méthode non autorisée"}' ;; esac
Rendez-le exécutable :
sudo chmod +x /var/www/api/users.cgi sudo chown www-data:www-data /var/www/api/users.cgi
5. Démarrage du service
# Démarrer fcgiwrap sudo systemctl enable fcgiwrap sudo systemctl start fcgiwrap # Tester la configuration Nginx sudo nginx -t # Recharger Nginx sudo systemctl reload nginx
6. Points de sécurité importants
| Risque | Solution |
|---|---|
| Injection de commandes | Validez strictement tous les paramètres d'entrée |
| Accès non autorisé | Implémentez l'authentification dans vos scripts |
| Exposition de fichiers sensibles | Restreignez les permissions (chmod 750) |
| Logs sensibles | Ne journalisez pas les données sensibles |
| Timeout | Configurez des timeouts appropriés dans Nginx |
lumo/debian_configurer_nginx_pour_executer_des_scripts_cgi_bash_api_rest/accueil.txt · Dernière modification : de estro
