Debian 10 Buster : installer et configurer la dernière version de Nginx et PHP 7.3 FPM

Nous allons installer dans cet article la toute dernière version du serveur web NGINX qui sera couplé à PHP 7.3 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.

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 10 vient de sortir, il ne propose que Nginx 1.14.2.
Sur nginx.org, la dernière version stable est la version 1.16.x et la version mainline est en 1.17.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 ajouter le fichier nginx.list dans le dossier des sources additionnelles utilisé par apt-get.

sudo nano /etc/apt/sources.list.d/nginx.list

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

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

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

Mais avant, nous allons installer le package gnupg2 qui est nécessaire à l'installation de cette clé. Pour cela lancer la commande suivante :

sudo apt-get install gnupg2

Passons au téléchargement et à l'installation de la clé de chiffrage nginx

cd /tmp

wget https://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.3 FPM

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

sudo apt-get install nginx php7.3-fpm php7.3-gd php7.3-mysql php7.3-curl php7.3-imap php7.3-mbstring php7.3-xml

Les paquets php7.3-cli php7.3-common php7.3-opcache php7.3-json seront également installés automatiquement.

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

sudo php -v
PHP 7.3.9-1~deb10u1 (cli) (built: Sep 18 2019 10:33:23) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.9, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.9-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies
sudo nginx -v
nginx version: nginx/1.17.3

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.3 FPM

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

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

sudo nano /etc/php/7.3/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.3-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.3-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, à l'intérieur de la balise server {   }

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

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

sudo service php7.3-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 va ajouter le petit fichier phpinfo.php dans ce dossier

sudo nano /usr/share/nginx/html/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.3 FPM, rendez-vous sur l'article suivant.

Commentaires

Après des jours de érrence dans les documentations... J'ai trouvé un tuto simple efficace, merci !!

Simple et efficace ! Bravo et merci !

Alors tuto simple et efficace en effet MAIS (bah oui, il en fallait bien au moins un ^^)

  • installation de Nginx : OK (nginx/1.19.1 dispo à ce jour sur le dépot que tu préconises)
  • installation php7.2 à 7.4 : OK / dans l'immédiat, je stop 7.2 et 7.3 pour rester sur la version supportée la plus actuelle
  • config serveur et php faite très exactement comme préconisée : OK
  • redémarrage des différents services (nginx, php7.4-fpm) : OK
  • accès à l'index du serveur : OK
  • accès à phpinfo.php : KO => erreur 404

et là, c'est le drame ......

Si tu as une idée de génie à me suggérer, je suis preneur.

Merci d'avance ;-) 

 

OK, pour faire suite à mon précédent message, j'ai finalement trouvé la solution grâce à https://serverfault.com/questions/948898/nginx-and-php-fpm-primary-script-unknown-while-reading-response-header-from-u

 

Dans :/etc/nginx/conf/default.conf
section location ~ \.php$ { ... }

il faut remplacer

  • fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

par 

  • fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;

sion il se croûte en allant cherche la config fastcgi

 

Voila voila ;)

 

 

Ajouter un commentaire

You must have Javascript enabled to use this form.