En muchas ocasiones van a necesitar un servidor de alta disponibilidad, especialmente un server que va a tener una gran cantidad de trafico. Para este tipo de requerimiento es indispensable usar php5 corriendo bajo fastcgi, ya que es mucho mas rápido que el modo tradicional de ejecutando php5 como modulo de apache2.
Empecemos con la definición de porque el apache2-mpm-worker es mas rápido que el el tradicional apache2-mpm-prefork:
El Modelo de MultiProcesamiento (MPM) «worker» proporciona una implementación de ejecución en hilos del HTTPD de Apache. Es considerablemente más rápido que el modelo tradicional y es el modelo de multiprocesamiento recomendado.
Normalmente «worker» es una buena elección para servidores con gran tráfico porque tiene menor consumo de memoria que el modelo de multiprocesamiento «prefork».
Vamos a ejecutar el comando:
apt-get install apache2-mpm-worker
Va a instalar todos los paquetes necesarios.
Luego de esto necesitan instalar el php5-cgi, esto lo hacen con el siguiente comando:
apt-get install php5-cgi
Dependiendo de los casos, hay programadores que necesitan el paquete de developer de php5, asi que en mi caso si se necesita, así que lo vamos a instalar con el siguiente comando:
apt-get install php5-dev
Actualizacion: ya se puede instalar el paquete libapache2-mod-fastcgi desde Debian etch con el siguiente comando:
apt-get install libapache2-mod-fastcgi
Pueden omitir este parte:
(separada por los ———– )
——————————————————————————
Necesitamos el paquete libapache2-mod-fastcgi, actualmente este paquete esta catalogado como “inestable” (unstable), asi que vamos a tener que bajar el paquete unstable SID, (sid es un nombre utilizado para la lista de paquetes catalogados que estan en desarrollo).
La ultima versión del paquete es la siguiente:
libapache2-mod-fastcgi_2.4.6-1_i386.deb
Lamentablemente esta versión NO es compatible con debian etch, ya que necesita la versión apache-common.2.2.4.
Para sobre pasar este obstáculo vamos a instalar el siguiente paquete:
libapache2-mod-fastcgi_2.4.2-8_i386.deb
No van a tener ningún problema para encontrar este paquete, simplemente pueden entrar a www.google.com y poner esto en la casilla de búsqueda, y le saldrán los resultados. En mi caso lo baje de la siguiente dirección:
libapache2-mod-fastcgi_2.4.2-8_i386.deb
Después de bajarlo, lo van a tener que instalar, así que ejecutaremos el siguiente comando:
dpkg -i libapache2-mod-fastcgi_2.4.2-8_i386.deb\
————————————————————————–
Después de instalar este paquete, tenemos que habilitar el modulo “actions”, esto lo hacemos con el siguiente comando:
a2enmod actions
Despues de hacer esto van a reiniciar el servicio de apache2 con el siguiente comando:
/etc/init.d/apache2 restart
Después de hacer esto vamos a modificar el archivo /etc/apache2/apache2.conf, al final del archivo vamos a poner el siguiente codigo:
#fastcgi
FastCgiServer /var/www/fcgi-php/php -idle-timeout 120
AddHandler php-fastcgi .php
AddType application/x-httpd-php .php
ScriptAlias /fcgi-php/ /var/www/fcgi-php/
Action php-fastcgi /fcgi-php/php
<Location /fcgi-bin/php>
# fastcgi-script is an internal handler
SetHandler fastcgi-script
</Location>
Después de esto vamos a crear el directorio fcgi-php con el siguiente comando:
mkdir /var/www/fcgi-php
Dentro de este directorio vamos a crear un archivo llamado php, con el siguiente código:
#!/bin/sh
# number of children to spawn
PHP_FCGI_CHILDREN=250
export PHP_FCGI_CHILDREN
# maximum requests a child can serve before it is re-spawned
PHP_FCGI_MAX_REQUESTS=200
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php5-cgi
Esto lo pueden configurar a su gusto, a mi con esta configuración me ha dado resultado, todo depende las capacidades del server que tengan. Pueden empezar con esta configuración.
Guardan el archivo.
Después de esto vamos a darle permisos de ejecución al archivo php, esto lo hacemos con el siguiente comando:
chmod +x php
Después de esto le vamos a cambiar de owner, al directorio /var/www/fcgi-php, le vamos a poner de owner el usuario y grupo de apache2, que en debian es www-data, esto lo hacemos con el siguiente comando:
chown www-data.www-data -R /var/www/fcgi-php/
Cambiándole permisos nos vamos a la siguiente carpeta:
cd /etc/apache2/mods-enabled
Ahí editaremos el archivo fastcgi.conf y lo editaremos para que quede de la siguiente manera:
#<IfModule mod_fastcgi.c>
# AddHandler fastcgi-script .fcgi
#FastCgiWrapper /usr/lib/apache2/suexec2
# FastCgiIpcDir /var/lib/apache2/fastcgi
#</IfModule>
<IfModule mod_fastcgi.c>
FastCgiIpcDir /tmp
FastCgiConfig -flush
FastCgiConfig -maxProcesses 200
# FastCgiConfig -minProcesses 40
FastCgiConfig -idle-timeout 200
FastCgiConfig -pass-header Authorization
FastCgiConfig -pass-header HTTP_AUTHORIZATION
FastCgiConfig -killInterval 300 -autoUpdate
FastCgiConfig -singleThreshold 100
# FastCgiServer -idle-timeout 60
</IfModule>
Aquí pueden modificar las opciones como les convenga, pero con esta configuración pueden empezar. Después de esto vamos a hacer la prueba que el servidor este corriendo phps con fastcgi, creamos un archivo llamado php.php (este nombre puede ser cualquiera, por ejemplo index.php info.php no importa). Y a este archivo le insertamos este código:
<html>
<head>
<title>PHPinfo</title>
</head>
<body bgcolor=#FFFFFF>
<p><? phpinfo() ?></p>
</body>
</html>
Con este código nos desplegara la información de la versión de php5 que estamos corriendo en el server, si por alguna razón este archivo no carga, esto quiere decir que tenemos algún tipo de problema.
Apuntaremos el navegador al ip o hostname que le tengamos definido, en mi caso entre a:
http://192.168.10.1/php.php
Y me desplegó una pantalla con esta información de php:

Si se dan cuenta en la casilla de Server API dice lo siguiente:
Server API CGI/FastCGI
Con esto confirmamos que exitosamente estamos corriendo apache2-mpm-woker + php5 con fastcgi.
Cualquier comentario o sugerencia es bienvenida.
Excelente tutorial. La configuración del módulo mod_fastcgi en Apache para ejecutar PHP como FastCGI sobre CentOS me estaba quebrando la cabeza. Este tutorial es claro, sencillo, y reune en forma breve información dispersa en la web.
Claro y lo más importante. Muchas pero muchas gracias por el artículo.
Me alegro que te haya servido! saludos!
¡Muchas gracias!
Realmente sencillo y claro, precisamente esta mañana me enfrentaba al problema de tener que implantar en un servidor de producción Debian con apache2mpm-worker un php5, y esto me ha facilitado inmensamente la labor. ¡Gracias!
me sale este error:
Forcing reload of web server (apache2)…Syntax error on line 670 of /etc/apache2/apache2.conf:
Invalid command ‘FastCgiServer’, perhaps misspelled or defined by a module not included in the server configuration
narco, instalaste de manera correcta el fastcgi? pareciera como que si no lo instalaste.
Tienes razon, lo tenia mal instalado. Segui todos los pasos de tu tutorial, solo que cambie la manera de instalar el fcgi, utilize esto:
apt-get install libapache2-mod-fastcgi
Y se instalo correctamente. Y ya pude reiniciar el apache.
Tengo una pregunta. ¿Con la configuracion de tu tutorial no es nesesario añadir al .htaccess las lineas siguientes?:
AddHandler fastcgi-script .fcgi
Options +FollowSymLinks +ExecCGI
Ya que tengo apache con hosts virtuales.
Gracias.
narco:
Para nada, no es necesario modificar el .htaccess.
Con respecto a que instalaste el libapache2-mod-fastcgi, estuvo bien que hicieras esto, ya que en el momento que hice el tutorial no estaba disponible ese paquete.
Saludos.
Tengo problemas con mi apache2 todo estaba muy bien hasta que reinicie el server y se me quedo paralizado al cerrar el apache2
Soy nuevo en esto de linux y estoy decidido a no volver a win32 nunca + pero nesecito saber como funciona esto y de que se trata este error
W: Imposible obtener http://192.168.100.2/mirror/debian/dists/lenny/non-free/binary-i386/Packages 404 Not Found
@Newlinusero
Significa que la direccion que buscas en tu servidor no existe, ese es el error 404.