A partir de la version 13.10, Ubuntu fournit par défaut la version 2.4 du serveur http Apache.
Les options de paramétrage ont évolué entre les versions 2.2 et 2.4, notamment sur les aspects :
- virtualhost : le nom des fichiers doit se terminer par l'extension .conf et certains paramètres ont changé
- le lien avec PHP-FPM
Cet article illustre les changements à apporter pour faire fonctionner Apache 2.4 et PHP sur un serveur linux de type Debian / Ubuntu.
Installation Apache
L'installation se fait facilement via :
sudo apt-get install apache2 apache2-utils
On peut vérifier la version / configuration avec la commande
apache2ctl -V Server version: Apache/2.4.7 (Ubuntu) Server built: Mar 10 2015 13:05:59 Server's Module Magic Number: 20120211:27 Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3 Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3 Architecture: 64-bit Server MPM: prefork threaded: no forked: yes (variable process count)
VirtualHost
La déclaration des VirtualHost a été modifiée.
Premier impact majeur : le nom des fichiers doit maintenant se terminer par .conf.
Une autre modification importante intervient dans le paramétrage de l'autorisation, avec les directives "Allow", qui sont maintenant remplacées par "Require", comme indiqué dans la documentation http://httpd.apache.org/docs/2.4/fr/upgrading.html
Par exemple, en version 2.2, pour autoriser toutes les requêtes, on avait :
Order allow,deny Allow from all
Avec la version 2.4, pour autoriser les requêtes, la syntaxe est :
Require all granted
Exemple de configuration pour un site statique (fichier /etc/apache2/sites-available/static.conf
) :
<VirtualHost *:80> ServerName static.test.local DocumentRoot /var/www/static <Directory /var/www/static/> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Qu'on active via la commande :
a2ensite static service apache2 reload
A ce stade, on a un serveur http, uniquement capable de "servir" des fichiers statiques. Allons un peu plus loin, avec la mise en place de PHP.
Deux options sont possibles pour PHP : en module Apache (mod_php), ou avec PHP-FPM.
Installation PHP en module Apache
L'installation de php5 installe également le module apache2 correspondant :
apt-get install php5 Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libapache2-mod-php5 lsof php5-cli php5-common php5-json php5-readline psmisc
Paramétrage du VirtualHost
Pour le test on va créer un répertoire /var/www/php
, et y créer un fichier info.php
, qui contient les lignes :
<?php phpinfo(); ?>
La définition de notre VirtualHost est alors :
<VirtualHost *:80> ServerName php.test.local DocumentRoot /var/www/php <Directory /var/www/php/> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error_php.log LogLevel info CustomLog ${APACHE_LOG_DIR}/access_php.log combined </VirtualHost>
L'action du site s'effectue de la même manière que précédemment. On peut alors tester via l'url http://php.test.local/info.php, ce qui nous affiche la configuration de PHP pour le serveur.
Passons à l'étape suivante, la configuration avec PHP-FPM.
L'installation est détaillée dans un autre article : Passage de Apache + mod_php vers Nginx + PHP-FPM
Lien avec PHP-FPM
En dehors du module PHP, qui a l'inconvénient de surcharger le serveur apache, car chaque process embarque un moteur php complet, on peut utiliser PHP-FPM (FastCGI Process Manager), qui offre des fonctionnalités additionnelles intéressantes dans les environnements soumis à une forte charge.
PHP-FPM est lancé en tant que processus séparé du serveur http. Il peut donc être lancé avec un (ou plusieurs) comptes, différents de celui utilisé par le serveur http, afin d'améliorer la sécurité, ou d'utiliser des paramétrages PHP différents selon les différents pools de connexions utilisés.
La version Apache 2.4 ne peut cependant pas utiliser des sockets Unix pour communiquer avec le serveur php-fpm.
Depuis la version 2.4.9, ce souci semble être résolu (https://httpd.apache.org/docs/2.4/fr/mod/mod_proxy_fcgi.html).
Comme c'était le paramétrage par défaut sur Debian / Ubuntu avec Apache 2.2, il faut adapter la configuration, pour utiliser le port TCP.
Dans notre configuration, nous prenons comme hypothèse de définir le paramétrage au niveau de chaque VirtualHost. On peut également le faire au niveau global (cf. article cité plus haut).
cat /etc/apache2/sites-available/php.conf <VirtualHost *:80> ServerName php.test.local DocumentRoot /var/www/php ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/php/$1 <Directory /var/www/php/> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error_php.log CustomLog ${APACHE_LOG_DIR}/access_php.log combined </VirtualHost>
On installe php5-fpm, puis active les modules proxy + proxy_fcgi, puis la nouvelle configuration PHP, avant de redémarrer le service apache :
apt-get install php5-fpm apache2-mpm-worker a2enmod proxy a2enmod proxy_fcgi a2enconf php a2dismod php5 mpm_prefork a2enmod mpm_worker sudo service apache2 restart # Vérification du mode Worker apache2ctl -V Server version: Apache/2.4.7 (Ubuntu) Server built: Mar 10 2015 13:05:59 Server's Module Magic Number: 20120211:27 Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3 Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3 Architecture: 64-bit Server MPM: worker
A ce stade, si on accède à l'URL http://mon.serveur.com/info.php, on a un message : Service Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later. Apache/2.4.6 (Ubuntu) Server at saucy.test.local Port 80 Dans le fichier /var/log/apache2/error.log :
[Thu Dec 05 10:57:09.123785 2013] [proxy:error] [pid 6060:tid 139966214838016] (111)Connection refused: AH00957: FCGI: attempt to connect to 127.0.0.1:9000 (*) failed [Thu Dec 05 10:57:09.125134 2013] [proxy_fcgi:error] [pid 6060:tid 139966214838016] [client 192.168.122.1:48002] AH01079: failed to make connection to backend: 127.0.0.1
Il faut paramétrer le pool php-fpm par défaut : /etc/php5/fpm/pool.d/www.conf Modifier le fichier avec les informations concernant le listen:
;listen = /var/run/php5-fpm.sock listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1
Puis redémarrer php5-fpm :
service php5-fpm restart
Si on accède à l'URL http://php.test.local/info.php, on constate bien :
Server API FPM/FastCGI
Apache 2.4.7 et les sockets
Bonjour et merci énormément pour ce tuto très clair.
Vous dites que nous ne pouvons pas utiliser de sockets avec apache 2.4.7 sur ubuntu. Est-ce toujours le cas aujourd'hui avec ubuntu 14.04?
sudo apt-get install apache2
devrait être :
Mise à jour effectuée, merci
Mise à jour effectuée, merci pour la correction