2010/02/10

Cgit et autres cgi dans nginx

Jusqu'a présent pour avoir cgit je passais pas par la méthode thttpd.

Ça ne marchait pas trop mal, mais bon ça ne me plaisait pas trop de faire tourner un serveur web complet derrière mon nginx

Et puis pour je ne sais plus quelle raison, j'étais obligé d'utiliser un virtual-root=/cgit/ qui ne me plaisait pas beaucoup plus.

Aujourd'hui dans mes recherches, je tombe sur : fcgiwrap, je récupère donc le tout :

$ git clone git://github.com/gnosek/fcgiwrap.git

Je modifie le Makefile pour y ajouter -I/usr/local/include et -I/usr/local/lib afin que gcc puisse trouver fcgi comme il faut. Et j'install le tout :

$ install -m 755 -o root -g wheel fcgiwrap /usr/local/bin

pour lancer les fastcgi, j'utilise spawn-fcgi, et pour les avoir au démarrage ma méthode est un peu gruik mais ça marche :

$ cd /usr/local/etc/rc.d
$ sed -e 's/fcgi/fcgiwrap/g' spawn-fcgi > spawn-fcgiwrap-tmp
$ sed -e 's|/usr/local/bin/spawn-fcgiwrap|/usr/local/bin/spawn-fcgi|' spawn-fcgiwrap-tmp > spawn-fcgiwrap
$ chmod 555 spawn-fcgiwrap
$ rm spawn-fcgiwrap-tmp

Puis dans /etc/rc.conf

spawn-fcgiwrap_enable="YES"
spawn_fcgiwrap_app="/usr/local/bin/fcgiwrap"
spawn_fcgiwrap_bindsocket="/tmp/fcgiwrap.sock"

Enfin pour finir je configure comme suis le nginx :

server {
	access_log /var/log/nginx/git.access.log main;
	server_name git.*;
	location / {
		rewrite ^/(.*)$ /cgit.cgi/$1 break;
		include fastcgi_params;
		root /usr/local/www/cgit;
		fastcgi_param SCRIPT_NAME /cgit.cgi;
		fastcgi_pass unix:/tmp/fcgiwrap.sock;
	}

	location ~ \.(png|css)$ {
		root /usr/local/www/cgit;
	}
}

Dans le /usr/local/etc/cgitrc il faut mettre : virtual-root=/

Le résultat est

Name :
URL (optional) :
Write here: "ETOOMUCHSPAM"
Comments :