Directive Apache pour FastCGI

Au début Apache utilisait le module PHP pour interpréter les scripts. Pour accélérer les exécution sde scripts, on en est arrivé à faire exécuter via un programme externe au serveur, dit CGI. CGI veut dire Common Gateway Interface, c’était un terme très en vogue au début du web, car on n’avait pas à disposition autant de programme pur web pour faire du rendu, on interfaçait un programme classique avec el web, d’où le nom d’interface.

La version 2 d’Apache utilise un programme CGI pour exécuter des pages php. Donc dans chaque virtual host il va falloir configurer le fait que les fichiers avec extension php soient exécutée avec le programme CGI, le serveur Apache communique avec le programme via le protocol FastCGI avec un module Apache appelé mod_fcgid !

Note : Il existe un protocol alternatif appelé PHP-FPM (FastCGI Process Manager), qui offre des fonctionnalités accrues non abordée dans cette page, spécialement pour des sites à fort traffic.

fichier php <-> mod_fcgid <-> programme exécutant les script php

Le handler fcgid-script est utilisé dans la section <Directory>

AddHandler fcgid-script .php
AddHandler fcgid-script .php5
AddHandler fcgid-script .php7.0
AddHandler fcgid-script .php7.1

Le handler fcgid-script fait en sorte que les fichiers PHP soient traité avec le protocol FastCGI. Ensuite ce qui vient à la suite

FCGIWrapper /home/printplusprod/fcgi-bin/php5.fcgi .php
FCGIWrapper /home/printplusprod/fcgi-bin/php5.fcgi .php5
FCGIWrapper /home/printplusprod/fcgi-bin/php7.0.fcgi .php7.0
FCGIWrapper /home/printplusprod/fcgi-bin/php7.1.fcgi .php7.1

Donc on fait en deux temps dans la configuration du programme qui va exécuter els fichier PHP, pas très intuitif je le reconnais.

FCGIWrapper (maintenant FCgidWrapper) est la directive qui dit comment les process sont spawnés. La syntaxe de FCGIWrapper est :

FcgidWrapper command [ suffix ] [ virtual ]

Donc prenons la première ligne, la commande est le script shell /home/printplusprod/fcgi-bin/php5.fcgi. Le suffix est ‘.php’, on restreint l’exécution de ce script pour les urls se terminant par ‘.php’. Ce suffix est optionnel. Si vous ne le mettez pas, tout sera exécuté par le programme CGI.

Où se trouve l’exécutable CGI? nous le trouvons dans le fichier php5.fcgi dont voici le contenu exemple :

#!/bin/bash
PHPRC=$PWD/../etc/php5
export PHPRC
umask 022
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=99999
export PHP_FCGI_MAX_REQUESTS
SCRIPT_FILENAME=$PATH_TRANSLATED
export SCRIPT_FILENAME
exec /usr/bin/php5-cgi

In fine c’est /usr/bin/php5-cgi qui exécute le script PHP.

Un autre exemple

#!/bin/bash
PHPRC=$PWD/../etc/php7.0
export PHPRC
umask 022
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=99999
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php-cgi7.0

Là c’est le programme php-cgi7.0 qui est utilisé.

En fait le FCGIWrapper est un script shell qui fait appel à un programme.