Siempre he ejecutado PHP en modo ISAPI. La mayor desventaja de este método es su escasa estabilidad. Cuando PHP falla, el proceso de Apache también morirá. Más tarde, vi una introducción en Internet sobre PHP ejecutándose en modo FastCGI. Los diversos beneficios mencionados (estabilidad, seguridad, alto rendimiento) me hicieron decidir probarlo.
Sin embargo, las cosas estuvieron lejos de ir tan bien como se esperaba. He buscado en Google innumerables veces pero no pude encontrar ninguna información sobre cómo usar Apache + FastCGI para ejecutar PHP en Windows. Hay bastantes personas que usan IIS + FastCGI para ejecutar PHP. Uno de los artículos mencionó que Zend también recomienda ejecutar PHP en modo FastCGI ( http://phplens.com/phpeverywhere/fastcgi-php ).
Después de varias horas de exploración, finalmente implementé con éxito Apache 1.3 + FastCGI para ejecutar PHP.
Preparación:
Primero visite http://www.fastcgi.com/dist/ para descargar mod_fastcgi para Apache. Estoy usando mod_fastcgi-2.4.2-AP13.dll. Después de la descarga, copie este archivo al directorio de módulos de Apache.
Descargue PHP (estoy usando PHP-5.0.4) y descomprímalo, modifique el archivo php.ini según sea necesario. Tenga en cuenta que no necesita copiar ningún archivo del directorio PHP al directorio de Windows.
Modificar configuración:
Luego modifique el archivo httpd.conf y agregue las siguientes líneas:
LoadModule fastcgi_module module/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -procesos 3
# Nota: -processes 3 aquí significa iniciar tres procesos php-cgi.exe.
# Para obtener parámetros detallados de FastCgiServer, consulte la documentación de FastCGI.
Aplicación AddType/x-httpd-fastphp5 .php
Aplicación de acción/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# Descripción: Modifique las dos palabras en negrita anteriores según la ubicación de su archivo PHP.
Una vez completada la modificación, simplemente reinicie Apache.
Preguntas frecuentes:
Según mis numerosos experimentos, los problemas más comunes son causados principalmente por las rutas. Primero verifique si todas las rutas en los archivos php.ini y httpd.conf son correctas. La segunda es que si PHP se instaló anteriormente en el sistema, entonces es necesario cambiar el nombre de C:Windowsphp.ini o eliminarlo.
En segundo lugar, verifique si el directorio donde se encuentra el archivo PHP tiene permisos suficientes (lo configuré en Todos - Control total, de todos modos, no es necesario considerar tantas restricciones de seguridad en las máquinas de desarrollo).
Ventajas de ejecutar PHP en modo FastCGI:
Hay varios beneficios importantes al ejecutar PHP en modo FastCGI. La primera es que cuando PHP falla, no derribará Apache, pero el propio proceso de PHP fallará (pero FastCGI reiniciará inmediatamente un nuevo proceso PHP para reemplazar el proceso fallado). En segundo lugar, el modo FastCGI tiene un mejor rendimiento cuando se ejecuta PHP que el modo ISAPI (originalmente usé ApacheBench para probar, pero olvidé guardar los resultados. Si está interesado, puede probarlo usted mismo).
Finalmente, puedes ejecutar PHP5 y PHP4 al mismo tiempo. Con referencia al archivo de configuración a continuación, se establecieron dos hosts virtuales, uno usando PHP5 y el otro usando PHP4.
LoadModule fastcgi_module module/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -procesos 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
Escuchar 80
NombreVirtualHost *:80
DocumentRoot d:/www
Opciones Índices SeguirEnlaces simbólicos Vistas múltiples
Nombre del servidor php5.localhost
AddType aplicación/x-httpd-fastphp5 .php
Aplicación de acción/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
IndexOptions FancyIndexación de carpetas primero
Opciones Índices FollowSymLinks MultiViews
Permitir anulación ninguna
Orden permitida, denegada
Permitir de todos
Escuchar 8080
NombreVirtualHost *:8080
raíz del documento:/www
Opciones Índices SeguirEnlaces simbólicos Vistas múltiples
Nombre del servidor php4.localhost
AddType aplicación/x-httpd-fastphp4 .php
Aplicación de acción/x-httpd-fastphp4 "/fcgi-php4/php.exe"
Opciones Índices FollowSymLinks MultiViews
Permitir anulación ninguna
Orden permitida, denegada
Permitir de todos
Usando la configuración anterior, se usa PHP5 al acceder a http://localhost/ y PHP4 al acceder a http://localhost:8080/ . Entonces, siempre que esté configurado correctamente, diferentes hosts virtuales pueden usar diferentes versiones de PHP.
Algunas desventajas del modo FastCGI:
Después de hablar de las ventajas, hablemos de las desventajas. Según mi uso real, el modo FastCGI es más adecuado para servidores en entornos de producción. Pero no es adecuado para máquinas de desarrollo. Porque al usar Zend Studio para depurar el programa, FastCGI pensará que el proceso PHP ha agotado el tiempo de espera y devolverá un error 500 en la página. Esto fue tan molesto que volví al modo ISAPI en mi máquina de desarrollo.
Finalmente, existe una posible vulnerabilidad de seguridad en el modo FastCGI en Windows. Como no he encontrado una manera de implementar SuEXEC en un entorno Windows, el proceso PHP siempre se ejecuta con los privilegios más altos, lo que obviamente no es una buena noticia desde una perspectiva de seguridad.
Conclusión:
La aplicación de FastCGI en este artículo aún se encuentra en una etapa muy preliminar y solo se utiliza como punto de partida, con la esperanza de que surjan soluciones más maduras.