Skip to main content

Cómo instalar PHP en Windows Server 2008 y Windows Vista


 IMPORTANTE: Este artículo proporciona las instrucciones para instalar y usar el componente FastCGI en Windows Server 2008 y Windows Vista SP1.

Contenido

Este artículo explica cómo instalar el módulo FastCGI y PHP para hospedar aplicaciones PHP en IIS 7.0.

Introducción

FastCGI proporciona una alternativa de alto rendimiento al Common Gateway Interface (CGI), una manera estándar de integración entre aplicaciones externas y servidores web que forma parte de IIS desde su primera versión.

Los programas CGI son ejecutables arrancados por el servidor web para cada petición para procesarla y generar la respuesta dinámica que es enviada de vuelta al cliente. Debido a que muchas librerías no soportan ejecución multi-hilo, CGI tiene que ejecutar sólo una petición por proceso. Desafortunadamente esto proporciona un rendimiento muy bajo, debido al coste de crear y cerrar un proceso por cada petición.

FastCGI soluciona este problema de rendimiento de CGI permitiendo que un solo proceso puede ser reutilizado por varias peticiones. Adicionalmente FastCGI mantiene compatibilidad con librerías no seguras a multi-hilo ya que utiliza un pool de procesos reutilizables que garantizan que cada proceso sólo sirve una petición simultáneamente.

Habilitar FastCGI en IIS 7.0

Windows Server 2008

Para habilitar FastCGI en Windows Server 2008 añada el servicio de CGI en la opción Administrador de Servidor -> Funciones -> Agregar servicios de función. Seleccione la función CGI para añadir tanto CGI como FastCGI:

Windows Vista SP1

Añada la característica CGI utilizando el Panel Control -> Programas y Características -> Activar o Desactivar características de Windows. A continuación se muestra cómo habilitar los servicios CGI y FastCGI:

IMPORTANTE: Instale la actualización del módulo FastCGI

La actualización de IIS para el módulo FastCGI soluciona varios problemas de compatibilidad con aplicaciones PHP populares. Instale la actualización de una de estas localizaciones:

Instalar paquete de administración de IIS 7.0

NOTA: Este paso es opcional.

Entre otras características, el paquete de administración de IIS 7.0 incluye un interfaz cómodo para configurar las opciones de fastCGI. Puede descargar el paquete de administración aquí:

Instalar y configurar PHP

Se recomienda usar la versión no segura a multi-hilo (non-thread safe) de PHP. Una versión no segura a multi-hilo implica mejoras significativas de rendimiento frente a la versión estándar, ya que no realiza comprobaciones para la seguridad entre hilos, que no son necesarias ya qye FastCGI asegura un entorno de ejecución de un solo hilo.

  1. Descargue la última version de PHP no segura a multi-hilo (non-thread safe) de: http://www.php.net/downloads.php.
  2. Descomprima los archives a un directorio (ej. c:\PHP). Renombre el archivo php.ini-recommended a php.ini.
  3. Abra el archive php.ini y elimine los comentarios de los siguientes parámetros:
  • Establecer fastcgi.impersonate = 1. FastCGI sobre IIS soporta la funcionalidad de impersonar la seguridad del cliente llamante. Esto permite a IIS definir el contexto de seguridad sobre el que funciona la petición.
  • Establecer cgi.fix_pathinfo=1. cgi.fix_pathinfo proporciona soporte real de PATH_INFO/PATH_TRANSLATED para CGI. El comportamiento anterior de PHP era establecer la variable PATH_TRANSLATED a SCRIPT_FILENAME, sin tener en cuenta el valor de PATH_INFO. Para más información sobre PATH_INFO consulte las especificaciones de CGI. Establecer este valor a 1 provoca que CGI modifique las rutas de acuerdo con la especificación.
  • Establecer cgi.force_redirect = 0.
  • Establecer open_basedir apuntando a una carpeta o ruta de red donde está contenido el contenido del sitio web.
  • Establecer extension_dir apuntado a la localización donde residen las extensions PHP. Normalmente, para PHP 5.2.X debería ser establecido a extension_dir = "./ext"
  • Habilitar las extensiones de PHP requeridas eliminando los comentarios de las líneas correspondientes, por ejemplo:
  • extension=php_mssql.dll

extension=php_mysql.dll

Compruebe si la instalación de PHP se ha realizado con éxito ejecutando el siguiente comando desde la línea de comandos:

C:\PHP>php –info

Si PHP ha sido instalado correctamente y todas sus dependencias están disponibles en la máquina, este comando devolverá la información de configuración de la actual versión de PHP.

Configurar IIS 7.0 para procesar peticiones PHP

Para que IIS 7.0 pueda hospedar aplicaciones PHP es necesario añadir una asociación que le indique a IIS que pase todas las peticiones de PHP a la librería de PHP instalada.

Usar Administrador de IIS

Abra el administrador de IIS y seleccione “Asignaciones de controlador” en el nivel de servidor:

Seleccione la acción “Agregar asignación de módulo” y especifique las siguientes opciones de configuración:

  • Ruta de acceso de solicitudes: *.php
  • Módulo: FastCgiModule
  • Ejecutable: "C:\[Ruta a la instalación PHP]\php-cgi.exe"
  • Nombre: FastCGIPHP

Presione Aceptar. Aparecerá un diálogo preguntándole si desea crear una aplicación FastCGI para este ejecutable. Seleccione Sí.

Compruebe que la asociación funciona correctamente creando un archive phpinfo.php en la carpeta c:\inetpub\wwwroot con el siguiente código:

<?php phpinfo(); ?>

Abra el navegador y navegue a la dirección http://localhost/phpinfo.php. Si todo se instaló correctamente verá la página de información PHP estándar:

NOTA: Si no ve “FastCgiModule” en la lista “Modules:” significará que el módulo no se ha registrado o está habilitado. Para comprobar si el módulo FastCGI está registrado abra el archivo de configuración de IIS en %WINDIR%\windows\system32\config\applicationHost.config y compruebe que la siguiente línea está presente en la sección <globalModules>:

<add name="FastCgiModule" image="%windir%\System32\inetsrv\iisfcgi.dll" />

Compruebe también que, en el mismo archive, el modulo de FastCGI está incluido en la sección <modules>:

<add name="FastCgiModule" />

Usar la línea de comandos

De manera alternative, los pasos mostrados anteriormente pueden realizarse con la línea de comandosappcmd.

Para crear el pool de procesos de aplicaciones FastCGI ejecute el siguiente comando:

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\{php_folder}\php-cgi.exe']

Después de esto cree la asociación:

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+[name='PHP_via_FastCGI',path='*.php', verb='*',modules='FastCgiModule',scriptProcessor='c:\{php_folder}\php-cgi.exe',resourceType='Unspecified']

Nota: Si está usando la version 4.x de PHP, debe utilizar php.exe en lugar de php-cgi.exe.

Mejores prácticas para configurar FastCGI y PHP

Esta descarga contiene una presentación sobre mejores prácticas para hospedar PHP en un entorno de hospedaje compartido.

Aislamiento de seguridad para sitios PHP

La recomendación para aislar sitios PHP en un entorno de hospedaje compartido es consistente con las recomendaciones generales de aislamiento en IIS 7.0. En concreto está recomendado:

  • Usar un pool de aplicaciones por cada sitio web
  • Usar una cuenta de usuario dedicada como identidad del pool de aplicaciones.
  • Configurar la identidad de usuario anónimo para el pool de aplicaciones
  • Asegurar que la impersonación de FastCGI está habilitada en el archive php.ini (fastcgi.impersonate=1)

Para más detalles sobre el aislamiento de seguridad en un entorno de hospedaje compartido consulte el document Isolating Sites with Application Pools.

Comportamiento de reciclaje en el proceso PHP

Asegúrese que FastCGI siempre recicla los procesos php-cgi.exe antes de que el reciclaje native de PHP entre en funcionamiento. El comportamiento de reciclado de procesos FastCGI se configura por la propiedad de configuracióninstanceMaxRequests. Esta propiedad especifica cuántas peticiones atiende el proceso FastCGI antes de reciclarse. PHP tiene una funcionalidad de reciclaje similar que es controlada por la variable de entorno PHP_FCGI_MAX_REQUESTS. Establezca la propiedad instanceMaxRequests a un valor menor o igual quePHP_FCGI_MAX_REQUESTS, para garantizar que el proceso de reciclaje de proceso de PHP nunca se pone en funcionamiento.

Los valores de configuración de FastCGI se pueden configurar desde el administrador de IIS o usando la línea de comandos appcmd.

Usar el administrador IIS

Para configurar la configuración de reciclaje de FastCGI con el administrador de IIS necesita instalar el Paquete de Administración de IIS 7.0 y seleccionar la configuración de FastCGI en el nivel de servidor:

A continuación seleccione la aplicación FastCGI que quiere configurar y presione “Edit…” en el panel de acciones del lado derecho de la ventana:

En el diálogo "Edit FastCGI application", establezca el valor de 1000 a instanceMaxRequest y presione en el botón “browse” junto al valor de EnvironmentVariables:

Añada la variable de entornoPHP_FCGI_MAX_REQUESTS y establezca su valor a 10000:

Nota: Si no configure estas variables se usarán los siguientes valores por defecto: instanceMaxRequests = 200, PHP_FCGI_MAX_REQUESTS = 500 (en la mayoría de versiones de PHP).

Usar la línea de comandos

Para configurar el comportamiento de reciclado de FastCGI PHP usando appcmd, utilice los siguientes comandos:

C:\>%windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /[fullPath='c:\{php_folder}\php-cgi.exe'] .instanceMaxRequests:10000

C:\>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\{php_folder}\php-cgi.exe'] .environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']"

Versionado de PHP

Muchas aplicaciones PHP pueden depender de funciones o características que sólo están presentes en ciertas versiones de PHP. Si estas aplicaciones son hospedadas en el mismo servidor necesitará que distintas versiones de PHP funcionen de forma paralela. El manejador de fastCGI para IIS 7.0 soporta ejecutar múltiples versiones de PHP en el mismo servidor web.

Por ejemplo, asumamos que su servidor web tiene que soportar PHP 4.4.8, PHP 5.2.1 y PHP 5.2.5 no seguro a multi-hilo. Para habilitar eso, debe copiar los binarios correspondientes de PHP en carpetas separadas dentro del sistema de archivos (ej. C:\php448\, C:\php521\ y C:\php525nts) y crear un pool de aplicaciones FastCGI para cada versión:

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php448\php.exe']

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php521\php-cgi.exe']

C:\>%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+[fullPath='c:\php525nts\php-cgi.exe']

Si tiene 3 sitios web (site1, site2, site3), donde cada sitio necesita una versión distinta de PHP, puede definir una asociación en cada uno de estos sitios web con su correspondiente pool de aplicaciones FastCGI:

Nota: Cada pool de fastCGI está identificado de manera única por una combinación de ruta completa y sus argumentos.

C:\>%windir%\system32\inetsrv\appcmd set config site1 –section:system.webServer/handlers /+”.. [name=’PHP448_via_FastCGI’,path=’*.php’,verb=’*’,modules=’FastCgiModule’,scriptProcessor=’c:\php448\php.exe’,resourceType=’Either’]

C:\>%windir%\system32\inetsrv\appcmd set config site2 –section:system.webServer/handlers /+”..[name=’PHP521_via_FastCGI’,path=’*.php’,verb=’*’ ,modules=’FastCgiModule’,scriptProcessor=’c:\php521\php-cgi.exe’,resourceType=’Either’]

C:\>%windir%\system32\inetsrv\appcmd set config site3 –section:system.webServer/handlers /+”..[name=’PHP525nts_via_FastCGI’,path=’*.php’,verb=’*’ ,modules=’FastCgiModule’,scriptProcessor=’c:\php525nts\php-cgi.exe’,resourceType=’Either’]

Recomendaciones de seguridad de PHP

Las siguientes opciones de configuración están ligadas con la seguridad de una instalación PHP. Localice y abra el archivo php.ini para aplicar los cambios recomendados a continuación:

Opción

Descripción

allow_url_fopen=Off
allow_url_include=Off

Deshabilita las URLs remotas para manejar funciones de fichero, que pueden originar vulnerabilidades de inyección de código.

register_globals=Off

Deshabilita register_globals.

open_basedir="c:\inetpub\"

Restringe la lectura y escritura de un proceso PHP en el sistema de archivos.

safe_mode=Off
safe_mode_gid=Off

Deshabilita el modo seguro

max_execution_time=30
max_input_time=60

Limita el tiempo de ejecución de un script.

memory_limit=16M
upload_max_filesize=2M
post_max_size=8M
max_input_nesting_levels=64

Limita el uso de memoria y el tamaño de los archivos

display_errors=Off
log_errors=On
error_log="C:\path\of\your\choice"

Configura los mensajes de error y log

fastcgi.logging=0

El módulo FastCGI de IIS lanzará un error cuando PHP envíe cualquier información a stderr usando el protocolo FastCGI. Esto prevenirá que PHP envíe información de error sobre stderr, generando códigos de error 500 para el cliente.

expose_php=Off

Oculta la presencia de PHP

Habilitar la configuración de PHP por sitio web

En esta sección se describe la manera recomendada de establecer la configuración de PHP por sitio web. Esta recomendación ha sido identificada y validada por Radney Jasmin con el proveedor de hospedaje GoDaddy.com que ahora ofrece hospedaje PHP en Windows Server 2008 con FastCGI.

Pool de proceso PHP por sitio web

Cuando cada sitio web tiene su propio pool de aplicaciones (lo cual es una práctica recomendada en IIS 7.0), es posible asociar un pool de proceso FastCGI dedicado con cada sitio web. Un pool de proceso FastCGI está identificado de forma única con la combinación de atributos fullPath y arguments. De esta forma, si es necesario crear varios pools de proceso FastCGI para el mismo ejecutable, como php.cgi.exe, el atributo arguments puede ser usado para distinguir varias definiciones de pool de procesos. Además, puede utilizar el argumento “-d” para definir una entrada INI en el proceso PHP. Este argumento se puede usar para hacer que la cadena de argumentos sea única.

Por ejemplo, si hay dos sitios web “website1” y “website2” que necesitan tener su propio conjunto de propiedades de configuración de PHP, los pools de proceso de FastCGI pueden ser definidos así:

<fastCgi>
    <application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\Websites\Website1" />
    <application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\Websites\Website2" />
</fastCgi>

En este ejemplo la propiedad de PHPopen_basedir se usa para distinguir entre definiciones de pool de procesos. Además obliga a que el ejecutable de PHP por pool de procesos sólo puede realizar operaciones de archivos en la carpeta raíz del correspondiente sitio web.

El sitio web website1 puede tener la asociación de esta forma:

<system.webServer>
    <handlers accessPolicy="Read, Script">
        <add name="PHP via FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website1" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
</system.webServer>

Y el sitio web website2:

<system.webServer>
    <handlers accessPolicy="Read, Script">
        <add name="PHP via FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
</system.webServer>

Especificar una localización de php.ini

Cuando el proceso PHP es iniciado, determina la localización del archivo php.ini usando varias propiedades. La documentación PHPproporciona una descripción detallada del proceso de arranque de PHP. Uno de los lugares donde el proceso de PHP busca al archivo php.ini es en la variable de entorno PHPRC. Si el proceso de PHP encuentra un archivo php.ini en la localización especificada por la variable de entorno entonces lo usará direcatamente, en caso contrario usará la localización por defecto del archive php.ini. Esta variable de entorno puede ser usada para permitir a los clientes en entorno de hospedaje compartido usar sus propieas versiones de archivos php.ini.

Por ejemplo, si existen dos sitios web: website1 y website2; localizados en las siguietnes rutas: C:\WebSites\website1 y C:\WebSites\website2 puede configurar los pools de proceso de php-cgi.exe en la sección <fastCgi> de applicationHost.config de esta forma:

<fastCgi>
    <application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\Websites\Website1">
        <environmentVariables>
            <environmentVariable name="PHPRC" value="C:\WebSites\website1" />
        </environmentVariables>
    </application>
    <application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\WebSites\Website2">
        <environmentVariables>
            <environmentVariable name="PHPRC" value="C:\WebSites\website2" />
        </environmentVariables>
    </application>
</fastCgi>

El sitio web website1 puede tener su propia versión del archivo php.ini en C:\WebSites\website1, mientras que el sitio website2 puede tener su propia versión en C:\WebSites\website2. Esta configuración garantiza que si no hay un archive php.ini en la variable especificada por PHPRC entonces PHP usará el archivo php.ini por defecto localizado en la misma carpeta que el archivo php-cgi.exe.

Proporcionar funcionalidad de reescritura de URL en aplicaciones PHP

La mayoría de las aplicaciones PHP dependen de la funcionalidad en los servidores web de reescritura de URL para proporcionar URLs amigables para los buscadores. IIS 7.0 proporciona capacidades de reescritura de URL medienta el módulo URL rewrite module.

Diríjase a los siguientes artículos para más información sobre cómo usar el módulo de reescritura de URLs:

Recursos relacionados

Para más información sobre el hospedaje de aplicaciones PHP en IIS puede usar los siguientes recursos:

Contenido relacionado

Artículos

Recursos

Microsoft y la Interoperabilidad

Página principal de Microsoft y la interoperabilidad.

Port 25

Página de la comunidad de código abierto en Microsoft, donde encontrar discusiones dedicadas a Linux, Windows e interoperabilidad.

Listado de lenguajes .NET

Listado completo de todos lenguajes en los que se puede programar para .NET Framework.

Open Source para desarrolladores

Portal donde se pueden encontrar recursos alrededor de soluciones completas Open Source, componentes reutilizables y ejemplos.

Dynamic Language Runtime

El DLR provee interoperabilidad para operaciones dinámicas sobre objetos.

Microsoft está realizando una encuesta en línea para comprender su opinión del sitio web de. Si decide participar, se le presentará la encuesta en línea cuando abandone el sitio web de.

¿Desea participar?