Pour faire court, on va mettre en place un démon permettant à nginx d'appeler et executer un script perl, comme avec php-cgi.

ici, j'en ai besoin car j'utilise Awstats, mais ayant viré Apache et utilisant uniquement Nginx en serveur http, je ne peux du coup pas lire les stats :(

On va d'abord avoir besoin de quelques paquets perl pour faire tourner notre demon. :

perl -MCPAN -e shell
install FCGI
install FCGI::ProcManager

On se rend maintenant sur le wiki de Nginx, et on recopie le code du script perl (donc de #!perl à à dernière } ) dans le cadre blanc.
On colle ce code dans le fichier /usr/local/bin/cgiwrap-fcgi.pl puis on le rend executable

cd /usr/local/bin
nano cgiwrap-fcgi.pl
chmod +x ./cgiwrap-fcgi.pl

Ce code représente le démon qui va tourner en permanence; et créer une socket à laquelle nginx va se connecter pour exécuter un script perl.

Il nous faut maintenant un script d'init pour lancer et arrêter ce démon. Pour me simplifier la vie, j'ai repris celui de php-cgi et adapté, vous pouvez le télécharger ici
On l'installe dans /etc/init.d, on le rend exécutable et on fait en sorte qu'il se lance au démarrage :

wget http://blog.crifo.org/public/201007/perl-fcgi.zip
unzip ./perfl-fcgi.zip
rm ./perl-fcgi.zip
mv ./perl-fcgi /etc/init.d
chmod +x /etc/init.d/perl-fcgi
update-rc.d -f perl-fcgi defaults

A présent, il faut créer le fichier /etc/default/perl-fcgi dans lequel on va indiquer quelques options :

# start daemon ?
START=yes
# which user runs the daemon ?
EXEC_AS_USER=www-data

Puis il nous faut créer le dossier dans lequel sera créée la socket, et lui donner les bons droits pour que Nginx puisse y accéder :

cd /var/run/
mkdir nginx
chown www-data ./nginx

on indique à Nginx que faire quand on appelle un script perl.
On édite le fichier correspondant à notre host, généralement dans /etc/nginx/sites-enabled/monsite
Dans la section commençant par "server {", on rajoute ceci

# cgi perl
location ~ ^/.*\.pl$ {
  gzip off;
  fastcgi_pass  unix:/var/run/nginx/cgiwrap-dispatch.sock;
  fastcgi_index index.cgi;
  fastcgi_param SCRIPT_FILENAME /var/www/monsite$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;
  fastcgi_param GATEWAY_INTERFACE  CGI/1.1;
  fastcgi_param SERVER_SOFTWARE    nginx;
  fastcgi_param SCRIPT_NAME        $fastcgi_script_name;
  fastcgi_param REQUEST_URI        $request_uri;
  fastcgi_param DOCUMENT_URI       $document_uri;
  fastcgi_param DOCUMENT_ROOT      $document_root;
  fastcgi_param SERVER_PROTOCOL    $server_protocol;
  fastcgi_param REMOTE_ADDR        $remote_addr;
  fastcgi_param REMOTE_PORT        $remote_port;
  fastcgi_param SERVER_ADDR        $server_addr;
  fastcgi_param SERVER_PORT        $server_port;
  fastcgi_param SERVER_NAME        $server_name;
}

pour ceux qui on awstats, il faut rajouter aussi ceci ;)

location /awstats-icon/ {
  alias /usr/share/awstats/icon/;
}

Enfin, on créé un alias pour accéder aux scripts dans cgi-bin (surtout pour awstats, mais si vous avez des scripts perls directement dans le dossier de votre site, pas besoin )

cd /var/www/monsite
ln -s /usr/lib/cgi-bin ./cgi-bin

Et voila, c'est fini ! :D

On peut donc maintenant lancer le démon perl :

/etc/init.d/perl-fcgi start

ou l'arrêter :

/etc/init.d/perl-fcgi stop

et savoir si il tourne ou non

/etc/init.d/perl-fcgi status