My kemenworld…

To mock or not to mock…

Instalando PHP5/FastCGI en Windows 2003 Server/IIS6

Posted by kementeus en abril 10, 2007

Hace varios días ya publiqué sobre la disponibilidad de PHP5.2.1 optimizado para Windows 2003 Server y sobre la relación con FastCGI para IIS6. Bueno, lo extraño es que un par de personas me escribieron comentarios de vuelta preguntándome sobre cómo se podría instalar PHP5 en Windows. Vaya, aunque yo creía que era lo suficientemente sencillo creo que es hora de explicar un poco más este asunto.

Antes que nada, creo que algunos observadores recordaran que tradicionalmente existen dos formas de instalar PHP en la mayoría de webservers/sistemas operativos. Mediante una “extensión” o “módulo” del webserver en cual caso PHP correrá como un intérprete dentro del proceso del webserver (ejemplo mod php en Apache) y como aplicación externa, la mayoría de veces en forma de CGI (Common Gateway Interface) en la cual el webserver “delega” la operación a un proceso externo de esta manera liberando al webserver de cualquier operación pesada y dedicando al webserver a hacer lo que mejor puede hacer, servir páginas web.

Quién tenga sitios de altísimo tráfico y utilice PHP para páginas dinámicas, especialmente aquellas con alto calibre de procesamiento (por ejemplo parsing de templates, cálculos y operaciones de bases de datos de gran cantidad de tuplas) sabran ya que en momentos de alto tráfico su webserver sufrirá grandemente y una característica típica es el alto consumo en RAM por parte del webserver (no ahondaré en detalles ya que esto es tema de algún otro post en algún futuro). La forma más sencilla de aliviar estos problemas es simplemente delegando el proceso de las páginas dinámicas a otro proceso, en ese caso usar CGI. El problema es que el CGI sufre de serios problemas de seguridad y de performance en alto tráfico, ya que es demasiado costoso el andar creando procesos (si quieren saber más sobre CGI aquí les pongo el respectivo link). Debido a estos problemas nace una nueva forma de delegar funciones en el webserver usando FastCGI, un nuevo protocolo que elimina los inconvenientes del CGI y permite obtener el máximo performance en el serving de páginas dinámicas, más información de FastCGI en su respectivo link.

Bien, regresando a Windows, en IIS tradicionalmente se puede instalar PHP como extensión ISAPI, o sea que correrá como parte del proceso forker de IIS, esto tiene ciertos peligros, cosas que no me corresponde detallar pero también impone problemas de alto consumo de RAM, y algo importante, si un módulo de PHP produce problemas esos problemas repercutirán en el IIS lo que significa que también afectaran cualquier otra extensión relacionada al IIS y sufriremos de problemas y dolores de cabeza en momentos de mucho tráfico. La otra forma y la más común hasta ahora de correr PHP en IIS es usando PHP como proceso CGI, el problema con esto es el alto costo en desempeño. Bien, hoy hablaremos de la “nueva” forma en IIS6 de correr PHP, usando FastCGI.

Hace un par de meses atrás Microsoft anuncia su cooperación con Zend para trabajar en una versión de PHP optimizada para plataformas Windows, labor que ya dio frutos con PHP 5.2.1, además para esas mismas épocas Microsoft libera FastCGI Techology Preview como extensión para IIS6/7 algo que cuando recuerdo haberlo leído me dejó con la boca abierta. Lo primero que pensé es que sería algo “delicado” y sumamente difícil en cuanto a configuración para hacerlo funcionar, alguien por favor que recuerde lo atormentante que es configurar correctamente FastCGI en Apache2 (hay cientos de manuales pero a todos les suele faltar “algo”). Me topo con la sorpresa de lo fácil que es configurarlo ahora en Windows.

La instalación la llevé a cabo en un Microsoft Windows 2003 Server R2 con IIS6 en una máquina virtual mientras escribía el post. Me imagino que los procedimientos deben ser los mismos en cualquier otra plataforma Windows que soporte IIS5/6.

Primero me aseguré que el IIS6 estuviera instalado y funcionando, luego se configura un sitio web o se usa el sitio web por default. Luego nos aseguramos de tener la última versión de FastCGI para IIS6, pueden bajarla del sitio del FastCGI CTP2 (Nota: es una Tech Preview, eso signifca que no es estable, no se recomienda que funcione en sitios de producción, probablemente entren a beta a finales de abril según escuché). Una vez que bajemos y descomprimamos en una carpeta temporal el ZipFile, entramos a ese directorio ya descomprimido y simplemente lo instalamos con el comando:

cscript fcgisetup.js /install

Bien, ahora conseguimos PHP 5.2.1 para Windows, este lo podemos bajar en http://www.php.net/downloads recuerden bajar el “binario” para Windows. La instalación de PHP es sencilla y casi que lineal, simplemente ejecutamos el ejecutable bajado y seguimos el asistente, cuando nos pregunté bajo que servidor web instalar PHP, le decimos que sobre IIS CGI. Quizás la parte más “complicada” es en la que el asistente nos pregunta que extensiones instalar, escojan las que reconocen por nombre, de esa manera cuando vean algo como “MySQL” sepan que es lo necesario para conectarse y hacer queries a servidores MySQL. Bien luego de eso el asistente terminará de instalar y nos dirá que ha finalizado.

Ahora la parte interesante, vamos al lugar donde habíamos descomprimido la extension FastCGI para IIS, nos toca decirle a IIS y FastCGI para que archivos nos va a delegar la ejecución y a quien se lo delegará, eso lo hacemos con el comando:

cscript fcgisetup.js /r /add “c:\Program Files\PHP\php-cgi.exe” php

(Esto le dirá que cualquier petición para un archivo con extensión php que la dirija por FastCGI al ejecutable php-cgi.exe, si quieren agregar más extensiones de archivo -por ejemplo phpt- simplemente separenla por espacios)

Tomando en cuenta que instalamos PHP bajo la ruta “estándar” de Windows para archivos de programa, si le dijeron a PHP que se instalara en otro lugar ahí reemplazan la ruta por la que pusieron.
¿Bien y ahora que creen? Ya es tiempo de probar nuestra instalación, si, ya no hay más nada que configurar, simplemente hagamos un archivo de prueba, algo sencillo, que tal el famoso phpinfo

<? phpinfo();? >

Guardamos el archivo como quizás un test.php bajo la carpeta raíz donde se encuentra nuestro sitio por default (o el que hayan configurado), en mi caso está bajo c:\inetpub\wwwroot bien, probemos nuestra instalación, revisemos la página, entremos a http://localhost/test.php (o la dirección que tengan configurada en su sitio en IIS) y verán la típica página de PHP Info.

De ahí en adelante lo único que deben hacer es instalar las extensiones que necesitan, PEAR o cualquier otra cosa que suelan usar en PHP, además de configurar php.ini a su gusto.
Bueno, como se habrán dado cuenta es cosa de solo un par de clicks, nada de archivos enmarañados de configuración, nada de peleas con extensiones o desinstalar su webserver porque no soporta threads (yep, la versión para Windows como CGI cuenta con soporte para threads). Simplemente un par de comandos y listo.

Bueno, espero que este largo post les sirva en algún momento, como siempre estoy a la orden para preguntas sobre el tema, en lo que les pueda ayudar lo haré. Hasta luego!

12 comentarios to “Instalando PHP5/FastCGI en Windows 2003 Server/IIS6”

  1. Luis Pirir said

    Buenisimo, gracias por el mini tutorial don tinux. Ahora es mas sencillo y me funciono de maravilla.

    Intente instalarlo como se menciona en un articulo viejo del msdn, mapeando el isapi del php5 en la consola del iis, pero no me funcionaba, y con este fue solo de correr el script, instalar el ejecutable, y me quedo de perlas.

  2. estuardogt said

    Hola Cristian:

    Te comento que me veo en la necesidad de crear una “aplicacion” que corra como un servicio, es decir que si veo las aplicaciones que se estan corriendo a travez del administrador de tareas, no muestre el nombre de mi aplicacion. ¿Alguna idea?

    Saludos

    PD. El lenguaje de programacion es VS 2005.

  3. Herley said

    Gracias por su relato,
    como Usted lo mencionó:
    “hay cientos de manuales pero a todos les suele faltar “algo””
    Siento informar que la versión 5.2.1 de php que tiene el asistente de instalación, falla cuando se ejecuta sobre windows xp en español. Estoy buscando soluciones y no sé si usted me pueda ayudar. Por supuesto, si la encuentro primero regresaré a esta página.

    De nuevo gracias.

  4. Geronimo Perez said

    Excelente aporte!!, he tenido problemas con levantar el PHP en IIS 6 (64b) y encontré en este comentario la solución. Pero tengo un problema, no encuentro donde descargar el FastCGI para IIS6, encontré esta página: http://www.iis.net/default.aspx?tabid=1000054 pero cuando le selecciono I Agree, me sale una página con errores: No se encontró la página
    Hay algún otro lugar de donde lo pueda descargar?.

    Gracias.
    Gerónimo Pérez

  5. Gastón said

    instale apache, php5 y mysql5, funciona el codigo solo cuando lo ingreso entre y no cuando lo ingreso de esta otra forma , que puede ser?

  6. Cristian said

    Estimado Gerónimo
    es cierto cuando le das “I Agree” no encuentra la página, pero si te fijas, sobre los botones “I Agree” y “Cancel” ahy un link que dice “click here to download”, bien, cliquea ahí y podrás descargarlo.
    salu2 desde Chile.

  7. adminvar said

    Hola, Excelente documento!!!
    Acabe de instalar el PHP 5.2.3 en el IIS6 de windows 2003 corriendo en extencion ISAPI y esta funcionando perfecto,fue muy facil, pero lo que no sabia era lo que implica configurarlo de esa manera al rendimiento del servidor web. Intentare bajar el FastGCI y configurar de nuevo el PHP como lo recomiendan en este documento y muy pronto estare publicando los resultados y comparativos.

    Muchas gracias por esta informacion.

  8. carlos said

    Hola a todos, mi problema es que instale un servidor web con windows 2003 server con iis 6, e instale php con fastcgi, el problema es que cuando intento accesar a las paginas que tienen la informacion o conexion con alguna base de datos, no me muestra la pagina (que anteriormente hice, revise y probe, pero con un servidor local en apache), me muestra una pagina en blanco sin mostrarme ningun tipo de error, alguien me puede ayudar para resol ver el problema se los agradecere con el alma, de antemano gracias por tomarse la molestia de revisar el correo
    adios

  9. cristian said

    Saludos,
    funciona realmente muy bien, lo explica bien detallado yo instale en win 2003 server y ahora tengo paginas que funcionan con php y asp.net.
    gracias por el aporte.

  10. Martín Murillo said

    Instalé FastCGI en W2003 e IIS6, el problema es que en algunos casos me muestra mensajes de notificación “PHP Notice:…” que no puedo deshabilitar. Si alguien sabe como hacerlo me sería de mucha utilidad

  11. kementeus said

    @martin:
    El problema es en tu código no tu instalación, si tienes una notice ponle atención a que dice, en un buen codigo de PHP no deben haber Notice. Ahora, si quieres seguir ignorando el problema que correctamente te esta reportando tu PHP y hecharle la culpa a la instalación o IIS entonces simplemente cambia la configuración de tu PHP y dile que no quieres que te reporte NADA, (!E_ALL), para mayor información siempre está el sitio de documentación de php http://www.php.net

  12. John said

    He instalado el FastCGI con el PHP 5.2.6 y no me funciona, da el error:

    Error Details:
    * The FastCGI process exited unexpectedly
    * Error Number: -1073741819 (0xc0000005).
    * Error Description: Unknown Error
    HTTP Error 500 – Server Error.
    Internet Information Services (IIS)

    Por otro lado, hay un tutorial actualizado sobre este tema en:
    http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/

    Pero igual ni con ese tutorial funciona mi instalacion, que puede estar faltando???

    Gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: