Inici > Administració, Linux > Configurar apache en modo mpm worker con php5 y fastcgi en ubuntu server

Configurar apache en modo mpm worker con php5 y fastcgi en ubuntu server

dimecres, 16 de maig de 2012 Imprimir

Quizás hayáis escuchado hablar del módulo mpm worker para apache. Si no, yo os hago un breve resumen (corregidme si me equivoco).

Al compilar apache podemos escoger el modo en que éste maneja los procesos del servidor. Según el modo que utilicemos se nos ofrecen ciertos pros y contras. Los pros del modo worker de apache es que es bastante más rápido que el modo prefork (que es el que viene habilitado por defecto). Los “contras” del modo worker es que el módulo de php para apache no es compatible con él y en lugar de ello deberemos utilizar el módulo de cgi.

A pesar de que he dicho lo de “al compilar”, no os preocupéis; podemos cambiar el modo en que funciona apache de manera rápida con aptitude.

Podéis encontrar más información y diferencias entre MPMs en: http://httpd.apache.org/docs/2.2/mpm.html.

Paquetes que necesitamos:

  • apache2
  • apache2-mpm-worker
  • libapache2-mod-fcgid
  • php5-cli
  • php5-cgi
sudo apt-get install apache2 apache2-mpm-worker libapache2-mod-fcgid php5-cli php5-cgi

Una vez instalados, vamos a configurar apache para que ejecute ficheros php utilizando el módulo fastCGI:

sudo nano /etc/apache/conf.d/php

Pegad esto:

<Directory /usr/share>
        AddHandler fcgid-script .php
        FCGIWrapper /usr/lib/cgi-bin/php5 .php
        Options ExecCGI FollowSymlinks Indexes
</Directory>

<Files ~ (\.php)>
        AddHandler fcgid-script .php
        FCGIWrapper /usr/lib/cgi-bin/php5 .php
        Options +ExecCGI
        allow from all
</Files>

Nota: Al actualizar a php 5.4 he necesitado descomentar el último trozo del fichero de configuración /etc/apache2/mods-enabled/php5_cgi.conf ya que sinó me descargaba los ficheros php en lugar de ejecutarlos. El trozo al que me refiero es este:

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
	AllowOverride None
	Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
	Order allow,deny
	Allow from all
</Directory>
Action application/x-httpd-php /cgi-bin/php5

Reiniciad apache:

sudo service apache2 restart

Y para acabar de finiquitar, provad un fichero php en vuestro servidor:

sudo echo '<?php phpinfo()' > /var/www/index.php

Si el parámetro no funciona simplemente cread un fichero index.php en vuestro webroot con el contenido

<?php phpinfo();

Accedéis a http://localhost et voilà; Apache2 con módulo MPM-worker y PHP5 con FastCGI funcionando.

Si queréis verificar que realmente apache está funcionando en modo worker, podéis ejecutar el comando

:~$ apache2 -l
Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  worker.c
  http_core.c
  mod_so.c

Fijaros que está cargado el módulo worker.c. Os recuerdo que por defecto apache viene con prefork.c por defecto.

Ahora vendría “lo wapo”: el fine tuning. Una de las mejores fuentes que encontraréis para saber como “tunear” vuestro apache es la propia documentación de apache:

httpd.apache.org/docs/2.2/mod/mpm_common.html

E ir revisando con herramientas como top o ps los recursos que consume. Éste otro enlace puede que os dé alguna ayuda, a pesar de que está enfocado a funcionar con glassfish:

http://alexandru-ersenie.com/2011/09/19/performance-tuning-for-apache-worker-model-with-glassfish-application-server/

Además tendríais que hacerle algún tipo de test de estrés, claro.. pero ese es un tema como para hacer un artículo entero, así que yo lo dejo para otro día, pero os animo a que busquéis por google, que seguro que encontráis unas cuantas vías para “estresar” vuestro servidor.

Más información y fuentes:

PS. A todo esto.. todo el tutorial lo he hecho utilizando Ubuntu Server 12.04 x64 :)

  1. dilluns, 4 de març de 2013 a les 20:42 | #1

    Siguiendo tu guia de Apache con FastCGI, me encontre con que ahora este no quiere reconocer las paginas con .php. no ejecuta estos archivos a menos que se ponga directo. Index.php no es reconocido y dispara un error 500.
    este lee asi;
    .htaccess: Invalid command ‘php_value’, perhaps misspelled or defined by a module not included in the server configuration

    -EDITADO: Ya lo resolvi. el .htaccess tenia un php_value del servicio de NewRelic.com que al parecer no es compatible con lo que aqui indicas.

    Ahora los Host virtuales si me funcionan y hacen “Parsing” del index.php. Pero el “Default Host” que esta en /var/www/ no soporta index.php.

    ¿Que podra ser esto?

  2. dimarts, 5 de març de 2013 a les 01:27 | #2

    Mira el fichero /etc/apache/sites-available/default y asegúrate de que esté todo correcto.

    Edit: Por cierto, lo de php_value no te iba porque php_value únicamente es compatible con php-cli, no con php-cgi que es lo que estamos instalando aquí.

  3. dimarts, 30 d'abril de 2013 a les 20:28 | #3

    Muchas gracias, necesitaba echar a andar FastCGI y has sido mi solución.

  4. Inaxio
    dimarts, 25 de juny de 2013 a les 14:19 | #4

    Hola Booletaire, he intentado seguir tu tutorial, pero tengo el problema que me descarga los ficheros php. He intentado editar el fichero /etc/apache2/mods-enabled/php5_cgi.conf pero no lo tengo.
    Te dejo algun dato mas por si puede ayudar.
    Ubuntu Server 12.04 LTS
    PHP Version 5.3.10-1ubuntu3.6

  5. dimecres, 24 de juliol de 2013 a les 11:52 | #5

    Ei Inaxio, perdona por no haber contestado antes; últimamente tengo cero tiempo.

    Si te está descargando los ficheros php seguramente sea por una mala configuración. Te recomiendo lo mismo que a Josue, que revises los ficheros de configuración y te asegures de que todo está como indiqué.

    En tu caso lo más probable es que fastcgi no se esté ejecutando correctamente. Revisa los logs de error (en /var/log/apache/error.log normalmente) y seguro que a partir de ahí podrás solucionarlo.

Comentaris tancats.