Guía de tecnologías

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

4 min read PHP Actualizado 27 Sep 2025
PHP-FastCGI por sitio: pruebas y php.ini
PHP-FastCGI por sitio: pruebas y php.ini

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:

Salida de phpinfo mostrando 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:

phpinfo mostrando la ruta de php.ini cargado en Loaded Configuration File

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”:

phpinfo mostrando magic_quotes_gpc desactivado

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

  1. Crear copia de php.ini en el directorio del sitio.
  2. Ajustar permisos y propietario (que el usuario del sitio pueda leerlo si es necesario).
  3. Editar php-fcgi-starter y establecer PHPRC al directorio del sitio.
  4. Opcional: añadir -d para ajustes puntuales.
  5. Recargar Apache y verificar con phpinfo().
  6. 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

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”.

Autor
Edición

Materiales similares

Cómo escanear y asegurar un sitio WordPress
Seguridad

Cómo escanear y asegurar un sitio WordPress

Hilos de foro a RSS con Blogger
Guías

Hilos de foro a RSS con Blogger

Instalar OCS Inventory NG 2 en CentOS 5.5
Linux

Instalar OCS Inventory NG 2 en CentOS 5.5

Función CHAR en Google Sheets: símbolos y saltos
Hojas de cálculo

Función CHAR en Google Sheets: símbolos y saltos

Mejorar calidad de fotos en iPhone
Fotografía

Mejorar calidad de fotos en iPhone

Protección contra inyección SQL
Seguridad

Protección contra inyección SQL