J'ai choisi le serveur Nginx (pour eNGINe X) parce qu'il est « idéal pour les petits serveurs : par sa très faible consommation en RAM il est possible de l’installer sur un petit système avec 256 Mo de mémoire vive seulement. En utilisant le couple Nginx + PHP-FPM on obtient ainsi des performances agréables sur des configurations minimes » (voir http://blog.f3re.com/comparatif-nginx-vs-apache/ , qui donne aussi d'autres liens). Cette installation réelle a été faite avec nginx 1.6.2-5 .

Pour l'installation de Nginx, je me suis inspiré de la page http://blog.nicolargo.com/2011/01/installation-et-test-de-nginx-sous-ubuntu.html

Il se peut que, dans ce tutoriel, l'ensemble des instructions vous semblent un peu lourdes ou trop détaillées, mais c'est fait volontairement, dans le but de familiariser avec les commandes utilisées ceux qui n'ont pas une très grande pratique.

Suppression du serveur Apache si déjà installé

Cette suppression est nécessaire car si Apache est en écoute sur le port TCP/80, Nginx ne pourra pas se lancer.

Vérifiez que le serveur apache n'est pas installé :
$ sudo /etc/init.d/apache2 stop

Si vous obtenez le message « sudo: /etc/init.d/apache2: command not found », c'est qu'il n'est pas installé.
Sinon, désactiver le service :
$ sudo update-rc.d -f apache2 remove

puis supprimez le paquet :
$ sudo apt-get purge apache2

Installation de Nginx

Installez nginx par :
$ sudo apt-get update
$ sudo apt-get install nginx

On peut voir la liste des commandes acceptées par le script de démarrage de nginx
$ sudo service nginx
Usage: nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}

Activez la configuration de test :
$ sudo service nginx configtest
[ ok ] Testing nginx configuration

et lancez le serveur :
$ sudo service nginx start

Puis, dans votre navigateur, entrez l'adresse IP de votre Raspberry (ici, 192.168.1.31). Vous devez obtenir la page « Welcome to nginx on Debian! ».

Arretez le serveur :
$ sudo service nginx stop

Configuration de nginx :

Les fichiers de configuration se trouvent dans le répertoire /etc/nginx. On y retrouve (entre autres) :

  • nginx.conf: le fichier de configuration central ;
  • conf.d/: un répertoire contenant des fichiers de configuration additionnels ;
  • sites-available/: répertoire contenant la liste des fichiers de configuration des sites disponibles ;
  • sites-enabled/: répertoire contenant la liste des fichiers de configuration des sites actifs (liens symboliques vers le répertoire sites-availables).

Le fichier du site par défaut /etc/nginx/sites-available/default a été activé par la commande plus haut « sudo service nginx configtest ». Il va nous servir pour créer notre propre fichier de configuration.

Au lieu d'héberger nos pages dans le répertoire /var/www, il est plus pratique de le faire dans le répertoire /home, car la sauvegarde sera alors faite avec toutes les autres données.

Créez le répertoire de votre serveur :
$ sudo mkdir /home/serveur
$ sudo mkdir /home/serveur/www

Créez une page de test :
$ sudo nano /home/serveur/www/index.html
<html><body>Ma page de test</body></html>

Ouvrez le fichier de configuration du site web par défaut :
$ sudo nano /etc/nginx/sites-available/default

et enregistrez-le sous le nomde votre site, par exemple site1.

Éditez ce fichier :
$ sudo nano /etc/nginx/sites-available/site1 en gardant uniquement :

server {

       listen 80; 
root /home/serveur/www;
index index.html index.htm;
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ /index.html;

}

}

Activez votre site1 en créant le lien symbolique (option -s) :
$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/site1

et supprimez le site default (en fait, supprimez seulement le lien vers /etc/nginx/sites-available/default) :
$ sudo rm default

Redémarrez Nginx :
$ sudo service nginx restart

Test de votre serveur :

Dans votre navigateur, entrez l'adresse IP de votre Raspberry (ici, 192.168.1.31). Vous devez obtenir la page « Ma page de test ». Ça ne marche pas, et c'est normal ! Vous obtenez à la place la page « Welcome to nginx on Debian! » qui se trouve à /var/www/html/index.nginx-debian.html, mais aussi à /usr/share/nginx/html/index.html.

Il y a deux raisons à cela :

  • comme vous accédez au site par le réseau local à partir de votre PC et non de votre serveur lui-même, il faut modifier à nouveau le fichier /etc/nginx/sites-available/site1 : changez la ligne « server_name localhost; » par « server_name 192.168.1.31; » ;
  • nginx affiche la page par défaut dans var/www/html/ : supprimez cette page (en fait, la renommer est mieux) :

$ cd /var/www/html/
$ sudo mv index.nginx-debian.html index.nginx-debian.html.origin

Redémarrez Nginx :
$ sudo service nginx restart

À nouveau, dans votre navigateur, entrez l'adresse IP de votre Raspberry (ici, 192.168.1.31) : vous devez obtenir la page « Ma page de test » (qui se trouve uniquement dans /home/serveur/www/index.html (voir la ligne root dans /etc/nginx/sites-available/site1). Votre serveur fonctionne, youpi !!

Pour l'instant, vous ne pouvez accéder au serveur que par le réseau local. Pour y accéder à partir d'Internet, on définira plus tard l'adresse URL du serveur, et il faudra qu'elle pointe sur son adresse IP.

Installation de PHP

Voir https://www.guillaume-leduc.fr/projet-installation-configuration-nginx-php-fpm.html

Avec Nginx, on va dissocier les requêtes HTTP des requêtes PHP, pour que le serveur HTTP ne traite QUE les requêtes HTTP qu’il reçoit et redirige les requêtes PHP éventuelles vers le ou les processus PHP : ces processus vont donc tourner sur la machine de manière indépendante. Cela est réalisé avec le paquet php-fpm. PHP sera chargé en mémoire et répondra aux requêtes qu’il recevra de Nginx, d’autant plus efficacement que PHP-FPM utilise des mécanismes lui permettant de réutiliser ses threads pour répondre à plusieurs requêtes (plutôt que d’ouvrir et fermer un thread à chaque requête).

Installez le paquet php5-fpm :
$ sudo apt-get install php5-fpm

Configuration de PHP-FPM

Pour les requêtes PHP reçues par Nginx, qui les transmet à PHP-FPM, il y a deux possibilités :

  • si PHP et Nginx ne sont pas sur la même machine, on utilise un socket TCP.
  • si PHP et Nginx sont sur la même machine, on utilise un socket Unix, pour des raisons de performances.

Étant dans le deuxième cas, nous devons configurer PHP-FPM pour qu’il écoute sur un socket Unix. Éditez le le fichier de configuration /etc/php5/fpm/pool.d/www.conf :
$ sudo nano /etc/php5/fpm/pool.d/www.conf

et insérez les deux lignes :
;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock

Redémarrez le service pour tenir compte des modifications :
$ sudo service php5-fpm restart

Configuration de Nginx

Pour que Nginx puisse transmettre les requêtes PHP qu’il reçoit, il faut déclarer le socket Unix de PHP-FPM au niveau de Nginx.
Éditez le fichier /etc/nginx/conf.d/php5-fpm.conf (s'il n'existe pas, crééz-le) :
$ sudo nano /etc/nginx/conf.d/php5-fpm.conf

en y mettant les trois lignes :
upstream php5-fpm-sock {

    server unix:/var/run/php5-fpm.sock;
       }

Redémarrez le service :
$ sudo service nginx restart

Pour tester le fonctionnement de php, créez le fichier /usr/share/nginx/html/index.php :
$ sudo nano /usr/share/nginx/html/index.php

en y mettant la ligne :
<?php phpinfo(); ?>

Puis modifiez le fichier de configuration de votre site1 :
$ sudo nano /etc/nginx/sites-available/site1

server {
listen 80 default_server;
root /home/serveur/www;
index index.php index.html;
server_name 192.168.1.31;
access_log /var/log/nginx/default-access_log;
error_log /var/log/nginx/default-error_log;

   location / { 

try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_index index.php;
fastcgi_pass php5-fpm-sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}

Redémarrez le service :
$ sudo service nginx restart

Vérifiez que vous avez toujours le lien vers /sites-available/site1 dans /etc/nginx/sites-enabled/ ; normalement, vous l'avez créé lors de l'installation / configuration de nginx :
$ ls -l /etc/nginx/sites-enabled/
site1 -> ../sites-available/site1

Redémarrez le serveur :
$ sudo service nginx restart

Test de PHP

À nouveau, dans votre navigateur, entrez l'adresse IP de votre Rasberry (ici, 192.168.1.31) : vous devez obtenir la page de test de PHP : c'est un tableau qui commence par « PHP Version 5.6.14-0+deb8u1 » (avec mon Raspberry). PHP fonctionne, encore youpi !!

Comme vous le voyez dans ce tableau, PHP est désormais configuré avec Nginx et il fonctionne via FPM/FastCGI comme c’est indiqué par la ligne Server API. Si vous défilez la page, vous verrez des modules PHP qui sont déjà activés, mais vous remarquez que MySQL n’est pas listé.

Le prochain billet, Installation du moteur de blog Dotclear, suivra celui-ci dans quelque temps.