Apache es un servidor Web. De hecho, es el servidor Web más difundido actualmente (
http://news.netcraft.com/archives/web\_server\_survey.html). Si a esto
sumamos que la Web es la aplicación más difundida en Internet, podemos asegurar que
Apache es el servidor más extendido de la historia.
-
Debian Linux:
-
root# apt-get install apache2
-
Fedora Core Linux:
-
root# yum install httpd
-
Gentoo Linux:
-
root# emerge apache
_____________________________________________________________
Taller 6.2: Instale apache. Una vez instalado este paquete deberíamos
poder conectarnos al servidor. Esto puede comprobarse si accedemos
con el navegador a la URL:
http://localhost
y comprobamos que se lee un objeto Web (normalmente el fichero
index.html que es el objeto por defecto cuando accedemos a un
directorio).
También deberíamos tener acceso al servidor desde la línea de
comandos:
root# apache2 -h
apache2 -h
Usage: apache2 [-D name] [-d directory] [-f file]
[-C "directive"] [-c "directive"]
[-k start|restart|graceful|graceful-stop|stop]
[-v] [-V] [-h] [-l] [-L] [-t] [-S] [-X]
Options:
-D name : define a name for use in <IfDefine name> directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
-S : a synonym for -t -D DUMP_VHOSTS
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES
-t : run syntax check for config files
-X : debug mode (only one worker, do not detach)
Pruebe finalmente a usar el servidor Web que ha instalado desde el sistema
operativo huésped (Windows). Para ello deberá averiguar la dirección IP que
utiliza el host virtual (Debian) y especificar la URL usando dicha
dirección.
_____________________________________________________________
La configuración de Apache depende del contenido del directorio:
-
Debian Linux:
-
/etc/apache2/
-
Fedora Core Linux:
-
/etc/httpd/
-
Gentoo Linux:
-
/etc/apache2/
Dicho directorio contiene una serie de ficheros y directorios. El fichero de
configuración principal es apache2.conf o httpd.conf (dependiendo de la distribución).
El resto de ficheros de configuración son cargados desde éste._________________
Taller 6.3: Localice el directorio con los ficheros de configuración de
Apache.
_____________________________________________________________________________________
Entre los directorios encontramos los que indican qué módulos hay disponibles y qué
módulos hay habilitados (veremos más tarde qué son los módulos), así como qué sites
hay disponibles y habilitados (esto está relacionado con los virtual hosts, más tarde
también hablaremos de esto).
Cada vez que Apache es ejecutado (o re-ejecutado) se leen los ficheros de
configuración que están bastante bien documentados. Dichos ficheros se organizan en
secciones que contienen un conjunto de directivas. Cada directiva debe escribirse en una
única línea. Veamos cómo controlar algunas de las posibilidades de Apache modificando
dichas directivas y el contenido de los directorios de configuración:
La directiva DocumentRoot define el directorio que contiene los objetos Web
del servidor. Dicha directiva cuando no se declara, tiene el siguiente valor por
defecto:
-
Debian Linux:
-
/var/www/apache2-default
-
Fedora Core Linux:
-
/var/www/html
-
Gentoo Linux:
-
/var/www/localhost/htdocs
_____________________________________________________________
Taller 6.4: Localice el directorio que almacena los objetos Web.
_____________
Apache además puede servir los objetos que se colocan en el directorio public_html
de los usuarios. Por ejemplo, para acceder al directorio public_html del usuario
“alumno” en la máquina local deberímos utilizar la URL:
http://localhost/~alumno
Para conseguir esto debemos hacer lo siguiente:
- Cargar el módulo “userdir”. Apache es capaz de realizar las más diversas tareas que
se le pueden encargar a un servidor Web. Como hay muchos usuarios que no
utilizan a la vez todas las posibilidades, el servidor se ha diseñado de forma
modular. Por tanto, dependiendo de la tarea que deseamos realizar habrá que
cargar el módulo correspondiente. En este caso necesitamos cargar el módulo
“userdir” (si es que no está ya cargado).
# Comprobamos si el módulo "userdir" está cargado
root# apache2 -M
Loaded Modules:
core_module (static)
log_config_module (static)
:
status_module (shared)
Syntax OK
# Esto también puede hacerse mostrando el contenido del directorio:
root# ls -l /etc/apache2/mods-enabled/
total 0
lrwxrwxrwx 1 root root 40 2007-01-08 18:51 actions.load ->\
/etc/apache2/mods-available/actions.load
lrwxrwxrwx 1 root root 28 2007-01-03 16:03 alias.load -> ../mods-available/alias.load
:
lrwxrwxrwx 1 root root 29 2007-01-03 16:03 status.load -> ../mods-available/status.load
# Aunque aquí sólo aparecerían los módulos de tipo "shared", que no se
# instalan por defecto en el servidor
# Si no lo está, configuramos Apache para que lo carge
root# a2enmod userdir
# Forzamos a Apache a leer todos los módulos
root# /etc/init.d/apache2 force-reload
- Crear el directorio que almacena los objetos Web:
# Creamos el directorio
alumno$ mkdir public_html
# Comprobamos que tenga premisos de lectura y de acceso
alumno$ ls -la public_html/
total 8
drwxr-xr-x 2 alumno alumno 4096 2007-01-13 13:27 .
drwxr-xr-x 14 alumno alumno 4096 2007-01-13 13:27 ..
# Copiamos un fichero con un objeto Web
alumno$ cp /var/www/apache2-default/index.html public_html
# Comprobamos que tenemos acceso a dicho fichero
alumno$ firefox http://localhost/~alumno &
_____________________________________________________________
Taller 6.5: Habilite Apache para que los usuarios puedan publicar
objetos Web en sus directorios public_html. Compruebe que el servicio
funciona correctamente.
_________________________________________________________________
Taller 6.6: Desinstale e instale (de nuevo) el módulo userdir.
Compruebe ambas situaciones comprobando si el módulo está
funcionando.
_______________________________________________________________________________
Apache por defecto escucha en el puerto 80 a través de todos los interfaces de red de los
que dispone el host. Este comportamiento puede modificarse para:
-
Escuchar en un puerto distinto del 80:
- Esto se hace a través de la directiva Listen.
Ejemplo:
# Usando un editor de ficheros ASCII, buscar en el fichero de
# configuración de Apache la directiva "Listen 80" y cambiarla por
# "Listen 8080". Si dicha directiva aparece en el fichero
# "/etc/apache2/ports.conf", esto puede hacerse también con los
# siguientes comandos:
root# sed "s/80/8080/g;" /etc/apache2/ports.conf > /etc/apache2/ports.conf.new
root# mv /etc/apache2/ports.conf.new /etc/apache2/ports.conf
# Ojo que es posible que además haya que modificar algún fichero extra!
# Léase detenidamente los comentarios en /etc/apache2/ports.conf
# acerca de esta posibilidad.
# Re-iniciamos Apache.
root# /etc/init.d/apache2 restart
# Comprobamos el cambio.
alumno$ firefox http://localhost:8080 &
# Deshacemos el cambio.
root# sed "s/8080/80/g;" /etc/apache2/ports.conf > /etc/apache2/ports.conf.new
root# mv /etc/apache2/ports.conf.new /etc/apache2/ports.conf
# Reiniciamos Apache
root# /etc/init.d/apache2 restart
_____________________________________________________________
Taller 6.7: Realice las modificaciones oportunas para que
Apache escuche en el puerto 8080 y compruebe que realmente es
así. Finalmente deshaga dichas modificaciones y compruebe que
Apache vuelve e escuchar en el puerto 80.
____________________________________
-
Escuchar en más de un puerto:
- Ejemplo:
root# cat >> /etc/apache2/ports.conf << EOF
Listen 8080
EOF
# Reiniciamos Apache
root# /etc/init.d/apache2 restart
# Comprobación
alumno$ firefox http://localhost:80 &
alumno$ firefox http://localhost:8080
# Desahacemos el cambio.
root# sed "s/Listen 8080//g;" /etc/apache2/ports.conf > /etc/apache2/ports.conf.new
root# mv /etc/apache2/ports.conf.new /etc/apache2/ports.conf
# Reiniciamos Apache
root# /etc/init.d/apache2 restart
_____________________________________________________________
Taller 6.8: Realice las modificaciones oportunas para que Apache
escuche simultaneamente en los puertos 80 y 8080, y compruebe
que realmente es así. Finalmente deshaga dichas modificaciones.
_______
-
Escuchar por diferentes direcciones IP y mostrando diferentes objetos Web:
- ... en
función de la dirección IP utilizada por el cliente. Aunque no es muy frecuente, sí
que es posible instalar en un host más de un adaptador de red, cada uno
configurado con una dirección IP distinta. En este contexto se puede configurar
Apache para que sirva diferentes objetos Web en función del adaptador por el que
recibe las peticiones. A esta cualidad de Apache se le llama IP-based
Virtual Hosting. Para ver un ejemplo nos vamos a aprovechar de que el
host con el que estamos trabajando tiene asignadas dos direcciones IP
diferentes, una para localhost y otra para el nombre de la máquina
lab-redes.
# Comprobamos la primera dirección IP.
alumno$ ping -c 1 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.739 ms
--- localhost ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.739/0.739/0.739/0.000 ms
# Comprobamos la segunda (nótese que ahora es .1.1)
alumno$ ping -c 1 lab-redes
PING lab-redes.localdomain (127.0.1.1) 56(84) bytes of data.
64 bytes from lab-redes.localdomain (127.0.1.1): icmp_seq=1 ttl=64 time=0.048 ms
--- lab-redes.localdomain ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.048/0.048/0.048/0.000 ms
# Añadimos el host virtual.
root# cat >> /etc/apache2/apache2.conf << EOF
<VirtualHost lab-redes>
DocumentRoot /var/www/lab-redes/
</VirtualHost>
EOF
# Creamos el nuevo "site".
root# mkdir /var/www/lab-redes
# Metemos dentro un objeto.
root# cp /var/www/apache2-default/index.html /var/www/lab-redes/
# Lo cambiamos un poco:
root# sed "s/It works/Funciona/g;" /var/www/lab-redes/index.html >\
/var/www/lab-redes/index.html.new
root# mv /var/www/lab-redes/index.html.new /var/www/lab-redes/index.html
# Reiniciamos Apache
root# /etc/init.d/apache2 restart
# ¿Funciona?
alumno$ firefox localhost &
alumno$ firefox lab-redes
_____________________________________________________________
Taller 6.9: Realice las anteriores configuraciones y compruebe que
funcionan.
___________________________________________________________________________
-
Escuchar en una única dirección IP, pero mostrando diferentes objetos:
- ... en
función del alias del servidor que utiliza el cliente. El DNS tiene la posibilidad de
asignar más de un nombre a una dirección IP. A uno de estos nombres se le conoce
como nombre canónico y al resto como aliases. Aprovechándonos de esta
posibilidad, el servidor Apache puede servir un conjunto de objetos Web diferente
en función el alias que está usando el cliente para reclamar los objetos al
servidor.
De esta forma parecerá que estamos accediendo a un servidor ejecutado en
otra máquina diferente, cuando en realidad estamos utilizando el mismo.
A esta posibilidad se le conoce como Name-based Virtual Hosting. Un
ejemplo:
# Añadimos un alias del host en el DNS.
root# sed \
"s/127.0.1.1\tlab-redes.localdomain\tlab-redes/127.0.1.1\tlab-redes.localdomain\tlab-redes\talias_lab-redes/g"\
/etc/hosts > /etc/hosts.new
root# mv /etc/hosts.new /etc/hosts
alumno$ ping -c 1 alias_lab-redes
PING lab-redes.localdomain (127.0.1.1) 56(84) bytes of data.
64 bytes from lab-redes.localdomain (127.0.1.1): icmp_seq=1 ttl=64 time=0.060 ms
--- lab-redes.localdomain ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.060/0.060/0.060/0.000 ms
# Añadimos el host virtual.
root# cat >> /etc/apache2/apache2.conf << EOF
NameVirtualHost alias_lab-redes
<VirtualHost alias_lab-redes>
DocumentRoot /var/www/alias_lab-redes/
</VirtualHost>
EOF
# Creamos el nuevo "site".
root# cp -rav /var/www/lab-redes/ /var/www/alias_lab-redes
# Lo cambiamos un poco:
root# sed "s/Funciona/Funciona de nuevo/g" /var/www/alias_lab-redes/index.html\
> /var/www/alias_lab-redes/index.html.new
root# mv /var/www/alias_lab-redes/index.html.new /var/www/alias_lab-redes/index.html
# Reiniciamos Apache
root# /etc/init.d/apache2 restart
# ¿Funciona?
alumno$ firefox alias_lab-redes &
_____________________________________________________________
Taller 6.10: Realice las anteriores configuraciones y compruebe
que funcionan.
____________________________________________