¿Cómo instalar, configurar y usar Apache en Windows?

Actualizado el 4 de octubre, 2016. Por BlueHosting.

Apache aún sigue siendo la opción más fiable y utilizada entre los servidores web disponibles en el mercado, entre las ventajas principales que ofrece se incluye el hecho de que es una plataforma robusta con más de 20 años de desarrollo continuo mantenido por la Apache Software Foundation, proveyendo características sólidas de usabilidad y seguridad. Además sigue siendo utilizada por más del 70% de los sitios en la web. Este documente incluye la instalación, configuración y uso de Apache en Microsoft Windows, asumiendo que desea instalar una distribución binaria de Apache. Si usted desea compilar Apache por sí mismo, por favor consulte la documentación y recursos al final de este tutorial.

Requisitos previos

Puede instalar Apache en todas las plataformas de Windows 2000 en adelante, por lo que probablemente no tendrá problemas de compatibilidad. Siempre descargue e instale el Service Pack más actual para evitar errores del sistema operativo.

El próximo paso es descargar los paquetes de Apache, el proyecto de servidor Apache HTTP no proporciona publicaciones de paquetes binarios o software, solo provee el código fuente. Es por esto que algunos terceros han compilado y creado paquetes binarios que puede descargar de Internet e instalar en Windows.

Algunas opciones populares recomendadas en el propio sitio web de Apache son:

Además de Apache httpd, estas alternativas también proveen instalaciones para PHP y MySQL en Windows.

Instalar y utilizar Apache en Windows

Una vez que descargue el paquete binario desde uno de los sitios sugeridos, descomprímalo en una ubicación que prefiera, por ejemplo: directamente en C: o en una ubicación como C:\Program Files.

Es importante que verifique las instrucciones de instalación en la fuente donde descargó el paquete, ya que dependiendo del proveedor el paquete puede haber cambios y consideraciones durante la instalación. Por ejemplo, puede que necesite instalar el paquete Visual C++ 2008 Redistributable Package antes de poder ejecutar Apache.

Una vez que tenga los paquetes en su computador tendrá dos opciones para ejecutar Apache en Windows: como servicio o como una aplicación de consola.

Ejecutar Apache como servicio

Apache viene con una herramienta llamada Apache Service Monitor o Monitor del servicio Apache. Esta utilidad sirve para ver y gestionar el estado de todos los servicios de Apache instalados en cualquier equipo en su red. Para poder administrar el servicio Apache con este monitor, primero tiene que instalar el servicio (automáticamente a través del instalador o de forma manual).

Puede instalar Apache como un servicio de Windows NT usando la consola o símbolo del sistema desde el subdirectorio bin de Apache:

httpd.exe -k install

Si desea especificar el nombre del servicio que quiere instalar, entonces use el siguiente comando. La razón para hacer esto es cuando tiene varias instalaciones de distintos servicios de Apache en su computador. Si especifica un nombre durante la instalación, deberá hacerlo también bajo cualquier otra operación con el parámetro -k:

httpd.exe -k install -n "NombreDelMiServicio"

Si necesita archivos de configuración nombrados específicamente para diferentes servicios, debe usar:

httpd.exe -k install -n "NombreDelMiServicio" -f "c:\files\my.conf"

Si ejecuta el primer comando mostrado aquí sin parámetros adicionales más que el simple -k install, el servicio se llamará Apache2.4 y se asumirá que la configuración está bajo conf\httpd.conf.

Para eliminar el servicio Apache simplemente utilice:

httpd.exe -k uninstall

Puede especificar el servicio de Apache a ser desinstalado usando:

httpd.exe -k uninstall -n "NombreDelMiServicio"

Administración del servicio Apache

El inicio, reinicio y apagado de un servicio Apache se hace normalmente a través del monitor del servicio Apache, usando comandos como NET START Apache2.4 y NET STOP Apache2.4 o a través de administrador de servicios de Windows. Antes de arrancar Apache como un servicio, debe probar el archivo de configuración del servicio usando el siguiente comando:

httpd.exe -n "NombreDelMiServicio" -t

También puede controlar un servicio Apache con las opciones en la línea de comandos. Para iniciar un servicio instalado de Apache utilice:

httpd.exe -k start -n "NombreDelMiServicio"

Para detener un servicio Apache a través de la línea de comandos ejecute:

httpd.exe -k stop -n "NombreDelMiServicio"

También puede usar este otro comando alternativo para el mismo fin:

httpd.exe -k shutdown -n "NombreDelMiServicio"

También puede reiniciar un servicio en ejecución y forzarlo a volver a leer su archivo de configuración ejecutando el siguiente comando:

httpd.exe -k restart -n "NombreDelMiServicio"

Otras consideraciones

Todos los servicios de Apache están registrados para ejecutarse bajo el usuario del sistema (la cuenta LocalSystem) por defecto. La cuenta LocalSystem no tiene privilegios de red a través de mecanismos asegurados por Windows, incluyendo el sistema de archivos, DCOM o secure RPC. Sin embargo, tiene amplios privilegios locales.

¡Nunca otorgue algún privilegio de red a la cuenta LocalSystem! Si necesita que Apache pueda acceder a los recursos de red, cree una cuenta separada para Apache como se indica a continuación.

Se recomienda que los usuarios creen una cuenta separada para ejecutar los servicios de Apache. Si necesita acceso a recursos de red a través de Apache, esto es un requerimiento obligatorio:

  • Cree una cuenta de usuario de dominio normal y asegúrese de memorizar su contraseña.
  • Otorgue al nuevo usuario los privilegios "Iniciar sesión como un servicio" y "Actuar como parte del sistema operativo". En Windows NT 4.0 estos privilegios se otorgan a través del administrador de usuarios, pero en otras versiones quizás deba utilizar la Directiva de grupo para propagar estos ajustes.
  • Confirme que la cuenta creada es miembro del grupo Users.
  • Otorgue a la cuenta los permisos de lectura y ejecución en todas las carpetas de documentos y scripts (por ejemplo: htdocs y cgi-bin).
  • Otorgue los permisos de cambio de cuenta (RWXD) al directorio logs de Apache.
  • Otorgue los permisos de lectura y ejecución al binario ejecutable httpd.exe.

Si usted permite que una cuenta inicie sesión como un usuario y como un servicio, entonces podrá ingresar con esa cuenta y probar que tenga los privilegios para ejecutar scripts, leer las páginas web y que puede iniciar Apache en consola. Si esto funciona y ha seguido los pasos expuestos, Apache debería ejecutarse como un servicio sin ningún problema.

Ejecutar Apache como una aplicación de consola

Generalmente se recomienda ejecutar Apache como un servicio, pero a veces es más fácil trabajar desde la línea de comandos, especialmente durante la configuración y pruebas iniciales.

Para ejecutar Apache desde la consola, siga los siguientes pasos:

  1. Abra el programa "Símbolo del sistema" y diríjase a la carpeta donde instaló apache para luego cambiar al directorio bin, por ejemplo, digamos que dispuso los archivos en el directorio C:, entonces cambiaría al siguiente directorio:

    cd C:\Apace24\bin
    
  2. Para ejecutar Apache use el siguiente comando:

    httpd.exe
    
  3. Presione Enter. Si existe algún error se le indicará en la propia consola. Las advertencias no detendrán la ejecución de Apache, pero deben ser abordadas y solucionadas. Si no existen errores el cursor quedará parpadeando en la próxima línea.

  4. Apache se seguirá ejecutando hasta que lo detenga usando CTRL + C.

También puede ejecutar Apache a través del atajo ubicado en Inicio -> Programas -> Apache HTTP Server 2.4.xx -> Apache HTTP Server 2.4.xx durante la instalación. Esto abrirá una ventana de consola e iniciará Apache dentro de esta. Si no tiene Apache instalado como un servicio, la ventana permanecerá visible hasta que detenga Apache usando CTRL+C en la ventana de consola en la cual se está ejecutando. El servidor saldrá después de unos segundos. Sin embargo, si instaló Apache como un servicio, este atajo iniciará Apache como servicio. Si el servicio de Apache ya se está ejecutando, entonces este atajo no tendrá ningún efecto.

Si Apache se está ejecutando como un servicio, puede decirle que se detenga abriendo otra ventana de consola e ingresando el siguiente comando:

httpd.exe -k shutdown

También le puede decir a Apache que se reinicie. Esto lo fuerza a volver a leer el archivo de configuración. Para reiniciar Apache puede pulsar las teclas CTRL + BREAK en la ventana que usó para iniciar Apache o ingresar el comando:

httpd.exe -k restart

Si la ventana de consola de Apache se cierra inmediatamente después de iniciarse, abra el programa "Símbolo del sistema" desde Inicio -> Programas. Cambie a la carpeta en la cual instaló Apache, ejecute el comando httpd.exe y lea el mensaje de error. Luego cambie a la carpeta de logs y verifique el archivo error.log en busca de errores. Asumiendo que httpd fue instalado en C:\Program Files\Apache Software Foundation\Apache2.4\ puede hacer lo siguiente:

c: 
cd "\Program Files\Apache Software Foundation\Apache2.4\bin" 
httpd.exe

Luego espero que Apache se detenga o presione CTRL + C. Después de hacerlo, ejecute lo siguiente:

cd ..\logs 
more < error.log

Si no especifica un archivo de configuración con los parámetros -f o -n, Apache utilizará el nombre del archivo compilado en el servidor, como conf\httpd.conf. Esta ruta incorporada es relativa al directorio de instalación. Puede comprobar el nombre del archivo compilado buscando un valor etiquetado como SERVER_CONFIG_FILE cuando invoca Apache con la opción -V:

httpd.exe -V

Entonces Apache intentará determinar su ServerRoot pasando por los siguientes pasos en orden:

  1. Con una directiva ServerRoot a través de la opción -C en la línea de comandos.
  2. Con la opción -d en la línea de comandos.
  3. En el directorio actual.
  4. Con una entrada de registro que fue creada si hizo una instalación binaria.
  5. El ServerRoot compilado en el servidor. Por defecto este es /apache, puede comprobarlo usando httpd.exe -V y buscando un valor etiquetado como HTTPD_ROOT.

Configuración de Apache en Windows

Apache está configurado a través de los archivos en el subdirectorio conf. Estos son los mismos archivos utilizados para configurar la versión de Unix, pero hay algunas directivas distintas para Apache en Windows. Las diferencias más importantes en Apache Windows se explican a continuación:

  • Debido a que Apache para Windows es multihilos, no usa un proceso separado para cada solicitud, como puedo hacerlo Apache en Unix. En cambio, generalmente hay solo dos procesos de Apache en ejecución: un proceso padre y un proceso hijo que maneja las solicitudes. Dentro del proceso hijo, cada solicitud es manejada por un hilo separado.
    Las directivas de gestión de procesos también son distintas:

    • MaxConnectionsPerChild: tal como la directiva en Unix, esta directiva controla cuántas conexiones servirá un solo proceso hijo antes de cerrarse. Pero a diferencia de Unix, no habrá un proceso de remplazo disponible instantáneamente. Use el valor por defecto: MaxConnectionsPerChild 0 a menos que se indique cambiar el comportamiento para superar una pérdida de memoria en módulos de terceros o en aplicaciones en proceso.
      Advertencia: el archivo de configuración del servidor se vuelve a leer cuando se inicia un nuevo proceso hijo. Si ha modificado el archivo httpd.conf el nuevo hijo podría no iniciarse o podría obtener resultados inesperados.
    • ThreadsPerChild: esta es una nueva directiva. Le dice al servidor cuántos hilos debe usar. Representa el número máximo de conexiones que el servidor puede manejar a la vez, por lo que debe asegurarse de establecer un número lo suficientemente alto si su sitio web obtiene muchos hits. El valor recomendado es: ThreadsPerChild 150, pero el valor debe ajustarse para reflejar una estimación del número máximo de conexiones simultáneas que aceptará el servidor.
  • Las directivas que aceptan nombres de archivos como argumentos deben usar nombres de archivos en formato de Windows en lugar de Unix. Sin embargo, debido a que Apache puede interpretar las barras invertidas (\) como una secuencia de caracteres escape, debe usar barras o slashes comunes (/) para especificar rutas de archivos.

  • Aunque los nombres de archivos generalmente distinguen entre mayúsculas y minúsculas en Windows, las direcciones URL aún son tratadas con distinción de mayúsculas y minúsculas internamente antes de ser mapeadas al sistema de archivos. Por ejemplo, las directivas <Location>, Alias y ProxyPass todas usan argumentos que distinguen entre mayúsculas y minúsculas. Por esta razón es muy importante usar la directiva <Directory> cuando se intenta limitar el acceso al contenido en el sistema de archivos, porque esta directiva aplica a cualquier contenido en un directorio, sin importar cómo se acceda a este. Si desea asegurarse de que solo se utilicen minúsculas en las direcciones URL, entonces use algo similar a lo siguiente:

    RewriteEngine On
    RewriteMap lowercase int:tolower
    RewriteCond "%{REQUEST_URI}" "[A-Z]"
    RewriteRule "(.*)" "${lowercase:}" [R,L]
    
  • Al ejecutarse, Apache necesita acceso de solo lectura únicamente en el directorio logs y en cualquier árbol de directorios de caché configurado. Debido al problema de la distinción entre mayúsculas y minúsculas y el uso del formato 8.3 para los nombres, Apache debe validar todos los nombres de rutas dados. Esto significa que cada directorio que Apache evalúe, debe ser leído, enumerado y debe cruzar los permisos del directorio. Si Apache2.4 está instalado en C:\Program Files entonces el directorio raíz Program Files y Apache 2.4 deben ser visibles para Apache.

  • Apache Windows tiene la capacidad de cargar módulos en tiempo de ejecución, sin recompilar el servidor. Si Apache es compilado normalmente, instalará varios módulos adicionales en el directorio \Apache2.4\modules. Para activar estos u otros módulos, debe usar la directiva LoadModule. Por ejemplo, para activar el módulo de status use lo siguiente (además de las directivas status-activating en el archivo access.conf):

    LoadModule status_module modules/mod_status.so
    
  • Cuando ejecuta scripts CGI, el método que usa Apache para hallar el intérprete para dicho script se puede configurar usando la directiva ScriptInterpreterSource.

  • Debido a que a menudo es difícil manejar archivos con nombres como .htaccess en Windows, puede que le parezca útil cambiar el nombre de este archivo de configuración usando la directiva AccessFilename.
  • Cualquier error durante el inicio de Apache es registrado en el registro de eventos de Windows. Este mecanismo actúa como un respaldo para aquellas situaciones donde Apache aún no está preparado para usar el archivo error.log. Puede revisar la aplicación de registro de eventos en Windows a través del Visor de eventos que puede encontrar en la barra de búsqueda del menú de inicio.

Probar su instalación de Apache

Después de iniciar Apache bajo cualquiera de los dos métodos mencionados, este servidor escuchará en el puerto 80 (a menos que haya cambiado el valor de la directiva Listen en los archivos de configuración o instalado Apache únicamente para el usuario actual). Para conectarse y acceder a la página predeterminada, abra un navegador e ingrese a la siguiente dirección:

http://localhost/

Apache debería responder con una página de bienvenida y debería ver el mensaje It Works!. Si no ocurre nada o si obtiene un error, explore el archivo error.log en el subdirectorio logs. Si su host no está conectado a la red o si tiene problemas serios con la configuración de su DNS, puede usar esta URL alternativa:

http://127.0.0.1/

Si está ejecutando Apache en un puerto alternativo, entonces debe especificarlo explícitamente:

http://127.0.0.1:8080/

Una vez que su instalación básica esté en funcionamiento, debe configurarla apropiadamente editando los archivos en el subdirectorio conf. Una vez más, si usted cambia la configuración del servicio Windows NT para Apache, primero intente iniciarlo desde la línea de comandos para asegurarse de que se inicie sin errores.

Debido a que Apache no puede compartir el mismo puerto con ninguna otra aplicación TCP/IP, quizás sea necesario detener, desinstalar o reconfigurar algunos otros servicios antes de ejecutar Apache. Estos servicios conflictivos pueden incluir otros servidores WWW, algunas implementaciones de firewall e incluso algunas aplicaciones como Skype, las cuales usan el puerto 80 para tratar de evitar problemas de firewall.

Configurar el acceso a recursos de red

El acceso a archivos en la red puede ser especificado usando dos mecanismos provistos por Windows:

Mapeo de letras de unidades:
Por ejemplo: Alias "/images/" "Z:/"

Rutas UNC:
Por ejemplo: Alias "/images/" "//imagehost/www/images/"

Las letras mapeadas de unidades permiten que el administrador mantenga el mapeo en una máquina y ruta específica fuera de la configuración de Apache httpd. Sin embargo, estos mapeos están asociados solo con las sesiones interactivas y no están disponibles directamente para Apache httpd cuando se inicia como servicio. Solo use rutas UNC para recursos de red en httpd.conf de modo que los recursos puedan ser accedidos consistentemente independientemente de cómo Apache sea iniciado.

A continuación algunos ejemplos recomendados en la documentación oficial de Apache:

Ejemplo de DocumentRoot con ruta UNC

DocumentRoot "//dochost/www/html/"

Ejemplo de DocumentRoot con direcciones IP en una ruta UNC

DocumentRoot "//192.168.1.50/docs/"

Ejemplo de Alias y su directorio correspondiente con ruta UNC

Alias "/imagenes/" "//imagehost/www/imagenes/"

<Directory "//imagehost/www/imagenes/">
#...
<Directory>

Recuerde que cuando ejecuta Apache como un servicio, debe crear una cuenta separada para poder acceder a los recursos de red, tal como se describe arriba.

Recursos adicionales

Este tutorial está basado en el documento oficial de uso de Apache para Windows, cuyo contenido es adaptado al español y complementado con algunos datos adicionales.

También puede consultar la documentación oficial de Apache para información más detallada sobre este tema. Recuerde que no podemos certificar la actualidad o precisión de los contenidos externos, sin embargo esta es una fuente confiable y robusta que puede consultar con seguridad.

¿QUÉ DESEAS SABER?

Intentaremos leer tu mente...