[Debian 9] Installation du serveur web Nginx et PHP7 via les dépôts Debian

« nginx » est un serveur web open-source créé par un développeur Russe (Igor Sysoev). nginx était à la base un petit serveur web conçu pour supporter une charge très important sur le site d’Igor. Depuis, le projet n’a cessé de prendre du volume, et est maintenant considéré comme stable, en plus d’être réputé très peu gourmand en mémoire vive.

L’installation d’nginx sur Debian Stretch (9.4 Stable dans notre exemple) est très simple !


I. Téléchargements et installation de nginx

Il n’est pas obligatoire d’avoir un serveur SQL pour installer votre serveur nginx ; Le serveur SQL est nécessaire seulement si vous en avez le besoin pour vos applications web. Vous avez le choix entre MySQL (serveur SQL dit « de base »), ou alors l’installation de MariaDB – Article à cette adresse.

Attention : Lors de l’installation du serveur MySQL, vous avez le choix pour configurer automatiquement MySQL avec un serveur web spécifique ; Ne cochez aucun des serveurs prédéfinis (Apache2 ou Lighttpd). nginx se chargera lui-même de se configurer pour votre serveur SQL présent.

Pour lancer l’installation d’nginx, il faut saisir la commande ci-dessous :

sudo apt install nginx php7.0-fpm php7.0-mysql

Récapitulatif des paquets installés :

  • nginx : Serveur web ;
  • php7.0-fpm : Extension PHP permettant d’ajouter les plugins « FastCGI » pour avoir un PHP rapide et fiable, en plus d’être ;
  • php7.0-mysql : Extension PHP permettant de « jongler » entre votre serveur SQL et les scripts PHP.

L’installation est très rapide et pour cause : il ne s’agit que de petits plugins / serveur !

Dès lors, votre serveur est (déjà) prêt à l’emploi ! Accédez à l’IP de votre serveur dans un navigateur, et la page d’accueil par défaut d’nginx va s’afficher.
Cependant, tout n’est pas terminé : les scripts PHP ne sont pour le moment pas interprétés ni exécutés de façon optimale à cet instant…


II. Configuration post-installation pour PHP7.0-fpm

PHP ne demande qu’une petite configuration ! Au sein du dossier /etc/nginx, deux autres dossiers sont présents :

  • sites-available ;
  • sites-enabled.

Si vous remarquez bien la chose, ces deux dossiers sont aussi présents lorsque vous installez un serveur Apache. D’un côté, c’est tant mieux niveau organisation – Si ces dossiers n’existent pas, je vous conseille fortement de les créer ;-).

Dans le dossier « /etc/nginx/sites-available« , un premier fichier est présent (« default »). C’est le fichier à modifier pour accéder à votre dossier de base (dans cette configuration par défaut de nginx).

A l’intérieur de ce fichier, vous devez ajouter ces lignes de codes dans la section « server { … } » :

location ~ .php$ {
   fastcgi_split_path_info ^(.+.php)(/.+)$;
   fastcgi_pass unix:/var/run/php7.0-fpm.sock;
   fastcgi_index index.php;
   include fastcgi_params;
}

Par ce paragraphe, on signifie l’existence du plugin php5-fpm et de son socket (« /var/run/php5-fpm.sock« ) ; [alert type= »success »] N’oubliez pas que ce paragraphe doit se retrouver dans toute les sections « server { … } » de chaque fichiers dans le dossier « /etc/nginx/sites-available ». [/alert] Le fichier de configuration étant modifier, il convient de redémarrer le serveur nginx ET le socket php7.0-fpm pour que les modifications puissent être prises en compte :

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

III. Test de la configuration PHP avec un « phpinfo(); »

Votre serveur web étant redémarré et prêt à l’emploi, nous allons pouvoir tester un premier script PHP tout simple : « phpinfo();« . Cette variable PHP permet d’en savoir un peu plus sur votre serveur (d’une part), mais aussi et surtout sur le moteur PHP en route, avec ses extensions.

echo "<?php phpinfo(); ?>" > /usr/share/nginx/www/info.php

« /usr/share/nginx/www/ » est le dossier « root » du serveur web ; c’est dans ce dossier que vos sites web doivent se trouver. Vous pouvez naturellement changer ce dossier en le spécifiant dans votre fichier de configuration de site (dans le dossier « /etc/nginx/sites-available/« ). Ouvrez de nouveau votre navigateur, et saisissez l’adresse « http://ip_server/info.php« . (« ip_server » à remplacer) Si votre serveur nginx et votre moteur PHP fonctionnent correctement, vous verrez ainsi votre page d’information quant à votre serveur web (et le moteur PHP) !

Julien H

Passionné depuis toujours par l'informatique, je transforme ma passion en expertise. J'utilise quotidiennement les outils et systèmes Microsoft. Je ne délaisse pas mon côté ouvert, notamment via l'utilisation des OS Debian et Archlinux. L'infosec m'ouvre les yeux sur les enjeux actuels et futurs de l'IT.

8 commentaires

  1. Y’a un truc qui me gêne un poil :

    Avant de pouvoir installer nginx, il faut impérativement un serveur SQL.

    Faux ! Un serveur « SQL » ne sera nécessaire que si la ou les applications le nécessitent. Un moteur de blogs comme PluXml par exemple n’en a pas besoin 😉 Ou si comme moi, on tente de basculer certaines applications sur une base MongoDB (cf ma série en cours :P).

    Aussi, attention à la version d’Nginx embarquée dans Debian Wheezy, plutôt ancienne comparée à la dernière version stable (1.2.1 contre 1.6.2), ce qui pourrait être gênant suivant les besoins (SPDY, meilleurs performances…). Nginx propose son propre dépot pour Debian en cas de besoin.

    Par contre petite question : quel est l’intérêt de la ligne fastcgi_split_path_info ^(.+.php)(/.+)$; ?
    Je ne l’ai pas dans ma config, et ça ne pose pas de problème particuliers, même à WordPress (en test de migration actuellement).

    1. Merci pour ta réponse Seboss666 !

      En effet, il n’est pas obligatoire d’avoir un serveur SQL pour faire tourner Nginx… et heureusement !! J’ai modifié en conséquence le début de l’article, merci pour la remarque et ton exemple ! 😉

      Concernant la version d’nginx, je me fie principalement (peut être à tord ?) aux versions déployées dans les dépôts originaux de Debian ; Je ne me suis pas renseigné sur les dépôts proposés par les équipes de dev d’nginx. C’est à tester !

      La ligne « fastcgi_split_path_info ^(.+.php)(/.+)$; » permet d’ajouter une sécurité quant à l’upload et l’exécution de fichiers .php sur ton serveur –> http://serverfault.com/questions/502790/security-issue-on-nginx-php-fastcgi-split-path-info
      Ce n’est pas obligatoire, surtout vu les protections utilisées un peu partout dans les applications web, mais je préfère ajouter quelques brides complémentaires histoire d’avoir un serveur web « propre » et à minima « secure ».

      1. Me garde ça sous le coude alors, merci 😉

        Pour les dépôts, à priori, vu qu’ils sont signés, peu de chances d’avoir des soucis (type man-in-the-middle). Comme j’ai dit, le seul problème viendra d’éventuelles fonctionnalités (cache, performances, SPDY/HTTP2) qui pourraient manquer. Rien de mortel non plus (de toute façon, pour l’instant j’ai juste testé avec ma machine virtuelle sur laquelle nginx est compilé depuis les sources :P)

    1. L’installation de PostgreSQL est un peu plus « touchy » qu’un MariaDB ou MySQL ; Je vais en faire un article prochainement (courant semaine prochaine) pour te le montrer 😉

  2. Merci d’avoir écrit cette article! Je suis votre site depuis longtemps mais je n’avais jamais
    songé à laisser un commentaire.Je me suis inscrit à votre blog
    et j’ai partager votre article sur mon compte Facebook.
    Merci encore pour ce post! Il est très bien écrit et l’information est complète 🙂

    1. Merci pour le commentaire et surtout, pour les compliments ! Ça fait toujours plaisir à lire et ça motive à se dépasser pour saisir de nouveaux articles !
      A bientôt sur CZS 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Fermer
Fermer