Es sorprendente la cantidad de sitios webs que ejecutan el PHP con mod_php, lo cual, a parte de inseguro, el rendimiento en muchas situaciones no es óptimo.

En esta entrada voy a explicaros como configurar un sitio con FastCGI como handler de PHP. Más adelante, en otra entrada, explicaré como configurarlo con PHP-FPM.

Lo primero de todo, damos por hecho que ya tenemos un virtualhost configurado en Apache, con PHP instalado y siendo ejecutado mediante mod_php.

Partiendo de esta base, el primer paso será instalar el módulo mod_fcgid:

yum install mod_fcgid

Con esto, tendremos instalado el módulo de Apache que permitirá que configuremos nuestros sitios con FastCGI.

Seguidamente, debemos deshabilitar el handler de PHP por defecto, editando el fichero /etc/httpd/conf.d/php.conf y comentando las siguientes líneas:

#<FilesMatch \.phps$>
#    SetHandler application/x-httpd-php-source
#</FilesMatch>

Estas líneas pueden cambiar ligeramente dependiendo de nuestra versión de PHP y entorno, pero son de sintaxis similar.
IMPORTANTE: Si, por alguna razón, queremos que algún VirtualHost siga siendo ejecutado con mod_php, debemos añadir estas líneas que acabamos de comentar en el fichero de configuración del VirtualHost en cuestión.

Seguidamente, vamos a crear un fichero php.fastcgi en el que configuraremos la ejecución de FastCGI.

En nuestro ejemplo, suponemos que el dominio está en /var/www/prueba.com/, por lo que crearemos la carpeta /var/www/prueba.com/cgi-bin y dentro de ella crearemos el fichero php.fastcgi:

mkdir -p /var/www/prueba.com/cgi-bin
vim /var/www/prueba.com/cgi-bin/php.fastcgi

Dentro del fichero, añadimos el siguiente texto:

#!/bin/bash

PHPRC="/etc/php.ini"
PHP_FCGI_CHILDREN=4
PHP_FCGI_MAX_REQUESTS=1000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php-cgi

Son especialmente importantes la línea “PHPRC”, donde le indicamos el php.ini a usar, y la línea “exec”, donde se encuentra nuestro módulo cgi de php. Generalmente se encuentra en dicha ruta, pero si tenéis un entorno diferente, puede variar, bastaría con localizarlo con locate.

Tras esto, cambiamos el owner del fichero y directorio al del usuario del sitio, en nuestro caso prueba, y le damos permisos de ejecución:

chown -R prueba:prueba /var/www/prueba.com/cgi-bin/
chmod +x /var/www/prueba.com/cgi-bin/php.fastcgi

Por último, solo quedaría añadir dentro del virtualhost del dominio las líneas ScriptAlias, y dentro del document root, las lineas Options, AddHandler y Action, como en el ejemplo a continuación:

<VirtualHost *:80>
    ServerName prueba.com
    DocumentRoot /var/www/prueba.com/html
    ScriptAlias /cgi-bin/ "/var/www/prueba.com/cgi-bin/"
    <Directory "/var/www/prueba.com/html">
            Options +Indexes +FollowSymLinks +ExecCGI
            AddHandler php-fastcgi .php
            Action php-fastcgi /cgi-bin/php.fastcgi
            AllowOverride All
            Order allow,deny
            Allow from All
    </Directory>
</VirtualHost>

Como vemos, lo que hacemos es crear un alias del directorio cgi-bin, donde esta el fichero php.fastcgi, y después indicarle que en el documentroot ejecute el PHP con dicho handler.

Tras esto, solo habría que reiniciar apache y nuestro PHP se ejecutaría con FastCGI y nuestro usuario.

Esta configuración se debe realizar paso a paso en cada dominio, para que sea ejecutado con su propio usuario.

Adicionalmente, es muy recomendable cambiar el mpm de Apache de prefork a Event, una vez tengamos todos los dominios en FastCGI, para ello bastaría con editar el fichero /etc/httpd/conf.modules.d/00-mpm.conf:

Y comentar la línea de prefork, descomentando la de event:

#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

LoadModule mpm_event_module modules/mod_mpm_event.so

Esto mejorará el rendimiento en gran medida.

Espero que os sirva.


0 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *