Le wiki de WIMS EDU

L'association WIMS EDU a ouvert ce wiki afin de favoriser les collaborations entre utilisateurs de WIMS.

Outils pour utilisateurs

Outils du site


installation:wims_et_nginx

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…

Vous pourriez laisser un commentaire si vous étiez connecté.
installation/wims_et_nginx.txt · Dernière modification : 23/09/2022 16:40 de bernadette