Pour utiliser Mailman avec Nginx, il n’y a aucunement besoin d’un serveur externe pour l’exécution CGI. Une configuration adaptée permet de se passer du serveur THTTPD, utilisé dans ce tutorial.

En premier lieu, lisez mon article traitant de l’exécution CGI/Perl sous Nginx et installez y le wrapper. Il reste  ensuite à configurer les deux logiciels.

Côté Nginx, toute la difficulté se situe dans le passage des arguments aux scripts CGI. Par ex :

URL : http://127.0.0.1/mailman/listinfo/my_mailing_list
URI pour Mailman : listinfo/my_mailing_list

Le script CGI listinfo est exécuté avec la variable d’environnement PATH_INFO utilisée pour passer les arguments, égale ici à /my_mailing_list. Bref, des rewrites rules bien conçues et une variable spécifique pour le module FastCGI et Mailman peut ensuite fonctionner à 100 %  grâce à Nginx.

Voici la directive de l’hôte :

server {
listen          80;
server_name     localhost;
root            /var/www/localhost/htdocs;

location /mailman/ {
 rewrite "^/mailman/$" http://$host/mailman/listinfo;

 set $script $fastcgi_script_name;
 set $args /;

 if ($request_uri ~ "^/mailman/(.[^\/]*){1}(.*)$" ) {
  set $script /$1;                             
  set $args $2;
 }

 fastcgi_pass   unix:/tmp/fcgi-perl.sock;
 fastcgi_param  SCRIPT_FILENAME /usr/lib/mailman/cgi-bin$script;
 fastcgi_param  PATH_INFO $args;
 include        fastcgi_params;
}

location /images/mailman/ {
 alias   /usr/lib/mailman/icons/;
}

eau de Mailman, les scripts CGI doivent être exécutés par l’utilisateur déclaré lors de sa compilation (option –with-cgi-gid du script configure). Si vous ne pouvez pas modifier cette valeur (ce qui est le cas avec une installation d’un package binaire), il faut modifier les droits sur la socket UNIX fcgi-perl.sock et ajouter l’utilisateur au groupe utilisé par Nginx.

Par exemple, sous Gentoo, je fixe le propriétaire de la socket à apache:nginx et j’ajoute l’utilisateur apache (mailman) au groupe nginx :

# ls -l fcgi-perl.sock
srw-rw---- 1 apache nginx 0 2009-10-06 11:53 fcgi-perl.sock

Rendez-vous ensuite sur http://127.0.0.1/mailman et cliquez sur une mailing list pour valider la configuration.