Está en la página 1de 39

1.

Instala el servidor web Apache en tu PC


¿Qué es un servidor web?

Nada mejor que comenzar con un ejemplo. Cuando abrimos nuestro


navegador (IE, Firefox, Opera, Safari, entre otros) para acceder a un
sitio web, lo que sucede bajo nuestros ojos es que el navegador hace
la petición de un documento HTML a un servidor web. Éste es una
máquina con un software adecuado para atender las peticiones, no
sólo nuestras, sino de los millones de usuarios de internet. Lo que
hace el servidor es devolver los documentos, que nuestro navegador
luego nos muestra en pantalla.

Lo anterior es una comunicación de dos vías, entre el cliente (nuestro navegador) y el servidor. El
cliente solicita y el servidor entrega, ya sea una página web, una imagen o video, o cualquier otro
archivo.

¿Por qué Apache?

En la actualidad existen muchos programas servidores web. Apache, IIS de Microsoft ©, Sun, nginx;
por citar algunos. Siendo Apache el que aglomera mayor cuota de mercado. Pero, ¿por qué Apache?
¿Qué lo hace tan especial?

Según la encuesta más reciente de NetCraft, Apache domina el sector servidores web, con 59.13% de
la cuota. Es seguido por IIS con 21%, Google con 11.9% y nginx con 8.23%. El resto se reparte entre
otros con porcentajes menores a la unidad cada uno.

Estos números no son un chiste. Apache domina por mucho este sector por diversas razones. Entre
las principales:

Ligereza: si creías que sólo lo pueden correr supercomputadoras, nada más lejos de la
realidad. De hecho, Apache no especifica requisitos mínimos, ya que puede correr en
sistemas tan viejos como el de mi abuelita.
Modularidad: le puedes agregar mayor funcionalidad agregando módulos según tus
necesidades. Incluso sabiendo un poco de programación, puedes crearlos tú mismo.
Comunidad: Apache es un proyecto que involucra a millones de personas. Puedes contar con
el apoyo de numerosos usuarios para resolver tus dudas y recibir ayuda.
Seguridad: como en el punto anterior, el Proyecto Apache involucra tanto a desarrolladores,
como personas que reportan errores, que añaden funcionalidad, y mucho más.

Todo esto y además... ¡Es gratis! Eso significa que no tienes que desembolsar ni un peso en licencias,
soporte técnico que termina siendo molesto con preguntas como: ¿Está seguro que su PC está
encendida?, actualizaciones, y demás.

Así que si en realidad deseas adentrarte en este mundo (que muchos piensan disponible sólo para
geeks, ingenieros, técnicos, hechiceros y demás), estás listo para realizar la instalación del servidor
en tu PC. Con lo cual podrás compartir tus ideas, tus archivos, pelis y demás, a tus amigos y al resto
del mundo.

Instalación del Servidor Apache

Primero que todo necesitamos hacernos de la versión más reciente del servidor Apache. Para esto
vamos a ir directamente al sitio oficial del proyecto. Esto es apache.org.

Una vez ahí, buscamos abajo por una sección llamada Projects. Justo debajo clicamos donde dice
HTTP Server. Ahora debemos estar en la sección httpd de apache.org. Ahí vamos a encontrar todas
las versiones disponibles de nuestro buen servidor. Vamos a buscar la versión más nueva, que no sea
alpha release.

Los alpha releases son versiones recién terminadas, pero están disponibles como código fuente para
ser compilado. En artículos posteriores veremos como compilar las distribuciones. En nuestro caso
vamos a optar por las versiones ya compiladas y listas para instalar. Al terminar la edición de este
artículo, tenemos disponible la versión 2.2.17. Clicamos donde dice Download como en la imagen.

Vamos a ser direccionados a otra página donde podemos ver la sección Downloading the Apache
HTTP Server. Aquí tenemos las versiones actuales, entre ellas la versión alpha que ya mencionamos.
Vamos a clicar la versión 2.2.17 (otra vez), tal como la imagen.
Apareceremos en un ancla dentro de la misma página. Si nos desplazamos hacia arriba, veremos la
sección Mirror. Aquí podemos cambiar de mirror si nos apetece, seleccionándolo de la lista
desplegable y pulsando el botón Change. Volvemos a nuestra sección anterior y vemos que tenemos
diferentes colores y sabores del servidor.

Las primeras dos versiones son código fuente para SO Unix (incluido Linux) en diferentes tipos de
compresión (gzip, bzip2). La tercera es un código fuente para SO Windows. La cuarta versión es un
instalador para Windows sin módulo SSL. La siguiente es la que vamos a descargar. Se trata de otro
instalador para Windows que incluye OpenSSL.

El módulo OpenSSL permite crear conexiones seguras mediante el cifrado de los datos que se
transfieren. Imagina que te dispones a realizar una compra en un sitio web, y tienes que introducir los
datos de tu tarjeta de crédito, pero sucede que alguien está esnifando tu conexión. En una conexión
normal, estos datos se transfieren como texto llano, por lo que el atacante tendría a la vista nuestros
datos. Sin embargo, en una conexión cifrada, el atacante sólo obtendría números y símbolos sin
sentido, por lo que tendría que realizar una labor titánica para descifrar los datos de tu cuenta.

Nosotros vamos a descargar esta última versión, ya que para nuestras prácticas, necesitaremos de los
servicios de este módulo. Damos click al link httpd-2.2.17-win32-x86-openssl-0.9.8o.msi. Después
de este link, tenemos otros (PGP, MD5, SHA1) que nos dan unos números para verificar la
integridad del archivo que hemos descargado.

¡Bien! Pues eso es todo por ahora. Clica el siguiente link para continuar con el Tutorial paso a paso
para la instalación del servidor web Apache.

2. Tutorial instalación servidor web Apache

En este tutorial vamos a ver cómo instalar el Servidor HTTP Apache. Paso a paso y de manera
sencilla, sin tanto rollo. Primero que todo, asegurarnos de tener a nuestra disposición la liberación
más reciente de este programa. Este aplica para versiones 2.*.

Paso 1

Ejecuta el instalador. Click en Next


Paso 2

Después de leer el Acuerdo de Licencia (seguramente), selecciona el botón I accept... para aceptar
la licencia, y click en Next.

Paso 3

Después de leer lo que es Apache, y unas cuantas noticias y reconocimientos, click en Next.

Paso 4

Aquí vamos a especificar información referente a nuestro sitio. En la casilla Network Domain
indicamos nuestro dominio. Como esta instalación es para prácticas, vamos a poner localhost, que
es la referencia a nuestra IP de retroceso 127.0.0.1 (nos regresa a nuestra propia PC). En Server
Name ponemos igualmente localhost. Y por último en Administrator's Email Address ponemos
nuestra dirección de correo-e. En caso de error en el procesamiento de una petición, ésta se
muestra al visitante para que pueda ponerse en contacto con el admin del sitio para reportar el
error.

Después vemos dos opciones. La primera instala nuestro servidor para todos los usuarios de la
PC, como servicio de Windows en el puerto 80. Es decir, cada que inicies la PC, se iniciará también
nuestro servidor. La segunda opción instala el servidor solamente para ti, en el puerto 8080, pero
tendrás que arrancarlo manualmente cada que quieras practicar. En nuestro caso seleccionamos la
primera, porque necesitaremos el servidor corriendo siempre, y damos click a Next.

Paso 5

Aquí seleccionamos el tipo de instalación. En típica se instalan los componentes por defecto. En
Custom podemos elegir los que queremos instalar. Vamos a chequear la opción Custom.

Paso 6

Aquí tenemos todos los componentes para nuestra instalación. Apache Runtime son los archivos
núcleo. Los archivos de cabecera y librerías no se instalan por defecto. Sirven para programar
módulos nosotros mismos. Vamos a dejarlos sin seleccionar. Los SSL Binaries son esenciales para
crear conexiones seguras, por lo que deben estar seleccionados. Los demás componentes
podemos omitirlos, pero mejor vamos a dejarlos seleccionados para futuras referencias.

Abajo podemos ver a ruta de instalación por defecto. Nosotros vamos a cambiarla por una ruta más
intuitiva y de mejor acceso.

Por seguridad debes evitar dejar variables por defecto en programas servidores, sean HTTP, FTP,
SMTP, u otros. Por lo que ya estás advertido.

Pues, pulsamos el botón Change.

Paso 7

Nosotros previamente creamos la carpeta web-server, y apache dentro de ella, en nuestra inidad
primaria. O puedes escribir la ruta en la parte de abajo, e igualmente se creará "on the fly".

De ahora en adelante, para evitar comportamientos inesperados e impredecibles, deberás hacer


costumbre el uso de minúsculas para nombrar los directorios y archivos que vaya a ser procesados
por Apache, ya que nuestro servidor es "case sensitive" (discrimina entre mayúsculas y minúscula).
Es decir, mientras para Windows casa.html es lo mismo que CASA.html, para Apache no.

Click en OK.
Paso 8

Volvemos a la ventana anterior. Ya tenemos los componentes a instalar y la ruta de instalación que
queremos. Puedes pulsar Next.

Paso 9

Esta ventana nos dice que el Setup ya está listo para instalar nuestro servidor. Pulsamos Install.
Paso 10

Veremos la clásica ventana con la barra de progreso. El tiempo de instalación depende,


obviamente de nuestro hardware. En promedio, no debería tomar más de un minuto.

Paso 11

¡Listo! La ventana final nos dice que el asistente ha instalado con éxito nuestro nuevo y flamante
servidor Apache 2.2.17. Sólo click en Finish. Ahora deberías tener en la bandeja de sistema, el
ícono de Apache con el símbolo de tocar (el triangulito) verde. Si tienes activado un programa
Firewall, posiblemente éste te abra una ventana en la que sólo debes permitir o desbloquear al
servidor.
Paso 12

Por último, sólo abre tu navegador favorito y teclea en la barra de dirección 127.0.0.1 o localhost. Si
todo salió bien, deberías ver una página con el mensaje "It Works!", que en español es ¡Funciona!

3. Configuración de Apache

Después de instalar Apache exitosamente, y de haber comprobado su funcionamiento mediante


nuestro navegador, ahora vamos a afinar unos detalles en el archivo de configuración de Apache y a
aprender que significan cada una de las directivas. Pero antes vamos a ver un poco que es lo que
contienen las diferentes carpetas de instalación, para irnos familiarizando:

bin: Es la carpeta principal de Apache. Aquí, como su nombre, tenemos todos los archivos
binarios, ejecutables y DLLs. El más importante de todos es httpd.exe, es e núcleo de nuestro
servidor. Tenemos otros como ApacheMonitor.exe, que es el que se encarga de monitorizar si
nuestro servidor está corriendo o si está detenido (ícono en la Bandeja de Sistema). Si ubicas
el cursor en cada uno de éstos, verás el tooltip que nos dice muestra la descripción de estos
archivos.
cgi-bin: Aquí es donde deberíamos tener los archivos CGI o binarios que usamos si
queremos procesar datos, como los formularios. Debería tener el archivo printenv.pl, un
archivo en lenguaje de programación Perl que nos imprime las variables de entorno. En
tutoriales posteriores, veremos cómo instalar el intérprete Perl, con lo cual veremos a este
archivo en acción y a crear nuestros propios archivos perl para procesar ciertas tareas.
conf: Esta carpeta guarda los archivos de configuración de nuestro servidor, que a su vez
contienen las directivas de Apache.
error: Aquí se encuentran los mensajes de error que ves cada que una petición no se puede
procesar.
htdocs: Aquí debemos colocar nuestros documentos (páginas, imágenes, videos, y más) que
queremos mostrar al mundo. Cada vez que nosotros o alguien más entre a nuestro sitio, será
ubicado en esta carpeta, dentro de la cual vamos a encontrar nuestro index.html.
icons: Aquí se encuentran numerosos iconos que el Apache usa por defecto.
logs: Otra de las carpetas importantes. De hecho es el más importante en cuanto a
administración. Se trata la bitácora de Apache, como un diario en el que guarda todo lo que
hizo durante el día. Dentro de esta carpeta tenemos dos archivos importantes, aquí: access.log
y error.log. El primero nos dice qué IP se conectó a nuestro sitio, la fecha y hora, y qué fue lo
que nos pidió. El segundo muestra los errores durante las conexiones.
manual: Contiene la documentación de Apache HTTP server.
modules: Contiene todos los módulos que añaden funcionalidad al servidor.

Archivo de configuración httpd.conf

Abrimos el archivo de configuración. Lo puedes abrir mediante el menú de programas (inicio →


Apache HTTP Server 2.2 → Configure Apache erver → Edit the Apache httd.conf Configuration
File). O puedes abrirlo directamente con cualquier editor de texto plano, como el Bloc de Notas
(NotePad). De ninguna manera se edite el archivo con un procesador de texto, como el Office Word,
ya que estos añaden formato a texto, además de cabeceras, posibles macros y demás, que en este caso
son basura. De hecho, las últimas versiones de Word lanzan un mensaje de advertencia antes de
grabar un archivo de texto plano, por si las dudas.

Una vez abierto, encontraremos algo parecido a This is the main Apache HTTP server
configuration... Vemos que hay una serie de almohadillas (#) al comienzo de ciertas líneas. Las
almohadillas definen líneas de comentario, las cuales pasará por alto el servidor. Las directivas que
queremos que interprete, no deberían llevarlas. Por lo regular estos comentarios explican en claro
inglés el significado de las directivas.
ServerRoot: nos indica el directorio raíz del servidor, es decir, donde lo hemos instalamos. Si
queremos cambiarlo de lugar, tendremos que cambiar esta directiva. Aunque en realidad, dado que
Apache está instalado como servicio, deberíamos modificar la entrada de registro, también, para que
siga trabajando al iniciar Windows.

Listen: indica el puerto en el que se quedará el servidor esperando a recibir peticiones. Por defecto,
se declara el puerto 80, que es donde trabaja normalmente el protocolo web (HTTP)

LoadModule: esta directiva nos indica que módulos va a cargar el servidor. Después veremos cuales
son los módulos más importantes y su descripción.

ServerAdmin: aquí tenemos la dirección de correo-e que entramos durante la instalación. En caso de
error, esta dirección será transmitida a los usuarios para que puedan retroalimentarte.

ServerName: aquí podemos poner nuestro dominio (si lo tenemos) o nuestra IP. Debería tener las
almohadillas, por lo que se las vamos a quitar.

DocumentRoot: aquí es donde definimos el directorio raíz al que van a acceder los usuarios al que
nos visiten. El archivo que se buscará primero será el index.html. De no encontrarlo, se nos mostrará
un índice con los archivos que tengamos dentro del directorio. Por esto, de ahora en adelante será
práctica segura el colocar en cada directorio un archivo index.html, para prevenir que puedan ser
indizados archivos de carpetas sensibles.

Nota que en vez de las diagonales invertidas que usa Windows para indicar las rutas, debemos usar,
tal como lo hacemos en la web, las normales "/".

DirectoryIndex: aquí definimos el archivo que servirá de índice en nuestro sitio. En este caso
tenemos definido index.html, que es lo primero que buscará el servidor cuando un usuario acceda a
nuestro sitio sin especificar un archivo en especial.

ErrorLog: define dónde se grabarán los errores generados. Está definido por "logs/error.log".

LogLevel: indica el nivel de los errores que queremos que nos reporte. Sus posibles valores son,
ordenados de menor a mayor: debug, info, notice, warn, error, crit, alert, emerg. Si definimos emerg,
sólo nos reportará los errores de más alto nivel, dejando loes errores leves sin reportar. Si definimos
un valor menor, nos reportará esos y lo que se ubican por arriba. "warn" es su valor por omisión.

DefaultType: especifica el tipo de archivo por defecto, en caso de que alguno carezca de extensión.
Esto es debido a que al mandar un archivo, la cabecera del mensaje debe indicar que tipo de archivo
se está enviando. Por defecto está definido por "text/plain". Puedes investigar los tipos buscando
MIME en Google o la Wikipedia.

Estas son las directivas que usaremos mientras avanzamos. Ya que hay otras que son medio
avanzadas y explicaré o mencionaré más adelante. Otras no se definen en este archivo pero también
son más o menos importantes. Ya puedes cerrar el archivo. Si realizaste modificaciones, tendrás que
grabar el archivo y reiniciar Apache, para que vuelva a carga las directivas actualizadas.

De ahora, y siempre que modifiques el archivo httpd.conf, deberás reiniciar Apache.


Archivos log

Estos archivos son una bitácora del servidor, como un diario en donde se guarda todo lo que hace.
Para un administrador, estos son la base del buen funcionamiento del sitio. por lo que debería ser
tarea revisarlos con cierta frecuencia dependiendo de tráfico.

access.log

Este archivo mantiene es la bitácora de acceso de nuestro servidor. En ella se guardan todos los
accesos a nuestro sitio mediante un formato preestablecido.

La IP del equipo que realiza la petición.


Fecha y Hora del acceso. El formato es fecha (dd/mm/full year) :hora (HH:mm:ss ) Z (zona
horaria respecto al meridiano 0). Ejemplo: 15/Jan/2011:17:19:09 -0800.
La operación de petición, el archivo o directorio, y el protocolo y su versión. Ejempo: GET
/favicon.ico HTTP/1.1.

De hecho, después de una intrusión, un atacante buscará al menos modificarlo para borrar sus
huellas, o en su defecto eliminarlo, aunque esto último canta más que la eliminación de tus huellas
nada más.

error.log

Aquí se guardan los errores de nuestro servidor. De vez en siempre, deberías echare una mirada para
ver si hay errores para resolverlos y ofrecer un mejor servicio y experiencia de navegación al
usuario.

Puede que, recién instalado, tengas un error como el siguiente:


httpd.exe: Could not reliably determine the server's fully qualified domain name, using
192.168.1.14 for ServerName

Pues si leíste todo el artículo, y le quitaste las almohadillas a la directiva ServerName, ya no debería
seguir dando ese error. Lo puedes corroborar chequeando las últimas entradas del archivo error.log.
Si no es así, ¡adelante!

Otra cosa a tener en cuenta, es que, al menos con un sitio de producción, deberías seguir la pista a
estos archivos, ya que pueden llegar a crecer demasiado. Por lo que deberías, en el mejor de los
casos, moverlos de lugar para forzar al servidor a crear unos nuevos, mientras los recién movidos
puedes guardarlos por cierto tiempo, digamos unos tres meses, en caso de que quieras realizar una
auditoría.

4. Conoce los módulos de Apache

Los módulos sirven para añadir funcionalidad al Servidor HTTP Apache. Existen en la actualidad
incontable número de estos, diseñados para realizar diversas tareas.

Apache se instala por defecto con ciertos módulos. Para saber cuáles son, puedes echarle un vistazo
tu archivo de configuración httpd.conf. En la sección LoadModule, podrás ver todos los módulos
que Apache instala por defecto. Algunos los arranca, y otros no. El recuadro muestra algunos
módulos. Los que están comentados no se inician junto al buen servidor.

LoadModule actions_module modules/mod_actions.so


LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so

Ahora veremos brevemente lo que hacen los módulos más importantes. Puedes entender mejor el
funcionamiento de los módulos deshabilitándolos, tal como se indica en los ejemplos. Así veras el
comportamiento de Apache en tiempo real. Después de esto, vuelves a dejar todo como estaba.

mod_alias: Por eso mucha gente le teme a este mundo webero, porque la mayoría de libros y
referencias maneja un lenguaje muy técnico. Vamos a tratar de definirlo de una manera sencilla.

Alias es un nombre alternativo que se le da a la gente. En el servidor, un alias nos permite


redireccionar una URL, a otra ruta dentro de nuestro árbol de directorios, incluso fuera de nuestro
directorio definido por DocumentRoot. Como es un módulo bastante interesante, vamos a dejar el
ejemplo para después.

mod_autoindex: A falta de un documento index.html, este módulo se encarga de crear un índice de


todos los archivos que se hallen en el directorio de la petición.

Mueve el archivo index.html fuera del directorio htdocs, y coloca varios archivos de
cualquier tipo en el directorio.
Ahora abre el sitio desde tu navegador. Deberías ver un índice de los archivos que tienes
dentro del directorio.
Reinicias Apache sin este módulo (comentando la línea con #), deberías ver un mensaje de
error.

mod_dir: Controla la directiva DirectoryIndex, en la cual definimos el archivo índice de un


directorio. Por defecto es index.html, pero podemos cambiarlo, y este módulo se encargará de
buscarlo.

Con los archivos que colocaste en el directorio htdocs, incluyendo el index.html, reinicia
Apache deshabilitando este módulo.
En vez de ver el contenido de index.html, verás el listado de archivos del directorio.

mod_auth_basic: Permite que usuarios accedan a zonas privadas mediante autenticación básica.
Estas zonas se definen en httpd.conf.

Otros módulos interesantes y que no están habilitados por defecto.

mod_expires: Permite especificar el tiempo de vida de un documento en caché. Como el módulo


está deshabilitado, este tiempo lo determina el navegador. Aunque este tiempo es editable.

mod_mime_magic: determina el tipo de MIME de un archivo, con solo examinar los primeros
bytes.
mod_rewrite: Permite reescribir las URL "on the fly". Necesario para URL amistosas en
WordPress.

mod_ssl: Permite el soporte para SSL. O sea, conexiones seguras.

mod_speling: Corrige las URL mal escritas o con mayúsculas, tratando de encontrar el documento
que correspondiente. No funciona con el dominio, sino con los documentos. Nota la ironía de escribir
speling, en vez de spelling.

5. Instalación de PHP como módulo de Apache

¡Hola Mundo! Después de la instalación del Servidor HTTP Apache, estamos por instalar uno de los
hitos en cuanto a dinamismo en las páginas web. Se trata del intérprete PHP, el cual instalaremos
como módulo de servidor Apache.

"PHP es un lenguaje de programación interpretado, diseñado originalmente para la creación de


páginas web dinámicas. Es usado principalmente en interpretación del lado del servidor (server-side
scripting) pero actualmente puede ser utilizado desde una interfaz de línea de comandos o en la
creación de otros tipos de programas incluyendo aplicaciones con interfaz gráfica usando las
bibliotecas Qt o GTK+."

Con PHP podremos crear páginas cuyo contenido se crea "onthefly".

Primero necesitaremos descargar el intérprete del sitio oficial. Al momento de cerrar la edición,
tenemos disponible la versión 5.3.5, a través del sitio oficial PHP.net. Pero nos encontramos con
diferentes versiones: VC6 y VC 9, y Thread Safe y Non Thread Safe.

La versión Non Thread Safe se requiere cuando hay una sola petición por instancia de PHP, como
cuando usamos FastCGI, en la cual php-cgi.exe maneja una sola petición a la vez, y el servidor
genera varias instancias de php-cgi.exe para manejar muchas peticiones en paralelo.

La versión Thread Safe se requiere cuando se usa PHP como módulo de Apache, cuando el servidor
maneja múltiples peticiones en el mismo proceso, es decir, en paralelo.

Ahora, la versión VC9 se requiere cuando corremos como servidor web al IIS, de Microsoft.
Mientras para Apache necesitaremos la versión VC6.

Bien, entonces descargaremos la versión más actual VC6 Thread Safe, la cual es: VC6 x86 Thread
Safe. Dentro de esta versión, vemos dos distribuciones: un ZIP pack y un instalador MSI.

En lo personal, y en voz de miles de personas, el archivo MSI no sirve. Se supone que debería
instalar automáticamente nuestro intérprete PHP para que esté listo para usar. En la realidad, eso
nunca funciona. Por lo que vamos a descargar el archivo ZIP.

Creamos una carpeta llamada php, y descomprimimos el contenido del archivo ZIP descargado
dentro de ella. Copiamos todos los DLL, sin incluir los de subdirectorios, y los copiamos a nuestra
carpeta de sistema (\system32\).

Ahora, cambiamos el nombre al archivo php.ini-development por php.ini, y creamos una copia de
respaldo. Este es el archivo de configuración de PHP. Vamos a realizar las modificaciones
pertinentes para que funcione como intérprete de Apache.

Configuración: php.ini

Lo primero que haremos será buscar la directiva register_globals y aegurarno que, por
razones de seguridad esté Off, No porque tenerla ON sea inseguro, sino que tendríamos que ser más
cuidadosos con nuestro código.

Después buscamos la cadena extension_dir = "ext". Vemos que hay punto y coma (;) al
comienzo de la línea. Esto, a diferencia de Apache (#), es un comentario. Descomentamos la línea y
dentro de las comillas indicamos la ruta del directorio de extensiones de PHP. En este caso debería
ser "C:/web-server/php/ext".

Nota que para indicar directorios usamos diagonales normales. Esto es porque ni Apache reconoce
las invertidas, ni se usan en la web. Las usa Windows simplemente para ser "diferentes"
.

Ahora buscamos la directiva upload_tmp_dir. Esta indica donde se guardarán temporalmente las
subidas que hagan los usuarios para su procesamiento. Descomentamos la directiva e indicamos la
ruta entre comillas. En este caso vamos a ubicarla en "C:/web-
server/apache/htdocs/uploads". Para ello, también crearemos la carpeta, recordando usar
minúsculas.

Abajo, buscamos upload_max_filesize. Por defecto está en 2M. Es decir, el tamaño máximo
las subidas está establecida en 2 MB, lo cual en la actualidad se queda un poco corto. La cambiamos
a 10M.

A continuación buscamos la directiva session.save_path. Aquí se guardarán las sesiones de


los usuarios que entren a nuestro sitio. Estas sesiones son identificadores temporales de aquellas
personas que visiten nuestro sitio, así como las cookies, pero de lado servidor. Muy útil, por ejemplo,
cuando queremos montar nuestro propio foro.

Tenemos "N;/path" como ejemplo de la sintaxis. La N significa el número de niveles de debajo


del directorio principal en caso de que nuestro OS no pueda manejar muchos archivos dentro de un
mismo directorio. Nosotros sólo estableceremos la ruta "C:/web-
server/apache/htdocs/sessions". Descomentamos y creamos la carpeta.
A continuación, tenemos las modificaciones hechas:

register_globals = Off
extension_dir = "C:/web-server/php/ext"
upload_tmp_dir = "C:/web-server/apache/htdocs/uploads"
upload_max_filesize = 10M
session.save_path = "C:/web-server/apache/htdocs/sessions"

Ahora, salvamos el archivo y lo copiamos en la carpeta \Windows\.

A estas alturas deberías tener el servidor Apache corriendo como servicio en el puerto 80. Por lo que
procederemos a modificar el archivo de configuración para indicar a Apache que cargue el módulo
PHP.

Dentro del archivo httpd.conf, buscamos la líneas Load Module, en donde indicamos que módulos
queremos que cargue. Nos vamos hasta la última de esas directivas y añadimos las dos siguientes:

LoadModule php5_module "C:/web-server/php/php5apache2_2.dll"


PHPIniDir "C:/web-server/php/"

La primera directiva nos indica el módulo que se encarga de la comunicación entre el servidor y el
intérprete. La cadena entre comillas le indica al servidor la ruta donde se ubica el módulo y su
nombre. El nombre es por PHP5 y Apache2.2.

La segunda directiva nos indica el directorio PHP. Las cadenas entre comillas le indican al servidor
la ruta donde se ubica todos los archivos referentes a éste.

Lo siguiente, es buscar a directiva DirectoryIndex, con la cual le indicamos a Apache el tipo de


archivo que queremos nos sirva. Agregaremos, donde dice <IfModule dir_module>, el tipo de
archivo index.php, de tal manera que quede:

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

Así, indicamos que primero busque index.php, si no lo encuentra, buscará index.html. Y abajo
agregamos lo siguiente:

<IfModule mod_php5.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>

Esta directiva indica, literalmente, que si existe el módulo php5, que añada los archivos .php y .phps
al repertorio. Obviamente, estos los interpretará PHP.

¡Listo! Guardamos y reiniciamos apache.


Para probar que nuestro intérprete PHP quedó bien configurado como módulo de Apache, crearemos
un archivo que nos imprimirá las variables de entorno. Sólo copia y pega en tu editor de texto:

<?php
phpinfo();
?>

Échale un vistazo este documento y trata de entender las variables que se imprimen.

6. Instalación de la base de datos MySQL

¡Hola Mundo! A estas alturas ya deberíamos tener instalado y corriendo en nuestra PC el Servidor
HTTP Apache 2.2.17 y el intérprete PHP 5.3.5 como módulo del primero.

Ahora continuaremos con nuestros tutoriales para que te conviertas en un webmaster.

Se trata de nuestra base de datos. Muy útil cuando queremos usar CMS como WordPress y
Joomla, instalar nuestro foro con phpBB o construir nuestra red social con BuddyPress. Ella
guardará nuestros artículos, páginas, usuarios registrados, y demás.

Esta base de datos se llama MySQL, y es la elección de muchos por varias razones. Es fácil de
usar, totalmente funcional, y además es gratis.
Vamos directamente al sitio de las descargas que agrupa las versiones disponibles: Download
MySQL Community Server.

Aquí tenemos las versiones generalmente disponibles (GA). Tenemos disponibles la versiónes
5.5.9 para la plataforma Windows en instalador, paquetes ZIP, y código fuente, tanto 32 como 64
bits. Elegimos la adecuada. En mi caso elegí el instalador para sistemas 32 bits mysql-5.5.9-
win32.msi.

Instalación

Paso 1.
Procederemos a ejecutar el instalador. Te da la bienvenida al asistente de instalación. Click Next.

Paso 2.
Después de leer la licencia GNU/GPL, procedes a aceptar los términos mediante el checkbox.
Paso 3.
Elegimos la instalación personalizada (Custom).

Paso 4.
Seleccionamos los componentes que queremos instalar. Dejamos los que están seleccionados por
defecto. Cambiamos la ruta de instalación presionando el botón Browse...

Paso 5.
Vamos a instalar los archivos en nuestra carpeta web-server, para tener facilidad de acceso a
todos nuestros archivos relativos al servidor. Esto para hacer más eficaces las tareas de
mantenimiento. Dentro del directorio web-server, crearemos el directorio mysql. Más fácilmente,
escribiremos el nombre del directorio en la caja de texto y el instalador se encargará de crearlo.
Click OK

Nota que, a pesar de la insistencia en usas minúsculas para nombrar nuestros directorios, aquí
tuve un error de dedo. Afortunadamente, como no son directorios disponibles a través del servidor
no habrá problema. Pero prometo remediarlo.
Paso 6.
Ya tenemos definidos los componentes a instalar y la ruta. Click Next.

Paso 7.
Ya tenemos definidas todas las variables que necesita el instalador. Click Install.
Paso 8.
Ya tenemos instalado nuestra base de datos. Hay un checkbox seleccionado que nos indica que va
a lanzar el Asistente de Configuración.

Paso 9
Ahora te aparecerán unas ventanas extras antes de aparecer la del Asistente de configuración.

Configuración de MySQL Server

Después de la instalación del servidor de base de datos MySQL, ahora toca configurarlo según
nuestras necesidades. Para ello vamos a correr el MySQL Instance Configuration Wizard, o el
asistente de configuración.

Si vienes del artículo anterior, ya deberías tener corriendo el asistente. En caso contrario, del menú
Todos los Programas, lo buscamos en el grupo MySQL.
Paso 1
Veremos la clásica pantalla de bienvenida. Click Next.

Paso 2
Ahora vemos la instancia de configuración. Elegimos la opción Detailed Configuration. Esto nos
permitirá tener mayor control sobre el uso que le queremos dar al servidor.

Paso3
En la siguiente ventana elegimos Developer Machine como tipo de servidor, ya que somos
desarrolladores y vamos a usarlo para hacer pruebas. Las otras opciones son para instalación de
servidores de base de datos dedicados. Lo cual implica, principalmente, asignar más recursos a
MySQL.
Paso 4
En tipo de uso, seleccionamos Multifunctional Database. Esto nos permite tener una base de datos
de propósito general.

Paso 5
La siguiente opción elegimos la ruta de instalación de InnoDB. Elegimos la ruta de instalación. Las
tablas InnoDB nos sirven para recuperar información corrompida por bloqueo o falla de sistema.
Paso 6
Aquí elegimos el número aproximado de conexiones simultáneas al servidor. Seleccionamos
Manual Settings, y del menú desplegable seleccionamos 10. Un número más que suficiente para
nuestras pruebas.

Paso 7
Las siguientes opciones son vitales para el servidor. La opción nos permite habilitas tráfico TCP/IP.
Debido a que la base de datos la necesitaremos para crear sitios web, la habilitaremos. El puerto lo
dejamos en el establecido por defecto, el 3306. Al lado vemos una casilla que nos permite añadir
una excepción al Firewall. Esto permitirá desbloquear ese puerto si, y solo si, tenemos ejecutando
el Firewall de Windows. Si usas cualquier otro necesitarás configurarlo manualmente.

La segunda opción es recomendable. Habilitar Modo Estricto hace que la validación de la sintaxis
no sea tan permisiva, añadiendo seguridad. Algo parecido a register_globals = Off en PHP.
Paso 8
Aquí elegimos el juego de caracteres de nuestra base de datos. Elegimos UTF-8 porque nos
permite el manejo de la mayoría de los juegos de caracteres. Hablando de internet como una
tecnología que tiende a la internacionalización, debemos cubrir las posibilidades.

Paso 9
Aquí configuramos el servidor MySQL como servicio de Windows. Elegimos el nombre del servicio
por defecto y que arranque automáticamente con el OS. La otra opción nos permite agregar la ruta
de los binarios a la variable PATH. Esto permite ejecutarlos desde la interfaz de línea de comando
sin necesidad de especificar ruta.
Paso 10
Aquí establecemos la contraseña root (el equivalente a administrados en Windows). La casilla
Enable root access form remote machines nos permite conectarnos remotamente al servidor como
root para labores de mantenimiento, en vez de hacerlo desde la máquina donde está corriendo el
servidor MySQL. Por tratarse de un servidor de desarrollo, desmarcamos la casilla.

Paso 11
Ya tenemos todas las variables que necesita el asistente para configurar el servidor. Cick Execute.
Paso 12
Durante la configuración, se crea el archivo my.ini. Es el equivalente al httpd.conf de Apache y
php.ini de PHP. Es el archivo de configuración. Además, inicia el servicio y aplica ajustes de
seguridad. Una vez terminado veremos una ventana parecida a esta.

Paso 13
Como siempre, tenemos que asegurarnos que todo salió bien y que tenemos funcionando nuestro
servidor de base de datos. Para ello abrimos una consola. Esto es: Inicio → Ejecutar → cmd.exe.

Una vez en la consola, tecleamos:

telnet 127.0.0.1 3306

Veremos como respuesta unos símbolos raros. Pero entre ellos, distinguiremos la versión de
MySQL. Tal como la imagen.
¡Felicidades! Ya tienes corriendo el trío Apache + PHP + MySQL. Después veremos los últimos
detalles por afinar para que todo el conjunto trabaje de manera óptima.

7. Afinando detalles en nuestro sitio web

Después de haber instalado exitosamente el servidor Apache 2.2.17, el intérprete PHP 5.3.5 y el
servidor de base de datos MySQL 5.5.9, vamos a afinar ciertos detalles para tener nuestro sitio de
desarrollo trabajando al 100%.

En lo personal, no me gusta estar cambiando de carpeta cada que quiero acceder (no accesar) a
ciertos archivos de Apache, PHP, o MySQL. Por lo tanto, vamos a reubicar ciertos directorios para
tenerlos más cerca y poder realizar mejor las tareas de administración, ya que tendremos en un
sólo directorio el acceso a todos nuestros componentes principales.

Apache

Primero, crearemos una carpeta llamada www en el directorio de nuestro sitio, sea web-server o el
nombre que le hayas puesto. Ahí, ubicaremos nuestros archivos accesibles desde internet. Para
esto, moveremos todo el contenido de la carpeta htdocs a esta.

Para que sigamos teniendo acceso a estos archivos desde la web, tendremos que modificar la
directiva DocumentRoot de nuestro archivo de configuración de Apache, httpd.conf, de tal manera
que nos indique la ruta actual. Debería quedar:

DocumentRoot "C:/web-server/www"
Ahora, accederemos a nuestro sitio mediante la IP de retroceso. Esto es 127.0.0.1. Pero recuerda,
antes debes guardar el archivo httpd.conf y reiniciar el Apache. Deberías ver el mensaje Forbidden.

Para solucionarlo, también debemos modificar la directiva Directory. Verás que abajo de la directiva
DocumentRoot, tenemos otra donde se establecen los parámetros por defecto de los directorios.
Más abajo tenemos los parámetros del directorio de documentos. Encontraremos la ruta antigua.
La cambiamos por la reciente, como se indica abajo:

<Directory "C:/web-server/www">

Ahora sí. Guarda y reinicia. Podrás acceder a tus documentos web normalmente. Intenta entrar a tu
archivo info.php.

Deberás tener en el directorio raíz del servidor, las carpetas de Apache, PHP, MySQL y www. Así,
desde allí podrás tener acceso los principales sitios de tu servidor.

Recuerda poner en cada carpeta que crees dentro de www un archivo index.html, aunque sea
vacío. Esto evitará que, de todos los archivos contenidos, se cree un índice o listado de ellos. Esto
puede ser peligroso, si tienes ciertos archivos sensibles en alguna de estas carpetas.

MySQL

Para detener o arrancar el servicio MySQ, puedes abrir el administrador de servicios de Windows
(services.msc). Pero, más fácilmente: abrir una consola (cmd.exe). Ahí tecleas cualquiera de los
siguientes dos comandos:

net stop mysql


net start mysql
Dependiendo de si quieres deteneer o iniciar el servicio. Donde net stop detiene el servicio y net
start lo inicia, mientras mysql es el nombre de dicho servicio. Sin embargo, si queremos
automatizar más este proceso, podemos crear un archivo .bat para iniciar, otro para detener, y otro
para reiniciar.

Para detener el servicio, copiamos el siguiente texto en el editor de texto, y lo grabamos como
stop.bat.

@echo off
net stop mysql
echo ---Servicio Detenido---
pause

Para detener el servicio, copiamos el siguiente texto en el editor de texto, y lo grabamos como
start.bat.

@echo off
net start mysql
echo ---Servicio Iniciado---
pause

Para reiniciar el servicio (detener e iniciar), copiamos el siguiente texto en el editor de texto, y lo
grabamos como restart.bat.

@echo off
net stop mysql
echo ---Servicio Detenido---
net start mysql
echo ---Servicio Reiniciado---
pause

Muy importante la extensión .bat. Ya que de lo contrario, al correr estos archivos, no se prodrá
llamar a la consola y no se ejecutarán los comandos. Aquí hay un ejemplo de los que se debería de
ver al ejecutar el archivo restart.bat.

Estos archivos los grabamos en el directorio raíz de nuestra instalación del servidor de base de
datos. Y creamos unos accesos directos, los cuales moveremos a la carpeta propia de programas
del menú de inicio, con lo cual tendremos acceso a estas tareas desde este menú.

Para terminar, pordemos crear otra carpeta dentro del menú Todos los Programas del menú de
inicio, que nos lleve a todas las tareas dentro de una sola entrada. Para eso creamos una carpeta
llamada web-server, y ahí movemos la carpeta Apache HTTP Server 2.2, la carpeta MySQL, y
creamos otra llamada PHP, en la cual meteremos un acceso directo al archivo php.ini.

Consideraciones

Hay programas, como WAMP o AppServ, que realizan toda la instalación que y configuración
automáticamente. Sin embargo, te estarías perdiendo la oportunidad de conocer lo que realmente
sucede detrás de las instalaciones y configuraciones.

8. Instala el intérprete Perl como CGI de Apache

Perl es un lenguaje interpretado que nos permite hacer infinidad de tareas. Además, su facilidad le
permite ubicarlo entre los favoritos para realizar tareas de mantenimiento. En este caso, vamos a
instalar el intérprete Perl como CGI, en nuestro servidor. Esto nos permitirá, por ejemplo, tratar
información de un formulario, hacer las operaciones con esos datos y entregar una respuesta.

Vamos a hacernos con una distribución gratuita para Windows llamada ActivePerl, de nuestros
hermanos de ActiveState. http://www.activestate.com/activeperl/downloads

Vemos la versión 5.12.3 disponible para sistemas de 32 y 64 bits. Descargas la adecuada para tu
sistema. En mi caso, tenemos que es la 32 (x86).

La descargamos y la instalamos. En la instalación, vamos a modificar la ruta por default hacia


nuestro directorio web-server. Además, deseleccionamos las casillas Add Perl to the PATH
environment variable y Create Perl file extension association. Esto es porque no usaremos el
intérprete para ejecutar scripts a través de nuestro sistema, sino a través de Apache. En caso
contrario, las dejamos seleccionadas.
Establecer un PATH, permite añadir la ruta de la instalación del intérprete a las rutas por defecto en
Windows. Esto permite que ejecutemos perl.exe sin tener que especificar la ruta en el comando,
así el prompt esté ubicado en otro directorio. La segunda opción, permite asociar la extensión de
los archivos Perl (.pl) con el intérprete. Así, al hacer doble click en un archivo perl, Windows
reconoce el programa con el cual abrirlo.

Entonces, para que Apache maneje los archivos scripts CGI, debemos, de nuevo, recurrir a su
archivo de configuración httpd.conf.

Buscamos la directiva DocumentRoot, y, abajo, vemos las parámetros para ese directorio entre
los delimitadores <directory> </directory>. Añadimos a la línea Options
FollowSymLinks, el parámetro +ExecCGI, de manera que quede como sigue:

Options FollowSymLinks +ExecCGI


AllowOverride None
Order deny,allow
Deny from all

Ahora, vamos a nuestra carpeta cgi-bin de Apache, y vemos un archivo llamado printenv.pl. Le
cambiamos la extensión por .cgi para que sea interpretado como un script CGI. Ahora abrimos el
archivo con nuestro editor de texto (notepad), y vemos que la primera línea indica la ruta del
intérprete. La cambiamos por la actual, de manera que quede parecida a #!C:/web-
server/perl/bin/perl.exe.

Ahora, vamos a probar si todo funciona correctamente. Para ello, guardamos el archivo
printenv.cgi y httpd.conf, y reiniciamos Apache. Abrimos la dirección 127.0.0.1/cgi-bin/printenv.cgi
en el navegador y deberíamos ver un resultado como en le imagen.

Como su nombre, printenv.cgi nos imprime las variables de entorno de nuestro servidor. Podemos
ver, entre otras, las siguientes:
DOCUMENT_ROOT="C:/web-server/www"
HTTP_HOST="127.0.0.1"

SERVER_SOFTWARE="Apache/2.2.17 (Win32) PHP/5.3.5"

SYSTEMROOT="C:\WINDOWS"

WINDIR="C:\WINDOWS"

Ahora ya estás listo para experimentar con este lenguaje. En la web CPAN (Comprehensive Perl
Archive Network) tienes muchos ejemplos de módulos escritos en Perl, para hacer numerosas
tareas. Puedes darte una vuelta y experimentar con ellos, simepre leyendo para que sirven y
examinando un poco el código.

9. Iniciando el módulo OpenSSL

El módulo OpenSSL nos permite crear conexiones seguras mediante la encripción de los datos que
se transmiten. Es muy común, por ejemplo, cuando te conectas a tu cuenta de correo vía web, o
cuando realizas transacciones en sitios web con tu tarjeta de crédito o Paypal.

Esto impide, o al menos reduce las posibilidades, el robo de información como contraseñas, números
de cuenta, o cualquier otra información sensible.

Partimos del supuesto de que tienes corriendo el servidor Apache con el módulo openSSL, por lo que
sólo modificaremos unas cuantas líneas del archivo de configuración, dos tres comandos y tendremos
listo el módulo.

Editando httpd.conf

Abrimos el archivo httpd.conf y buscamos la sección Dynamic Shared Object. Descomentamos la


directiva de carga del módulo ssl LoadModule ssl_module modules/mod_ssl.so,
quitando la almohadilla (#).

Agregamos al final del archivo las siguientes líneas:

<VirtualHost localhost:443>
SSLEngine On
SSLCertificateFile "C:/web-server/apache/conf/server.crt"
SSLCertificateKeyFile "C:/web-server/apache/conf/server.key"
</VirtualHost>
Con las etiquetas VirtualHost creamos un servidor virtual que esté escuchando en nuestra dirección
localhost en el puerto 443, y con otros parámetros contenidos dentro de ellas.

El puerto 443 es el predeterminado para el protocolo HTTPS, o http seguro. Dentro de las etiquetas
vemos las directivas SSLEngine On y SSLCertificateFile y SSLCertificateKeyFile. La primera nos
indica que este servidor tendrá encendido el motor SSL, las otras dos nos indican la ruta de nuestros
certificados. No os preocupéis, ahora veremos que son y cómo crearlos.

Certificados digitales

Los certificados digitales son documentos que acreditan que un sitio es quien dice que es. Se expiden
por compañías certificadoras, para dar seguridad de que estás en un sitio seguro en el cual se
transmite la información encriptada.

Vamos a crear crear un archivo autofirmado, ya que no para nuestro sitio de desarrollo, no es
conveniente gastar en que una autoridad nos firme uno.

Abrimos una consola, y nos ubicamos en la carpeta bin de Apache. Ahí tecleamos lo siguiente:

openssl req -config ..\conf\openssl.cnf -new -out server.csr

Con este comando, creamos un CSR, o petición de firma de certificado, para nuestro servidor.
openssl llama al ejecutable, mientras req es el comando request, el cual usa como archivo de
configuración openssl.cnf. -new y -out significan que creamos un archivo nuevo cuya salida es
server.csr.
El archivo openssl.cnf es para el módulo seguro, lo que httpd.conf es para el servidor. Es el archivo
de configuración y se encuentra en la carpeta conf. Pero Windows, predeterminadamente oculta esas
extensiones y cambia el ícono de esos archivos por una computadora y un mundo detrás. Puedes
arrastrar el archivo a tu notepad y verás en claro texto plano las líneas de configuración o directivas.

También se crea un archivo que contiene tu clave privada, privkey.pem, mediante la introducc ión de
una frase contraseña en la consola. No te preocupes si al teclear no pasa nada. Los datos se
introducen, pero el cursor no se mueve ni se imprime nada por seguridad. Después, tienes que volver
a introducir la misma frase contraseña.

Después de introducir la clave, verás que te pide una confirmación. Vuelve a introducir la misma. Si
lo hiciste correctamente, ahora verás que te pide los siguientes datos:

1. Código de país (dos letras según especificación ISO 3166-1).


2. Nombre completo de estado.
3. Localidad o ciudad.
4. Nombre de organización o empresa.
5. Nombre de la unidad o sección organizacional.
6. Nombre.
7. Correo-e.
8. Contraseña.
9. Un nombre opcional para la compañía.

En la carpeta bin, podrás comprobar la creación de los archivos server.csr y privkey.pem. Con los
datos introducidos a openssl, creamos una petición de certificación y una clave privada.

Ahora ejecutamos en la consola:

openssl rsa -in privkey.pem -out server.key

Esto crea el archivo server.key con la clave contenida en privkey.pem. Este archivo contiene la clave
privada que leerá el servidor para desencriptar la conversación entre cliente servidor. Hay otro
archivo .rnd, el cual debes eliminar, ya que este contiene la entropía usada para la creación de la
clave privada, y en caso de que alguien tenga acceso a el, lo puede usar para realizar un ataque
criptográfico a tu clave.

Más adelante verás que es una clave privada y una clave pública y la importancia de estas en la
encripción.

Por último, tecleamos el siguiente comando:

openssl x509 -in server.csr -out server.crt -req -signkey


server.key -days 365

Con esto creamos el certificado server.crt autofirmado con la clave contenida en server.key, con una
fecha de validez de 365 días.

Ahora, eliminamos los archivos privkey.pem y server.csr, y movemos server.key y server.crt a la


carpeta conf. Después, reiniciamos el servidor y accedemos al sitio https://localhost/. Deberíamos ver
un mensaje parecido a este:

Instalando los certificados en el navegador

El certificado creado, deberías instalarlo tú y aquellos que quieran acceder a tu sitio sin que les
reviente la advertencia del navegador.

Para instalarlo, procederemos de manera muy similar en los navegadores:

Abrimos la ventana de Opciones del menú Herramientas.


En Firefox, vamos a la pestaña Encripción, del menú Avanzado.
En IE, vamos a la pestaña Contenido.
Presionamos el botón Certificados.
Nos abrirá una ventana en la cual podemos importar el certificado.
Instalamos el certificado server.crt y...
https://localhost/

Este protocolo se usa para el proceso de autenticación, nada más, ya que consume muchos recursos.
A menos que tengas super servidores como los de Google. ¡Felicidades!