Debian 9 Stretch : installer et configurer la dernière version de Nginx et PHP 7 FPM

Nous allons installer dans cet article la toute dernière version du serveur web NGINX qui sera couplé à PHP7 FPM.

J'ai longtemps été un fan de Apache httpd que j'utilisais systématiquement en tant que serveur web.
Mais depuis que j'ai essayé Nginx, je l'ai adopté : il est super performant et consomme beaucoup moins de ressources.

Pour ce qui est de PHP 7.0, c'est le digne successeur de PHP5 (oui je sais, PHP 6 est passé à la trappe au milieu).

Cette installation de base sera utilisée par la suite pour ajouter le support de HTTPS et du protocole HTTP/2.

 

Ajout du dépôt nginx à votre config

Nous allons installer la dernière version de Nginx. Et même si Debian 9 vient de sortir, il ne propose que Nginx 1.10.3.
Sur nginx.org, la dernière version stable est la version 1.12.x et la version mainline est en 1.13.x (c'est cette version mainline que nous allons installer)

Pour cela, nous devons au préalable ajouter le déport officiel de Nginx à notre configuration pour que apt-get puisse trouver cette version.

Commençons donc par ouvrir le fichier sources.list utilisé par apt-get.

sudo nano /etc/apt/sources.list

Puis nous ajoutons la ligne suivante à la fin du fichier.

deb http://nginx.org/packages/mainline/debian/ stretch nginx

Les paquets du dépôt nginx sont signés, il faut donc télécharger puis d'installer la clé de chiffrage.

cd /tmp

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

Enfin, on actualise la liste des paquets.

sudo apt-get update

 

Installation de nginx et PHP 7.0 FPM

On installe en une fois, Nginx et PHP 7.0 FPM plus quelques modules PHP très utiles, voir indispensables yes

sudo apt-get install nginx php7.0-fpm php7.0-gd php7.0-mysql php7.0-cli php7.0-common php7.0-curl php7.0-opcache php7.0-json php7.0-imap php7.0-mbstring php7.0-xml

A la fin de l'installation, vous pouvez vérifier les versions installées avec les commandes suivantes :

sudo php -v
PHP 7.0.19-1 (cli) (built: May 11 2017 14:04:47) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.19-1, Copyright (c) 1999-2017, by Zend Technologies
sudo nginx -v
nginx version: nginx/1.13.2

Le service nginx n'est pas démarré après l'installation. Vous pouvez taper la commande ci-dessous pour le faire manuellement.
Mais sachez qu'au prochain reboot de Debian, nginx démarrera automatiquement.

sudo service nginx start

Si vous ouvrez votre navigateur Internet à l'adresse IP de votre serveur, vous recevrez une réponse de Nginx

 

Configuration de PHP 7.0 FPM

Nous allons maintenant configurer PHP 7.0 FPM et Nginx pour qu'ils puissent dialoguer.

Commençons par ouvrir le fichier de configuration de PHP 7.0 FPM

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

Puis on s'assure que ce fichier contient la configuration suivante.
En résumé, le mode de communication est un socket UNIX (/run/php/php7.0-fpm.sock) et c'est l'utilisateur www-data, du groupe www-data qui l'exécute.

user = www-data
group = www-data
listen = /run/php/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data

On ouvre ensuite le fichier de configuration de Nginx

sudo nano /etc/nginx/nginx.conf

Puis on s'assure que ce fichier contient la configuration suivante.
Il y a de grande chance que l'utilisateur soit nginx par défaut, remplacez le par www-data

user www-data;

On doit maintenant indiquer à Nginx comment traiter les fichiers PHP.
Pour cela, on ouvre la configuration du vHost par défaut.

sudo nano /etc/nginx/conf.d/default.conf

Et on ajoute la configuration suivante

    # pass the PHP scripts to FastCGI server listening on /run/php/php7.0-fpm.sock
    #
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        try_files      $uri =404;
        fastcgi_pass   unix:/run/php/php7.0-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

Reste à redémarrer les services PHP 7.0 FPM et Nginx pour activer les modifications.

sudo service php7.0-fpm restart
sudo service nginx restart

 

Vérification du bon fonctionnement de PHP

L'emplacement des fichiers web publiés par le vHost Nginx par défaut est /usr/share/nginx/html.
On y va et on ajoute le petit fichier phpinfo.php

cd /usr/share/nginx/html
sudo nano phpinfo.php

Puis on ajoute le code suivant dans le fichier phpinfo.php que l'on vient de créer

<?php   phpinfo(); ?>

Reste enfin à ouvrir cette page dans votre navigateur pour obtenir smiley

Si vous souhaitez aller plus loin dans la configuration de Nginx et de PHP 7 FPM, rendez-vous sur l'article suivant.

Commentaires

Bonjour, merci pour ces tutos Debian 9, Je viens de repasser sous Linux dernierement, ils sont explicites. Et surtout en Fr cela est plaisant ;)

J'étais avant sur Ubuntu mais j'ai fui Unity et migré sur Windob 10  avant de revenir à la source Debian ;)

 

Merci, je suis ravi que les tutos te plaise smiley

Bonjour,

Y a-t-il une dépendance php spéciale pour utiliser PostgreSQL plutôt que MySQL?

Si oui laquelle stp?

et encore merci pour le tuto en 9.

Bonjour, Oui tu dois utiliser le package php7.0-pgsql pour utiliser PostgreSQL

Merci pour ce bon tuto

avez vous un tuto ou un lien pour lier nginx a Roundcube 

Salut,
Je suis tombé par hazard sur ton site en voulant me renseigner sur Nginx, j’ai fait un super bonne trouvaille merci ! Tuto au top! Continue comme ça!!

Bonjour,

J'ai suivi ce tuto (qui je dois l'avouer est bien expliqué pour un noob comme moi) mais je ne trouve pas le dossier Vhost, j'imagine qu'il a été déplacé lors d'une update, mais je ne sais pas où, help please :)

La config des vHost se trouve dans le dossier /etc/nginx/conf.d Et par défaut, il y a le fichier /etc/nginx/conf.d/default.conf qui est présent

J'ai bien suivi le tuto, nginx fonctionne parfaitement, mais par contre je n'ai pas le dossier nginx dans le dossier /etc. Du coup impossible de continuer l'installation de PHP.

C'est le dossier par défaut de nginx /etc/nginx/

Je sais pas quoi te répondre sad

Super tuto, merci beaucoup!

Bonjour,

Je vous remercie pour ce tutorial. Il est très clair.

J'ai accès à http://localhost et à la page phpinfo.php dans le browser.

Cependant, les sous-dossiers dans usr/share/nginx/html me renvoient une erreur 403 Forbidden sur nginx 1.15.2. Par exemple, erreur 403 sur http://localhost/mywebsql.

Bonjour,

Content que le tuto vous aide.

L'erreur 403 Forbidden indique que le sous-dossier que vous avez créé dans usr/share/nginx/html ou les fichiers php que vous avez créés dedant ne sont pas accessibles par l'utilisateur www-data.
Pouvez-vous vérifier vos droits d'accès.

Bonjour,

Je suis embêté : j'ai suivi plusieurs tutos sur la configuration de Nginx pour utiliser PHP. Mais en dépit de plusieurs relectures, mon serveur s'obstine à vouloir me faire télécharger mes scripts PHP.

Voilà la configuration de mon serveur :

/etc/php/7.0/fpm/pool.d/www.conf :

user = www-data
group = www-data
listen = /run/php/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data

/etc/nginx/nginx.conf :

user www-data;

/etc/nginx/sites-available/default :

root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}

Dans mon dossier /var/www/html, j'ai créé deux scripts : index.php et info.php (les deux contenant simplement phpinfo(); pour tester)

Quand je navige vers ma page d'index, le PHP est bien interprété et m'affiche le rendu de phpinfo. Mais quand je navige vers ma page info.php, il s'obstine à vouloir me faire télécharger le script info.php plutôt que de l'exécuter.

Sur un forum, j'ai trouvé ce qui devait être une solution, à savoir de passer l'option cgi.fix_pathinfo du php.ini de php-fpm à 0, mais ca n'a rien changé. Je viens de tenter de le recommenter (pour remettre sa valeur par défaut à 1) et là encore ca ne change rien.

Evidemment, après chaque modification, j'ai redémarré les deux services nginx et php7.0-fpm avec un service ... restart.

si index.php et info.php sont dans le meme dossier et que index.php est bien interprété, c'est que le serveur semble OK. Avez-vous essayer de purger le cache de votre navigateur internet ? Puis essayer d'ouvrir à nouveau info.php

Merci pour ce tutos,

Il faut bien relire deux fois avant de passer a l'étape suivante.
Pour moi c'est impec.

Ajouter un commentaire

You must have Javascript enabled to use this form.