Afficher/cacher Sommaire
Comment exécuter des scripts CGI avec fcgiwrap
Origine : Milosz Galazka sur 18 septembre 2017
FastCGI
Installez le paquet fcgiwrap .
sudo apt-get install fcgiwrap
Le service sera lancé immédiatement.
systemctl status fcgiwrap.service
● fcgiwrap.service - Simple CGI Server
Loaded: loaded (/lib/systemd/system/fcgiwrap.service; indirect; vendor preset: enabled)
Active: active (running) since Wed 2019-09-04 09:55:16 CEST; 13s ago
Main PID: 3880 (fcgiwrap)
Tasks: 1 (limit: 4915)
Memory: 364.0K
CGroup: /system.slice/fcgiwrap.service
└─3880 /usr/sbin/fcgiwrap -f
sept. 04 09:55:16 srvxo systemd[1]: Started Simple CGI Server.
systemctl status fcgiwrap.socket
● fcgiwrap.socket - fcgiwrap Socket
Loaded: loaded (/lib/systemd/system/fcgiwrap.socket; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-09-04 09:55:16 CEST; 39s ago
Listen: /run/fcgiwrap.socket (Stream)
Tasks: 0 (limit: 4915)
Memory: 0B
CGroup: /system.slice/fcgiwrap.socket
sept. 04 09:55:16 srvxo systemd[1]: Listening on fcgiwrap Socket.
Le service sera automatiquement configuré pour démarrer automatiquement.
systemctl is-enabled fcgiwrap.service
indirect
systemctl is-enabled fcgiwrap.socket
enabled
Les fichiers de configuration de l’unité systemd sont très simples et directs.
cat /lib/systemd/system/fcgiwrap.socket
[Unit]
Description=fcgiwrap Socket
[Socket]
ListenStream=/run/fcgiwrap.socket
[Install]
WantedBy=sockets.target
cat /lib/systemd/system/fcgiwrap.service
[Unit]
Description=Simple CGI Server
After=nss-user-lookup.target
Requires=fcgiwrap.socket
[Service]
Environment=DAEMON_OPTS=-f
EnvironmentFile=-/etc/default/fcgiwrap
ExecStart=/usr/sbin/fcgiwrap ${DAEMON_OPTS}
User=www-data
Group=www-data
[Install]
Also=fcgiwrap.socket
Lisez la page de manuel fcgiwrap pour définir ou modifier les processus de numérotation à préforger et une URL à laquelle le socket d’écoute doit se lier.
Installer et configurer nginx
Installez le paquet nginx .
sudo apt-get install --no-install-recommends nginx
Désactiver le site nginx par défaut.
sudo unlink /etc/nginx/sites-enabled/default
Utiliser un seul script CGI
Créer le répertoire racine du document.
sudo mkdir -p /var/www/localhost/
Définissez le propriétaire et le groupe pour le répertoire racine du document.
sudo chown www-data:www-data /var/www/localhost/
Créer un script CGI.
$ cat << EOF | sudo tee /var/www/localhost/index.cgi
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<html>"
echo "<head>"
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"
echo "<title>Bash CGI script</title>"
echo "</head>"
echo "<body>"
echo "<p>Hello, Your IP address is \$REMOTE_ADDR</p>"
echo "<pre>"
env
echo "</pre>"
echo "</body>"
echo "</html>"
exit 0
EOF
Définissez le propriétaire et le groupe pour le script CGI créé.
sudo chown www-data:www-data /var/www/localhost/index.cgi
Définir le bit exécutable.
sudo chmod +x /var/www/localhost/index.cgi
Préparez la configuration de l’hôte virtuel nginx .
$ cat << EOF | sudo tee /etc/nginx/sites-available/cgi.example.org
server {
listen 80 default_server;
server_name default;
location / {
index index.cgi;
root /var/www/localhost;
}
location /index.cgi {
root /var/www/localhost;
fastcgi_intercept_errors on;
include fastcgi_params;
#fastcgi_param DOCUMENT_ROOT \$document_root;
#fastcgi_param SCRIPT_NAME \$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
}
EOF
Activer l’hôte virtuel.
sudo ln -s /etc/nginx/sites-available/cgi.example.org /etc/nginx/sites-enabled/
Rechargez la configuration du serveur HTTP.
sudo systemctl reload nginx
Ouvrez le navigateur Web et pointez sur le serveur HTTP configuré.
Utiliser plusieurs scripts CGI
Créez le répertoire cgi-bin .
sudo mkdir -p /usr/lib/cgi-bin
Définissez le propriétaire et le groupe pour le répertoire cgi-bin .
sudo chown www-data:www-data /usr/lib/cgi-bin
Créer un script CGI.
$ cat << EOF | sudo tee /usr/lib/cgi-bin/bashcgiscript.cgi
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<html>"
echo "<head>"
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"
echo "<title>Bash CGI script</title>"
echo "</head>"
echo "<body>"
echo "<p>Hello, Your IP address is \$REMOTE_ADDR</p>"
echo "<pre>"
env
echo "</pre>"
echo "</body>"
echo "</html>"
exit 0
EOF
Définissez le propriétaire et le groupe pour le script CGI créé.
sudo chown www-data:www-data /usr/lib/cgi-bin/bashcgiscript.cgi
Définir le bit exécutable.
sudo chmod +x /usr/lib/cgi-bin/bashcgiscript.cgi
Copiez la configuration nginx par défaut pour l’emplacement /cgi-bin/
sudo cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf
Préparez la configuration de l’hôte virtuel nginx .
$ cat << EOF | sudo tee /etc/nginx/sites-available/cgi.example.org
server {
listen 80 default_server;
server_name default;
include fcgiwrap.conf;
location / {
index index.html;
root /var/www/;
}
}
EOF
Activer l’hôte virtuel.
sudo ln -s /etc/nginx/sites-available/cgi.example.org /etc/nginx/sites-enabled/
Rechargez la configuration du serveur HTTP.
sudo systemctl reload nginx
Ouvrez le navigateur Web et pointez sur le /cgi-bin/bashcgiscript.cgi CGI script sur le serveur HTTP configuré.
Notes complémentaires
Il s’agit de la configuration par défaut de l’emplacement cgi-bin utilisé dans l’exemple précédent.
cat /usr/share/doc/fcgiwrap/examples/nginx.conf
# Include this file on your nginx.conf to support debian cgi-bin scripts using
# fcgiwrap
location /cgi-bin/ {
# Disable gzip (it makes scripts feel slower since they have to complete
# before getting gzipped)
gzip off;
# Set the root to /usr/lib (inside this location this means that we are
# giving access to the files under /usr/lib/cgi-bin)
root /usr/lib;
# Fastcgi socket
fastcgi_pass unix:/var/run/fcgiwrap.socket;
# Fastcgi parameters, include the standard ones
include /etc/nginx/fastcgi_params;
# Adjust non standard parameters (SCRIPT_FILENAME)
fastcgi_param SCRIPT_FILENAME /usr/lib$fastcgi_script_name;
}