Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée

Apache en tant que serveur web dynamique

Introduction

Comme nous avons pu le voir précédemment, Apache est très riche en fonctionnalités, de par la grande variété de modules mise à disposition. Force est de constater qu’Apache est majoritairement utilisé comme serveur web, dans le but d’héberger des sites Internet aux contenus interactifs.

Nous aborderons dans ce chapitre différentes méthodes lui permettant d’interpréter des pages dites « dynamiques », avec les différents modules multitraitements disponibles (MPM Prefork, Worker ou Event).

Pour illustrer cela, nous allons y associer le langage PHP (Hypertext Preprocessor) ainsi que la base de données MySQL, sur une distribution Debian Linux.

Cette plate-forme logicielle est plus communément appelée LAMP (Linux Apache MySQL PHP). C’est à ce jour l’un des environnements les plus utilisés sur Internet.

Afin d’expliquer l’installation d’Apache avec les différents MPM, l’option --with-mpm= est utilisée. Ainsi, les possibilités sont :


--with-mpm=prefork
--with-mpm=worker
--with-mpm=event  # par défaut
 

Depuis la version 2.4, il est possible de passer d’un MPM à l’autre sans avoir à recompiler Apache en utilisant l’option --enable-mpms-shared=all lors de la configuration de l’installation (commande...

PHP avec Apache en MPM Prefork

L’emploi du MPM Prefork d’Apache implique l’utilisation de PHP en tant que module d’Apache. Il s’agit de la méthode d’installation historique du couple Apache/PHP, encore parfois recommandée dans les prérequis d’applications web.

Les deux composants sont donc solidaires dans l’exécution du code, PHP faisant partie intégrante d’Apache.

1. Installation de PHP

L’installation de PHP en tant que composant d’Apache (module DSO) sous-entend l’utilisation de l’apxs (APache eXtenSion tool). Nous allons effectuer cette installation sur une distribution Debian Linux, dans sa toute dernière version (7.8) à la date de rédaction cet ouvrage.

a. Installation avec le gestionnaire de paquets Debian

Comme pour toute installation sous Debian Linux, nous pouvons tout simplement utiliser l’outil apt-get de la distribution, qui prendra en charge l’ensemble des dépendances nécessaires au bon fonctionnement.

À la date de rédaction, les versions disponibles sur cette distribution sont :

  • Apache 2.2.22-13

  • PHP 5.4.36-0+deb7u3


root@vm-debian-eni:~# apt-cache policy apache2  
apache2:  
  Installé : (aucun)  
  Candidat : 2.2.22-13+deb7u4  
 Table de version :  
     2.2.22-13+deb7u4 0  
        500 http://ftp.fr.debian.org/debian/ wheezy/main amd64  
Packages  
     2.2.22-13+deb7u3 0  
        500 http://security.debian.org/ wheezy/updates/main amd64 
Packages
 


root@vm-debian-eni:~# apt-cache policy php5  
php5:  
  Installé : (aucun)  
  Candidat : 5.4.36-0+deb7u3  
 Table de version :  
     5.4.36-0+deb7u3 0  
        500 http://security.debian.org/ wheezy/updates/main amd64 
Packages  
     5.4.36-0+deb7u1 0  
        500 http://ftp.fr.debian.org/debian/ wheezy/main amd64 
Packages
 

Ainsi, pour installer le paquet PHP5 :


apt-get install php5
 

Il est intéressant de noter que :

  • les packages apache2, apache2-bin et apache2-data vont être désinstallés.

  • de nouveaux packages vont être installés : apache2-mpm-prefork, apache2.2-bin, apache2.2-common, libapache2-mod-php5...

PHP avec Apache en MPM Worker

L’utilisation d’Apache en multithread avec PHP a longtemps été considérée comme instable et non conseillée à la production. Mais depuis les dernières versions et l’apparition de modules tels que mod_fcgid (FastCGI daemon), les performances et la stabilité sont au rendez-vous.

Souvent comparé au mod_fastcgi, mod_fcgid s’interface donc à php-cgi via le mécanisme FastCGI.

FastCGI est très semblable à CGI. Il s’agit en fait d’une amélioration de ce dernier apportant une notion de gestion de processus et permettant de pallier la problématique d’avoir un processus CGI par requête.

Ainsi, les requêtes en provenance du serveur Apache sont distribuées aux processus CGI, directement gérés par le mécanisme FastCGI en charge de leur cycle de vie. La différence la plus marquante est donc qu’en FastCGI, les processus du serveur Apache et ceux de l’application sont séparés.

Le rôle d’Apache est donc ramené à afficher le résultat du traitement de FastCGI. Il ne consiste plus à effectuer lui-même l’interprétation du code PHP comme c’est le cas avec le module mod_php.

Afin d’illustrer la mise en œuvre de cet environnement, nous allons devoir :

  • Réinstaller PHP avec le support CGI,

  • Réinstaller Apache en MPM Worker,

  • Installer le module Apache mod_fcgid.

Nous utiliserons les sources d’Apache et PHP dans leur version respective 2.4.12 et 5.5.21, dernières versions stables à la date de rédaction de cet ouvrage.

1. Installation de PHP

La méthode de compilation de PHP ne change pas. Seules quelques options changent pour correspondre au besoin : utiliser PHP en FastCGI.

L’organisation des arborescences est la suivante :

  • /opt/src : répertoire contenant les sources,

  • /opt/prod/php55-cgi: répertoire d’installation de PHP.

Étant donné que nous utilisons les mêmes sources que pour notre dernière compilation, nous allons effectuer un make clean afin de supprimer les fichiers générés précédemment :


marty@vm-debian-eni:/opt/src/php-5.5.21$ make clean
 

Nous allons à présent relancer...

PHP avec Apache en MPM Event

1. Installation de PHP-FPM

Disponible depuis la version 5.3.3 de PHP, PHP-FPM (FastCGI Process Manager) est une alternative à PHP FastCGI particulièrement adaptée pour des environnements fortement sollicités.

Il permet entre autres :

  • une gestion avancée des processus grâce aux arrêts/démarrages « graceful »,

  • la création dynamique des processus,

  • la possibilité de restriction basée sur l’adresse IP à l’origine des requêtes,

  • la mise à disposition de statistiques,

  • la possibilité de créer de nouveaux processus sous différents uid/gid, avec un « chroot » des environnements PHP dédiés par projet.

a. Distribution Linux Ubuntu/Debian

La distribution Debian/Linux met à disposition depuis son gestionnaire de packages php5-fpm, dans sa version 5.4.36-0+deb7u1.

Il est alors possible de l’installer avec l’utilitaire apt :


marty@vm-compilation-eni:~$ sudo apt-get install php5-fpm
 

Le package s’installe dans le répertoire /etc/php5/fpm :


marty@vm-compilation-eni:~$ sudo tree /etc/php5/fpm/  
/etc/php5/fpm/  
├── conf.d -> ../conf.d  
├── php-fpm.conf  
├── php.ini  
└── pool.d  
    └── www.conf  
 
2 directories, 3 files
 

Le fichier www.conf présent dans le répertoire pool.d présente une configuration par défaut.

Éditez ce fichier et remplacez la ligne :


listen = /var/run/php5-fpm.sock 
 

par :


listen = 127.0.0.1:9000
 

Cela permet la communication avec php-fpm par le protocole TCP, sur le port 9000.

Il est nécessaire de relancer le service pour que les modifications soient prises en compte :


marty@vm-compilation-eni:~$ sudo service php5-fpm restart  
[ ok ] Restarting PHP5 FastCGI Process Manager: php5-fpm. 
 

b. Installation depuis les sources

Pour l’installation depuis les sources, il faut se rendre dans le répertoire des sources de PHP, téléchargé depuis le site http://php.net/.


cd /opt/src/ php-5.5.21/
 

La configuration de la compilation consiste à :

  • activer l’extension FPM avec l’argument --enable-fpm.

  • désactiver l’utilisation...

Installation de MySQL

MySQL est un système de gestion de bases de données relationnelles (SGBDR). Il est fréquemment associé au langage PHP, notamment dans les plates-formes appelées LAMP (Linux Apache MySQL PHP).

1. Distribution Ubuntu et Debian/Linux

La distribution Debian met à disposition la version 5.5.41 de MySQL Server depuis le gestionnaire de packages :


marty@vm-compilation-eni:~$ sudo apt-cache show mysql-server-5.5  
Package: mysql-server-5.5  
Source: mysql-5.5  
Version: 5.5.41-0+wheezy1
 

Pour l’installer :


marty@vm-compilation-eni:~$ sudo apt-get install mysql-server-5.5
 

Lors de l’installation, il vous sera demandé de définir le mot de passe de l’utilisateur root de MySQL.

Pour valider l’installation :


marty@vm-compilation-eni:~$ mysql -V  
mysql  Ver 14.14 Distrib 5.5.41, for debian-linux-gnu (x86_64)  
using readline 6.2  
 
marty@vm-compilation-eni:~$ mysql -p  
Enter password:  
Welcome to the MySQL monitor.  Commands end with ; or \g.  
Your MySQL connection id is 43  
Server version: 5.5.41-0+wheezy1 (Debian)  
 
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights 
reserved.  
 
Oracle is a registered trademark of Oracle Corporation and/or its  
affiliates. Other names may be trademarks of their respective  
owners.  
 
Type 'help;' or '\h' for help. Type '\c' to clear the current  
input statement.  
 ...