Table des matières
WIMS et NGINX
Wims fonctionne en tant que script CGI derrière un serveur Web. Habituellement, le serveur Web utilisé est Apache. Ce dernier est l'outil préconisé par WIMS, et pour lequel la configuration est automatique.
À titre expérimental, nous vous expliquons cependant ici une procédure pour faire fonctionner WIMS derrière un serveur Nginx.
Vous pouvez choisir 2 méthodes :
- créer un wrapper cgi
- ou utiliser Nginx comme proxy vers Apache
Méthode n°1 : le wrapper CGI
Nginx ne dispose pas nativement de cgi, il faut donc créer un wrapper cgi. Il existe là encore plusieurs méthodes. Pour ma part, j'ai opté après plusieurs essais pour celle qui me semble la plus simple. Elle est décrite ici : http://www.howtoforge.com/serving-cgi-scripts-with-nginx-on-debian-squeeze-ubuntu-11.04-p3
Commencez-donc par installer le package fcgiwrap :
apt-get install fcgiwrap
Créez ensuite un fichier /etc/nginx/conf.d/wims.conf
(ou si vous avez le dossier /etc/nginx/sites-enabled
avec symlinks vers /etc/nginx/sites-available
, un fichier /etc/nginx/sites-available/wims.conf
et son lien dans /etc/nginx/sites-enabled
) en y insérant ceci (remplacez “VOTRE_NOM_DE_DOMAINE” par votre nom de domaine):
- wims.conf
server { server_name VOTRE_NOM_DE_DOMAINE; error_log /var/log/nginx_wims_error.log; access_log /var/log/nginx_wims_access.log; location / { root /home/wims/public_html; index wims.cgi; } location ~ ^/wims.*$ { # Disable gzip (it makes scripts feel slower since they have to complete before getting gzipped) gzip off; # Set the root directory (we are giving access to the files under this location) root /home/wims/public_html; # Fastcgi socket fastcgi_pass unix:/var/run/fcgiwrap.socket; # Fastcgi parameters, include the standard ones fastcgi_param SCRIPT_FILENAME /home/wims/public_html/wims.cgi; include /etc/nginx/fastcgi_params; } }
(éventuellement, adaptez le chemin “include /etc/nginx/fastcgi_params;” pour qu'il pointe vers le bon emplacement du fichier fastcgi_params)
Créer les liens symboliques, dans le dossier public_html de wims (il devrait déjà y avoir un symlink wims.cgi → wims)
for s in gif html jpeg jpg png; do ln -s wims wims.$s; done
Relancez nginx:
/etc/init.d/nginx reload
Votre serveur WIMS devrait désormais être accessible à l'adresse que vous aurez défini avec “VOTRE_NOM_DE_DOMAINE”.
NB : si vous désirez modifier l'utilisateur utilisé par nginx (pour tous les domaines qu'il gère), procédez ainsi :
* votre fichier “nginx.conf” devra contenir ceci :
user votre_user;
* Et le script /etc/init.d/fcgiwrap devra contenir ceci (modifiez les lignes existantes):
FCGI_USER="votre_user" FCGI_GROUP="votre_user_group" FCGI_SOCKET_OWNER="votre_user" FCGI_SOCKET_GROUP="votre_user_group"
Relancez alors fastcgi et nginx (via l'administrateur):
/etc/init.d/fcgiwrap restart /etc/init.d/nginx reload
Variante pour systemd
Avec systemd, les scripts d'init sont dans /lib/systemd/system/
, pour laisser fcgiwrap intact (au cas où un autre voudrait l'utiliser) et créer un service dédié à wims, une fois installé fcgiwrap, ajouter deux fichiers (remplacer /var/www/wims
par le dossier de wims, on y place pid et socket pour que fcgiwrap n'ait pas de pbs de droits)
- /lib/systemd/system/wimsfcgiwrap.service
[Unit] Description=Simple CGI Server for wims After=nss-user-lookup.target Requires=wimsfcgiwrap.socket [Service] ExecStart=/usr/sbin/fcgiwrap PIDFile=/var/www/wims/wimsfcgiwrap.pid User=wims Group=wims [Install] Also=wimsfcgiwrap.socket
- /lib/systemd/system/wimsfcgiwrap.socket
[Unit] Description=fcgiwrap Socket for wims [Socket] ListenStream=/var/www/wims/wimsfcgiwrap.socket [Install] WantedBy=sockets.target
La conf nginx reste identique (au chemin près), mais pour (re)démarrer le service wimsfcgiwrap ça passe par les commande systemctl start|stop|restart|reload|status|etc. wimsfcgiwrap
Méthode n°2 : proxy Apache
Il est possible d'accélèrer pas mal les choses en laissant NGINX s'occuper de tout le contenu statique (css, images, etc..) et en ne laissant que les pages dynamiques (le cgi) à apache. ça économise de la RAM en évitant de lancer un process/thread apache à chaque image/css.
N'ayant pas testé cette solution, je ne la détaillerai pas, mais il est intéressant de savoir qu'elle existe, et si d'aventure vous la mettez en oeuvre, n'hésitez-pas à venir compléter cette doc…