Apache PHP · 4 min read · Dec 03, 2025

Cómo configurar Apache2 con mod_fcgid y PHP5 en Mandriva 2009.1

Cómo configurar Apache2 con mod_fcgid y PHP5 en Mandriva 2009.1

Versión 1.0
Autor: Falko Timme
Sígueme en Twitter

Este tutorial describe cómo puedes instalar Apache2 con mod_fcgid y PHP5 en Mandriva 2009.1. mod_fcgid es una alternativa compatible al antiguo mod_fastcgi. Te permite ejecutar scripts PHP con los permisos de sus propietarios en lugar del usuario de Apache.

¡No emito ninguna garantía de que esto funcione para ti!

1 Nota Preliminar

Estoy usando un servidor Mandriva 2009.1 en este tutorial con el nombre de host server1.example.com y la dirección IP 192.168.0.100.

Crearé dos vhosts de Apache en este tutorial, www.example1.com y www.example2.com, para demostrar el uso de mod_fcgid.

2 Instalando Apache2/mod_fcgi/PHP5

Primero actualizamos nuestra base de datos de paquetes:

urpmi.update -a

Podemos instalar Apache2, mod_fcgid y PHP5 de la siguiente manera (mod_fcgid requiere apache-mpm-worker en lugar de apache-mpm-prefork, así que si apache-mpm-prefork está actualmente instalado, los módulos de Apache que dependen de él serán eliminados, como apache-mod_php):

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

[root@server1 ~]# urpmi apache-mpm-worker apache-mod_fcgid php-fcgi
Los siguientes paquetes deben ser eliminados para que otros sean actualizados:
apache-mod_perl-2.0.4-5mdv2009.1.x86_64
(debido a conflictos con apache-mpm-worker-2.2.11-10.5mdv2009.1.x86_64)
apache-mod_php-5.2.9-1mdv2009.1.x86_64
(debido a conflictos con apache-mpm-worker[>= 2.2.8]) (y/N) <– y
Para satisfacer las dependencias, se van a instalar los siguientes paquetes:
Paquete Versión 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
Se liberarán 6MB de espacio en disco.
Se recuperarán 977KB de paquetes.
¿Proceder con la instalación de los 7 paquetes? (Y/n) <– Y

A continuación, abrimos /etc/php.ini…

vi /etc/php.ini

… y añadimos la línea cgi.fix_pathinfo = 1 justo al final del archivo:

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

Luego reiniciamos Apache:

/etc/init.d/httpd restart

3 Creando Vhosts para www.example1.com y www.example2.com

Ahora crearé dos vhosts, www.example1.com (con la raíz del documento /var/www/web1/web) y www.example2.com (con la raíz del documento /var/www/web2/web). www.example1.com será propiedad del usuario y grupo web1, y www.example2.com del usuario y grupo web2.

Primero creamos los usuarios y grupos:

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

Luego creamos las raíces del documento y las hacemos propiedad de los usuarios/grupos web1 y web2 respectivamente:

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

Ejecutaremos PHP usando suExec; la raíz del documento de suExec es /var/www, como muestra el siguiente comando:

/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 ~]#

Por lo tanto, no podemos llamar al binario PHP (/usr/bin/php-fcgi) directamente porque se encuentra fuera de la raíz del documento de suExec. Como suExec no permite enlaces simbólicos, la única forma de resolver el problema es crear un script envoltorio para cada sitio web en un subdirectorio de /var/www; el script envoltorio llamará al binario PHP /usr/bin/php-fcgi. El script envoltorio debe ser propiedad del usuario y grupo de cada sitio web, por lo que necesitamos un script envoltorio para cada sitio web. Voy a crear los scripts envoltorios en subdirectorios de /var/www/php-fcgi-scripts, por ejemplo, /var/www/php-fcgi-scripts/web1 y /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 línea PHPRC contiene el directorio donde se encuentra el archivo php.ini (es decir, /etc/ se traduce a /etc/php.ini). PHP_FCGI_MAX_REQUESTS es el número máximo de solicitudes antes de que un proceso fcgid se detenga y se inicie uno nuevo. PHP_FCGI_CHILDREN define el número de hijos de PHP que se lanzarán.

Los scripts php-fcgi-starter deben ser ejecutables, y deben ser (y los directorios en los que se encuentran) propiedad del usuario y grupo del sitio 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

Ahora creamos los vhosts de Apache para www.example1.com y www.example2.com. Agrega los siguientes dos vhosts al final 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 |

Asegúrate de llenar las rutas correctas (y el usuario y grupo correctos en las líneas SuexecUserGroup).

Recarga Apache después:

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

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.