Serveur Web · 4 min read · Dec 03, 2025

Comment configurer Apache2 avec mod_fcgid et PHP5 sur Mandriva 2009.1

Comment configurer Apache2 avec mod_fcgid et PHP5 sur Mandriva 2009.1

Version 1.0
Auteur : Falko Timme
Suivez-moi sur Twitter

Ce tutoriel décrit comment vous pouvez installer Apache2 avec mod_fcgid et PHP5 sur Mandriva 2009.1. mod_fcgid est une alternative compatible à l’ancien mod_fastcgi. Il vous permet d’exécuter des scripts PHP avec les permissions de leurs propriétaires au lieu de l’utilisateur Apache.

Je ne garantis pas que cela fonctionnera pour vous !

1 Remarque préliminaire

J’utilise un serveur Mandriva 2009.1 dans ce tutoriel avec le nom d’hôte server1.example.com et l’adresse IP 192.168.0.100.

Je vais créer deux vhosts Apache dans ce tutoriel, www.example1.com et www.example2.com, pour démontrer l’utilisation de mod_fcgid.

2 Installation d’Apache2/mod_fcgi/PHP5

Tout d’abord, nous mettons à jour notre base de données de paquets :

urpmi.update -a

Nous pouvons installer Apache2, mod_fcgid et PHP5 comme suit (mod_fcgid nécessite apache-mpm-worker au lieu d’apache-mpm-prefork, donc si apache-mpm-prefork est actuellement installé, les modules Apache qui en dépendent seront supprimés, comme apache-mod_php) :

urpmi apache-mpm-worker apache-mod_fcgid php-fcgi

[root@server1 ~]# urpmi apache-mpm-worker apache-mod_fcgid php-fcgi
Les paquets suivants doivent être supprimés pour que d’autres puissent être mis à jour :
apache-mod_perl-2.0.4-5mdv2009.1.x86_64
(en raison de conflits avec apache-mpm-worker-2.2.11-10.5mdv2009.1.x86_64)
apache-mod_php-5.2.9-1mdv2009.1.x86_64
(en raison de conflits avec apache-mpm-worker[>= 2.2.8]) (y/N) <– y
Pour satisfaire les dépendances, les paquets suivants vont être installés :
Paquet Version Release Arch
(medium “Main Updates”)
apache-base 2.2.11 10.5mdv2009.1 x86_64
apache-mod_ssl 2.2.11 10.5mdv2009.1 x86_64
apache-modules 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-prefork 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-worker 2.2.11 10.5mdv2009.1 x86_64
php-fcgi 5.2.9 6.2mdv2009.1 x86_64
(medium “Contrib”)
apache-mod_fcgid 2.2 6mdv2009.1 x86_64
6 Mo d’espace disque seront libérés.
977 Ko de paquets seront récupérés.
Procéder à l’installation des 7 paquets ? (Y/n) <– Y

Ensuite, nous ouvrons /etc/php.ini…

vi /etc/php.ini

… et ajoutons la ligne cgi.fix_pathinfo = 1 à la fin du fichier :

| [...] cgi.fix_pathinfo = 1 |

Puis redémarrez Apache :

/etc/init.d/httpd restart

3 Création de Vhosts pour www.example1.com et www.example2.com

Je vais maintenant créer deux vhosts, www.example1.com (avec le document root /var/www/web1/web) et www.example2.com (avec le document root /var/www/web2/web). www.example1.com sera possédé par l’utilisateur et le groupe web1, et www.example2.com par l’utilisateur et le groupe web2.

Tout d’abord, nous créons les utilisateurs et les groupes :

groupadd web1  
groupadd web2  
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1  
useradd -s /bin/false -d /var/www/web2 -m -g web2 web2  
chmod 755 /var/www/web1  
chmod 755 /var/www/web2

Ensuite, nous créons les racines de documents et les faisons posséder par les utilisateurs/groupes web1 et web2 respectivement :

mkdir -p /var/www/web1/web  
chown web1:web1 /var/www/web1/web  
mkdir -p /var/www/web2/web  
chown web2:web2 /var/www/web2/web

Nous allons exécuter PHP en utilisant suExec ; la racine de documents de suExec est /var/www, comme le montre la commande suivante :

/usr/sbin/suexec -V
[root@server1 ~]# /usr/sbin/suexec -V  
 -D AP_DOC_ROOT="/var/www"  
 -D AP_GID_MIN=100  
 -D AP_HTTPD_USER="apache"  
 -D AP_LOG_EXEC="/var/log/httpd/suexec_log"  
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"  
 -D AP_SUEXEC_UMASK=077  
 -D AP_UID_MIN=100  
 -D AP_USERDIR_SUFFIX="public_html"  
[root@server1 ~]#

Par conséquent, nous ne pouvons pas appeler le binaire PHP (/usr/bin/php-fcgi) directement car il est situé en dehors de la racine de documents de suExec. Comme suExec n’autorise pas les liens symboliques, le seul moyen de résoudre le problème est de créer un script wrapper pour chaque site web dans un sous-répertoire de /var/www ; le script wrapper appellera alors le binaire PHP /usr/bin/php-fcgi. Le script wrapper doit être possédé par l’utilisateur et le groupe de chaque site web, donc nous avons besoin d’un script wrapper pour chaque site web. Je vais créer les scripts wrapper dans des sous-répertoires de /var/www/php-fcgi-scripts, par exemple /var/www/php-fcgi-scripts/web1 et /var/www/php-fcgi-scripts/web2.

mkdir -p /var/www/php-fcgi-scripts/web1  
mkdir -p /var/www/php-fcgi-scripts/web2
vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

La ligne PHPRC contient le répertoire où se trouve le fichier php.ini (c’est-à-dire, /etc/ se traduit par /etc/php.ini). PHP_FCGI_MAX_REQUESTS est le nombre maximum de requêtes avant qu’un processus fcgid ne soit arrêté et qu’un nouveau soit lancé. PHP_FCGI_CHILDREN définit le nombre d’enfants PHP qui seront lancés.

Les scripts php-fcgi-starter doivent être exécutables, et ils (et les répertoires dans lesquels ils se trouvent) doivent être possédés par l’utilisateur et le groupe du site web :

chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter  
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter  
chown -R web1:web1 /var/www/php-fcgi-scripts/web1  
chown -R web2:web2 /var/www/php-fcgi-scripts/web2

Maintenant, nous créons les vhosts Apache pour www.example1.com et www.example2.com. Ajoutez les deux vhosts suivants à la fin de /etc/httpd/conf/httpd.conf :

vi /etc/httpd/conf/httpd.conf

| [...] NameVirtualHost *:80 ServerName www.example1.com ServerAlias example1.com ServerAdmin [email protected] DocumentRoot /var/www/web1/web/ SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off ServerName www.example2.com ServerAlias example2.com ServerAdmin [email protected] DocumentRoot /var/www/web2/web/ SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off |

Assurez-vous de remplir les bons chemins (et le bon utilisateur et groupe dans les lignes SuexecUserGroup).

Rechargez Apache ensuite :

/etc/init.d/httpd reload
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.