PHP-FastCGI por sitio: pruebas y php.ini personalizado

4 Pruebas
Crea un pequeño archivo PHP en el sitio web, por ejemplo en www.example1.com, para comprobar que PHP corre como CGI/FastCGI.
Abre y edita:
vi /var/www/web1/web/info.php
Pega el siguiente contenido:
Accede a ese archivo desde un navegador (http://www.example1.com/info.php). Si todo está correcto, la salida debería ser similar y verás “CGI/FastCGI” en la línea Server API:
Importante: usa archivos temporales de prueba fuera del área pública si el sitio ya está en producción; elimina info.php cuando termines.
5 php.ini personalizado para cada sitio
Cada sitio tiene su propio script wrapper php-fcgi-starter, por lo que puedes usar un php.ini distinto por sitio. A modo de demostración, copia el php.ini por defecto a /var/www/web2/ y cambia la propiedad al usuario del sitio:
cp /etc/php5/cgi/php.ini /var/www/web2/
chown web2:web2 /var/www/web2/php.ini
(Ahora puedes modificar /var/www/web2/php.ini según tus necesidades.)
Edita el script wrapper del sitio web2:
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter
Y pon el directorio /var/www/web2/ en la variable PHPRC:
#!/bin/sh
PHPRC=/var/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php
Recarga Apache:
/etc/init.d/apache2 reload
Crea un nuevo info.php para www.example2.com:
vi /var/www/web2/web/info.php
Visita http://www.example2.com/info.php y comprueba la línea “Loaded Configuration File”; ahora debería mostrar /var/www/web2/php.ini:
Nota: PHPRC puede apuntar a un archivo o a un directorio que contenga php.ini. Asegúrate de permisos adecuados para que el proceso PHP pueda leerlo.
6 Cambiar ajustes individuales de PHP
Si no deseas proporcionar un php.ini completo, puedes modificar ajustes individuales en el script wrapper usando la opción -d del ejecutable PHP. Por ejemplo, para desactivar magic_quotes_gpc en www.example2.com, edita el wrapper:
vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter
#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php -d magic_quotes_gpc=off
Recarga Apache:
/etc/init.d/apache2 reload
Vuelve a cargar http://www.example2.com/info.php y busca la línea magic_quotes_gpc — debería mostrar “Off”:
Alternativas y cuándo usarlas
- mod_php (integrado en Apache): más sencillo para hosting compartido tradicional, pero cada proceso Apache carga PHP en memoria, lo que puede aumentar el uso de RAM.
- php-fpm: recomendado para alto rendimiento y gestión avanzada de procesos; preferible cuando necesitas pools con configuraciones distintas por sitio.
- Contenerización (Docker): útil para aislamiento fuerte y despliegues reproducibles; añade complejidad de orquestación.
Cuándo puede fallar esta técnica:
- Permisos incorrectos en php.ini o en el directorio PHPRC.
- Rutas de ejecutable PHP distintas en distribuciones modernas (p. ej., /usr/bin/php-cgi o binarios de php-fpm).
- Módulos compilados estáticamente que ignoran php.ini por sitio.
Mini-metodología: pasos rápidos para aplicar por sitio
- Crear copia de php.ini en el directorio del sitio.
- Ajustar permisos y propietario (que el usuario del sitio pueda leerlo si es necesario).
- Editar php-fcgi-starter y establecer PHPRC al directorio del sitio.
- Opcional: añadir -d para ajustes puntuales.
- Recargar Apache y verificar con phpinfo().
- Eliminar archivos de prueba y documentar cambios.
Checklist por rol
Administrador del sistema:
- Verificar rutas de PHP y permisos del archivo php.ini.
- Asegurar reinicio/recarga segura de Apache.
- Monitorizar rendimiento tras cambios.
Desarrollador web:
- Probar funcionalidades dependientes de cambios de php.ini.
- Comprobar errores en logs de PHP/Apache.
Equipo de seguridad:
- Revisar directivas sensibles (display_errors, expose_php).
- Confirmar que no se exponen detalles en producción.
Caja de datos clave
- PHP_FCGI_MAX_REQUESTS: 5000 (ejemplo en este tutorial).
- PHP_FCGI_CHILDREN: 8 (numero de procesos hijos en el wrapper de ejemplo). Estos valores son ejemplos; ajusta según RAM y carga.
Glosario breve
- PHPRC: variable de entorno que indica el directorio o archivo php.ini a usar.
- php-fcgi-starter: script wrapper que inicia el binario CGI/FastCGI de PHP para un sitio.
- phpinfo(): función PHP que muestra la configuración actual de PHP.
Enlaces útiles
- mod_fcgid: http://httpd.apache.org/mod_fcgid/
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- Debian: http://www.debian.org/
Resumen
Asignar un php.ini distinto por sitio o cambiar variables sueltas con -d es una forma flexible de gestionar configuraciones PHP por virtualhost cuando usas PHP como CGI/FastCGI. Siempre verifica con phpinfo(), controla permisos y documenta cada cambio.
Sobre el autor
Falko Timme es propietario de Timme Hosting (hosting nginx ultrarrápido). Es mantenedor principal de HowtoForge (desde 2005) y uno de los desarrolladores principales de ISPConfig (desde 2000). También contribuyó al libro de O’Reilly “Linux System Administration”.