• 10 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 24/09/2018

Installez PHP sur votre serveur web

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Aujourd’hui, la plupart des sites web ne sont plus constitués de simples pages HTML mais sont de véritables applications interactives sur lesquelles vous pouvez ajouter ou modifier du contenu. Un des langages les plus utilisés pour créer ces sites dynamiques est PHP. Beaucoup d’applications très populaires telles que le moteur de blog WordPress utilisent ce langage et vous aurez donc besoin de savoir l’installer et le configurer pour profiter de toutes ces applications.

De manière générale, il y a deux manières d’exécuter des programmes avec Apache :

  • sous forme d’un module intégré à Apache, ce qui permet aux processus Apache de gérer eux-mêmes l’exécution du programme

  • sous forme d’un script CGI. Dans ce cas, Apache délègue l’exécution du programme à un processus tiers

PHP n’échappe pas à la règle et je vais donc vous présenter ces deux manières d’installer PHP.

Installez PHP sous forme de module Apache

La manière la plus classique et la plus simple d’installer PHP est de l’installer sous forme d’un module Apache. Pour cela, il vous suffit d’installer le module  libapache2-mod-php  :

$ sudo apt-get install libapache2-mod-php

PHP est alors installé ainsi que le module  mod-php  qui permet à Apache d’utiliser ce langage. Si vous lisez les informations du processus d’installation, vous verrez également que le module  mpm_event  a été désactivé au profit du module  mpm_prefork  . En effet, PHP n’est pas considéré comme étant “thread_safe” et si vous vous souvenez du chapitre 1, c’était une des raisons d’utiliser le module  mpm_prefork  .

Pour tester l’installation de PHP sur votre système, dans le répertoire  /var/www/html/www.example.com/top_secret  de votre site web, supprimez le fichier  index.html  et créez le fichier   index.php  contenant :

<?php
phpinfo();
?>

Après vous être authentifié, vous voyez s’afficher beaucoup d’informations sur votre système, votre configuration Apache et bien-sûr votre configuration PHP.

Capture d'écran d'un navigateur affichant une page phpinfo() à l'adresse http://www.example.com/top_secret/
La page phpinfo() indique que PHP est correctement installé et donne beaucoup d'informations sur votre système

Vous trouverez la configuration de PHP dans le répertoire  /etc/php/7.2  où  7.2  est votre version de PHP :

$ ls /etc/php/7.2
apache2 cli mods-available

Vous y trouverez 3 répertoires :

  • apache2  est la configuration utilisée par le module PHP d’Apache

  • cli  est la configuration utilisée par le client en ligne de commandes PHP

  • mods-available  est le répertoire où sont installés tous les modules PHP

$ ls /etc/php/7.2/apache2
conf.d php.ini

Dans le répertoire  apache2  (et pareil pour  cli  ), vous trouverez le fichier de configuration général  php.ini  et la configuration propre à chaque module dans le répertoire  conf.d

Voyons maintenant la méthode FastCGI d’installation de PHP.

Installez PHP en tant que processus FastCGI

L’installation de PHP sous forme de processus indépendant d’Apache est une manière plus récente d’installer PHP et souvent considérée comme plus performante, en particulier pour les sites à forte charge. Cette méthode repose sur le daemon PHP-FPM vers lequel Apache redirigera toutes les requêtes qui nécessitent d’exécuter du code PHP. Vous pouvez installer ce daemon par la commande :

$ sudo apt-get install php-fpm

Par défaut, php-fpm n’est pas activé dans Apache et vous verrez un message d’avertissement indiquant d’exécuter les commandes pour activer les modules et configurations suivantes :

$ sudo a2enmod proxy_fcgi setenvif
$ sudo a2enconf php7.2-fpm

Pour utiliser php-fpm, il vous faudra également désactiver le module Apache PHP. Puisque c’est php-fpm qui gère PHP, il n’y a plus d'interaction directe entre les threads Apache et PHP. Du coup, vous allez en profiter pour repasser au module mpm_event.

$ sudo a2dismod php7.2 mpm_prefork
$ sudo a2enmod mpm_event
$ sudo systemctl restart apache2

Maintenant, si vous voulez configurer PHP, il faudra éditer la configuration dans le répertoire  /etc/php/7.2/fpm  . Voici le détail du contenu de ce répertoire :

  • php.ini  le fichier de configuration générale de PHP

  • conf.d  le répertoire de configuration des modules PHP

  • php-fpm.conf  le fichier de configuration du daemon php-fpm

  • pool.d  le répertoire contenant la configuration des pools php-fpm

Php-fpm fonctionne par un système de pools, un pool étant un ensemble de processus php-fpm utilisant une même configuration.

Ce qui est intéressant quand on a plusieurs sites web, c’est qu’on peut affecter un pool différent à chaque site web. Je pourrais par exemple affecter :

  • à mon site A un pool de 3 processus appartenant à userA,

  • à mon site B un pool de 20 processus appartenant à userB.

De cette façon, je choisis si je veux allouer plus de ressources à un site plutôt qu’à un autre, ce que je ne pouvais pas faire avec le module Apache PHP. Le fait que chaque pool puisse utiliser un utilisateur différent est un atout en terme de sécurité : si le site A se fait pirater, il ne pourra pas accéder aux fichiers du site B et vice-versa.

Si vous regardez le contenu de votre répertoire  pool.d  , vous y trouverez seulement le fichier  www.conf  . Regardons ensemble le contenu de ce fichier :

[www]

Entre crochets, se trouve le nom du pool : ici  www  .

user = www-data
group = www-data

Vous avez ensuite la définition de l’utilisateur et du groupe auxquels appartient votre pool. C’est important car les fichiers de votre site doivent pouvoir être accessibles en lecture et au besoin en écriture à cet utilisateur.

Listen = /run/php/php7.2-fpm.sock

La directive  Listen  définit l’interface réseau sur laquelle écoute le pool. Cette interface est utilisée pour la communication avec le serveur web. Ici, c’est un fichier socket Unix qui est utilisé mais vous pourriez préciser une adresse IP et un port TCP. Il faut en tout cas bien noter le nom de cette interface car vous allez devoir la reporter dans votre configuration Apache.

Il faut maintenant indiquer à Apache de transmettre les requêtes qui demandent l’exécution de code PHP à PHP-FPM. Pour cela, dans votre vhost  /etc/apache2/sites-available/01-www.example.com.conf  , ajoutez la ligne suivante après la directive  DocumentRoot  :

   DocumentRoot /var/www/html/www.example.com
   ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.2-fpm.sock|fcgi://localhost/var/www/html/www.example.com/

Ici, vous utilisez la directive  ProxyPassMatch  qui indique à Apache de renvoyer toutes les requêtes qui valident l’expression régulière vers l’URI indiquée. Voici le détail de l’URI :

Les paramètres passés à la directive ProxyPassMatch apparaissent en différentes couleurs et des encadrés expliquent ces différentes parties.
Explication des différents paramètres passés à la directive ProxyPassMatch

Il ne vous reste plus qu’à recharger la configuration Apache pour prendre en compte ce changement et vous aller admirer votre page  phpinfo()  sur votre client :)

Capture d'écran du navigateur client qui affiche la page phpinfo(). La valeur du paramètre
La page phpinfo() indique bien l'utilisation du daemon PHP-FPM

Dans le prochain chapitre, vous verrez comment installer la dernière brique du système LAMP : la base de données MySQL.

En résumé

  • il y a deux moyens d’exécuter PHP sur un serveur web Apache : sous forme d’un module Apache ou sous forme d’un processus externe indépendant par l’interface FastCGI

  • par l’interface fastCGI, c’est le daemon PHP-FPM qui exécute PHP

  • la méthode PHP-FPM est généralement reconnue comme celle qui obtient les meilleurs performances

  • la méthode PHP-FPM permet également plus de personnalisation et d’isolation dans un environnement multi-sites

Exemple de certificat de réussite
Exemple de certificat de réussite