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

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach