Ir al contenido principal

Instalando Apache sobre Windows

Todo programador o aspirante a programador de aplicaciones/páginas Web debería realizar sus desarrollos en un computador local, ya sea por comodidad tranquilidad, velocidad o para evitar los inconvenientes causados cuando la red o Internet fallan. Para eso, necesita contar con las herramientas básicas para su desarrollo, entre ellas:

  • Un editor de código. Visual Studio Code o VSCode de Microsoft (https://code.visualstudio.com/) es bastante recomendado. Si se requiere algo mucho más lite pero funcional, que pueda cargarse fácilmente en una USB por ejemplo, el editor Scite está disponible en la web (https://scintilla.org/SciTE.html).
  • Servidor Web. Este puede ser Internet Information Server, disponible en muchos equipos con Microsoft Windows. Pero si el desarrollo final correrá sobre un servidor Linux, recomendaría usar un servidor web Apache. Ahora bien, si no tienes tiempo para uno u otro y programas sobre PHP, este tiene un servidor web embebido que puede usarse sin problema para desarrollos sencillos (puedes consultar la documentación y alcances en https://www.php.net/manual/...).

A continuación nos centraremos en la instalación y puesta en marcha de un servidor web Apache sobre Windows ya que no suele ser tan intuitivo (aunque el proceso se ha simplificado con los años, créanme).

Descargando Apache

Lo primero es descargar los archivos binarios o instalador desde https://httpd.apache.org/. Al momento de escribir este artículo (enero de 2023) la versión oficial es la 2.4.55 (y acabo de descubrir que mi versión local está desactualizada, supongo que aprovecharé para ponerme al día).

Aviso de seguridad: Para reducir incidentes al momento de publicar tu aplicación/página web en el servidor público, se recomienda que la versión local del servidor Web, así como de las herramientas script usadas, sean las mismas o lo más cercanas posibles a las usadas en dicho servidor, lo que en ocasiones puede significar usar versiones antiguas y potencialmente inseguras. Por supuesto, nunca está de más solicitar el administrador del sitio que los actualice si están demasiado atrasados y de esta forma asegurar la mejor y más segura experiencia posible al usuario final.

Para descargar el archivo de instalación, busca la opción “Files for Microsoft Windows” en la página de descargas. Allí deberás seleccionar alguna de las opciones disponibles. Yo utilicé la versión de “Apache Lounge” listada bajo el título “Apache 2.4.55 Win64”, esta versión provee los archivos binarios para ejecutar, no un instalador como tal. Recuerda descargar la versión más apropiada según tu versión de Windows, ya sea para 32 o 64 bits (es posible que para Windows 32 bits debas buscar una distribución diferente, como "ApacheHaus" por ejemplo).

El archivo descargado es un comprimido ZIP que contiene los archivos binarios compilados para Windows y viene adicionalmente con un archivo texto llamado “readme.txt”, que contiene la descripción del software y el proceso básico de instalación/activación.

Lo que sigue es determinar el directorio donde se copiará el software. Recomiendo usar un directorio base para copiar en él todas las herramientas a usar para tus proyectos de desarrollo web (servidor web, editor de código, motor de base de datos, etc.) y mantenerlo separado del directorio donde copiaras/crearás tu trabajo, tanto para el código como para los datos de tus “bases de datos”. De esta forma, las actualizaciones serán mucho más fáciles de realizar al no tener que modificar tus archivos de trabajo.

Una vez escogido dicho directorio, copia el contenido en un subdirectorio “apache”. Como preferencia personal evito incluir la versión en el nombre para no tener que reconstruir cualquier otro archivo de ejecución que pueda hacer uso del servidor web, como veremos a continuación.

Configuración básica

Antes de continuar, es necesario parametrizar algunos valores en el archivo de configuración, ubicado en el subdirectorio “apache/conf/httpd.conf”. Esas líneas son:

Define SRVROOT "xxxxx"
Este es el directorio dónde fue instalado el programa Apache (incluye las comillas).
ServerAdmin admin@pendiente.com
Correo electrónico del administrador.
ServerName localhost:80
Nombre asociado al servidor. En servidores de acceso público se registra el nombre “www” asociado. En este caso, lo definimos simplemente como “localhost” e incluimos el puerto estándar a usar.
DocumentRoot "${SRVROOT}/htdocs"
Modificar para apuntar al directorio donde se copiarán los archivos/scripts de la aplicación web. Se recomienda que bajo ese directorio se creen los diferentes subdirectorios con tus proyectos, para no requerir de modificar la configuración para cada aplicación a desarrollar.
ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
Si no vas a hacer uso del directorio “cgi-bin” (lo que usualmente sucede), comenta esta línea y cualquier otra que haga referencia a dicho directorio, poniendo al inicio el carácter ”#”. Esta es una configuración “legado” de cómo se configuraban los servidores en sus inicios, haciendo uso de un directorio “cgi-bin” para copiar allí los scripts dinámicos (PHP, Perl, etc.).

En caso que al ejecutar el servicio este falle y se presente un mensaje de error del tipo “could not bind to address [::]:80” o “could not bind to address 0.0.0.0:80”, verifica que no exista otro servidor ya usando el puerto 80. Si todo está libre, es posible que debas modificar la siguiente línea también para suprimir dicho error:

Listen localhost:80
Puerto de escucha por defecto. Usualmente viene predefinido solamente con valor “80”, adicionamos el “localhost” para especificar la IP de origen.

Ahora, ejecutar el servicio en Windows es algo relativamente “fácil”, basta con registrarlo en los servicios de Windows tal como se indica en la guía “readme.txt” contenida en el ZIP. Pero seamos honestos,  ¿quién quiere el camino rápido y fácil cuando existe el laaargo y peligroso? Una de las cosas que me gusta de mi computador de trabajo (en especial si es también mi equipo personal) es no tener en ejecución servicios que no requiero todo el tiempo, especialmente cuando pueden generar una posible brecha de seguridad, como un servidor web en una red abierta. Así que lo que haremos a continuación es crear un archivo BAT desde donde ejecutaremos el servicio y que podremos usar cuando necesitemos trabajar en desarrollo web e ignorar el resto del tiempo (si es que nos queda algo de eso, claro).

Breve interludio

Antes de continuar, crea un archivo “index.html” en el directorio indicado en el parámetro “DocumentRoot” y edítalo para incluir las siguientes líneas:

<html>
    <head>
        <title>Bienvenido</title>
    </head>
    <body>
        <h1>Bienvenido!</h1>
    </body>
</html>

Este texto se denomina HTML (HyperText Markup Language) y es el formato usado para mostrar documentos consultados en Internet por medio de un navegador web. Este será el documento a mostrar cuando se consulte la dirección “http://localhost” en nuestro navegador, una vez esté corriendo correctamente nuestro servidor web.

Ejecutando el servidor web en Windows

Para esto, creamos un archivo BAT en el computador, por ejemplo “webserver.bat”, con la siguiente línea:

start "WSLOCAL" /MIN [apache]\bin\httpd.exe

Esta línea abrirá una nueva ventana de consola con nombre “WSLOCAL” para ejecutar el servicio web de Apache (recuerda cambiar "[apache]" por el path en tu computador al directorio donde instalaste apache). El servicio en ejecución puede verificarse consultando desde un navegador web la dirección URL http://localhost (observa que el protocolo usado es “http”, no “https”. Aunque el uso local del protocolo HTTPS viene habilitado por defecto para algunas distribuciones, es posible que requieran de algunos pasos adicionales para su afinación, los que revisaremos en una próxima entrada de este blog).

Si todo sale bien y se tiene como respuesta de localhost el contenido del archivo “index.html” antes dispuesto (tal como se visualiza en la siguiente imagen), habremos configurado correctamente el servicio web.

Otro aviso de seguridad: Si tu equipo local puede ser visualizado desde otros equipos (o para tener en cuenta si lo que estás configurando es un servidor web Apache de acceso público), quizás sea buena idea restringir el listado de archivos al abrir directorios que no contengan un archivo “index.html” (este es el archivo a mostrar cuando se digita una URL asociada a un directorio).

Por defecto cuando se instala, Apache mostrara el listado de archivos de un directorio web, algo similar a la siguiente gráfica:

Para prevenir que esto suceda, basta con buscar en el archivo de configuración donde se configura el DocumentRoot, justo abajo se encontrarán los permisos de directorio, algo similar a:

DocumentRoot "xxxx"
<Directory "xxxx">
    ...
    Options Indexes FollowSymLinks 
    ...
</Directory>

Comenta (adicionando “#” al inicio) o retira la línea “Options Indexes FollowSymLinks” y reinicia el servicio. Con esto ya no se mostrará el contenido de ningún directorio, tal como se aprecia en la siguiente imagen.

Ahora, cómo hacemos que el servicio termine? Para ello, adicionamos las siguientes líneas al archivo BAT:

pause
taskkill /F /IM httpd.exe

La primera línea hará que se visualice en la pantalla donde ejecutamos el BAT un mensaje del tipo “Presione una tecla para continuar . . .”. Al hacerlo (presionar cualquier tecla) se ejecutará la siguiente línea, que se encarga de “matar” la tarea "httpd" que corresponde al servidor web de Apache. Para iniciar de nuevo, bastará con ejecutar de nuevo el BAT (lo que será necesario cada que se modifique por ejemplo el archivo de configuración).

En caso de ejecutar simultáneamente varias instancias de Apache, quizás pueda identificarlas modificando el nombre de la ventana asociada a cada una. En este caso, puede terminar la ejecución remplazando la última línea del BAT por la siguiente (a modo de ejemplo, como vimos anteriormente el nombre dado a la ventana es "WSLOCAL"):

taskkill /F /FI "WINDOWTITLE eq WSLOCAL"

Palabras finales

En caso que el servidor donde será publicada la aplicación/página web sea un servidor Linux, Windows también permite la creación de un servidor virtual Linux donde puede instalarse el servidor web y así acercar aún más el entorno de desarrollo al entorno final de producción. ¿Suena interesante, verdad? Ese proceso lo revisaremos próximamente en otra entrada de este blog.

Por lo pronto, es to-to-to-todo amigos.

Disfruten de su servidor web Apache sobre Windows.

Descargo: Originalmente se usó para la redacción de este artículo la distribución ApacheHaus, pero posteriormente fue modificado por Apache Lounge por razones que se explicarán más adelante.

Comentarios

Entradas populares de este blog

Manejo de recursos HTML para tus páginas web con PHP

Déjame saber si te resulta familiar esta situación: páginas web que descargan el mismo recurso (sean estilos CSS o código Javascript) más de una vez o incluyen recursos remotos que tardan una eternidad en cada descarga. Yo lo he visto en más de una ocasión y no es difícil imaginar el porqué ocurre. Un desarrollador incluye el recurso de estilos que necesita su segmento de código y otro hace lo mismo, sin reparar (o sin que siquiera importe) que comparten el mismo recurso. En otro escenario muy común, acostumbran incluir muchos recursos remotos, con lo que el rendimiento de la página depende de lo rápido que responda dicho recurso. ¿Puede hacerse algo al respecto? Claro que si. Vamos a crear una clase en PHP que se encargue de administrar estos recursos y que nos facilite su despliegue en la página sin repeticiones . ¿Y respecto a la demora en la carga de recursos remotos? Atendamos una cosa por vez, porque como dicen por ahí: «Vísteme despacio, que tengo prisa». Administrando ...

Manejo de clases globales únicas en PHP

¿Cómo acceder desde cualquier script en tu proyecto a Clases y/o funciones de uso común? Este puede ser una de las primeras directrices a establecer para cualquier proyecto porque siempre, siempre , sea en  PHP  u otro lenguaje, será necesario usar recursos comunes. En PHP existen diferentes alternativas para su manejo, ya sea por medio de variables globales o de clases/objetos estáticos. A continuación consideraremos una propuesta para este manejo. Creación de recursos globales Para ilustrar esta solución, partimos de la necesidad de implementar una librería para manejo de servicios relacionados con el servidor Web, que de forma amigable nos permita disponer de información como: Valores almacenados de la variable superglobal $_SERVER de PHP. Valores asociados a la consulta realizada por el usuario, por Ej. la dirección IP del usuario o la URL ingresada. Valores asociados al servidor web usado, por Ej. la dirección IP del servidor o la ubicación del script que ej...

¿Qué tan bueno es realmente el “foreach” en PHP?

Como toda buena historia, esta comienza hace algún tiempo. El que fuera mi jefe por allá en la primera década del 2000, realmente odiaba (y mucho) el uso del foreach en el código PHP . Prefería que usáramos alguna alternativa diferente, alguna combinación del  for o del while . ¿Por qué? Ve tú a saber, nunca fue abierto respecto a las razones de su aprensión hacia ese constructor propio del lenguaje. Pero antes de continuar, veamos qué es y para qué nos puede servir. Arreglos, tenían que ser arreglos ¿Qué es foreach ? De acuerdo al manual de PHP , su definición es la siguiente: El constructor foreach proporciona un modo sencillo de iterar sobre arrays . foreach funciona sólo sobre arrays y objetos , y emitirá un error al intentar usarlo con una variable de un tipo diferente de datos o una variable no inicializada. Para su uso correcto existen dos sintaxis validas, a saber: foreach (expresión_array as $value) { ... } foreach (expresión_array as $key => $value) { ....