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.
root# apt-get install apache2
|
root# yum install httpd
|
root# emerge apache
|
http://hocalhost
|
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] 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 |
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:
/etc/apache2/
|
/etc/httpd/
|
/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.
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:
/var/www/apache2-default
|
/var/www/html
|
/var/www/localhost/htdocs
|
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 “usuario” en la máquina local deberímos utilizar la URL:
http://localhost/~usuario
|
Para conseguir esto debemos hacer lo siguiente:
# 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 |
# Creamos el directorio
usuario$ mkdir public_html # Comprobamos que tenga premisos de lectura y de acceso usuario$ ls -la public_html/ total 8 drwxr-xr-x 2 usuario usuario 4096 2007-01-13 13:27 . drwxr-xr-x 14 usuario usuario 4096 2007-01-13 13:27 .. # Copiamos un fichero con un objeto Web usuario$ cp /var/www/apache2-default/index.html public_html # Comprobamos que tenemos acceso a dicho fichero usuario$ firefox http://localhost/~usuario & |
Por ser la primera vez que se muestra cómo se instala un módulo en Apache, mostraremos además cómo se desinstala:
root# a2dismod userdir
root# /etc/init.d/apache2 force-reload |
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:
# 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 # Re-iniciamos Apache. root# /etc/init.d/apache2 restart # Comprobamos el cambio. usuario$ 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 |
root# cat >> /etc/apache2/ports.conf << EOF
Listen 8080 EOF # Reiniciamos Apache root# /etc/init.d/apache2 restart # Comprobación usuario$ firefox http://localhost:80 & usuario$ 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 |
# Comprobamos la primera dirección IP.
usuario$ 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) usuario$ ping -c 1 debian PING debian.localdomain (127.0.1.1) 56(84) bytes of data. 64 bytes from debian.localdomain (127.0.1.1): icmp_seq=1 ttl=64 time=0.048 ms --- debian.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 debian> DocumentRoot /var/www/debian/ </VirtualHost> EOF # Creamos el nuevo "site". root# mkdir /var/www/debian # Metemos dentro un objeto. root# cp /var/www/apache2-default/index.html /var/www/debian/ # Lo cambiamos un poco: root# sed ’s/It works!/Funciona!/g;’ /var/www/debian/index.html >\ /var/www/debian/index.html.new root# mv /var/www/debian/index.html.new /var/www/debian/index.html # Reiniciamos Apache root# /etc/init.d/apache2 restart # ¿Funciona? usuario$ firefox localhost & usuario$ firefox debian |
# Añadimos un alias del host en el DNS.
root# sed \ ’s/127.0.1.1\tdebian.localdomain\tdebian/127.0.1.1\tdebian.localdomain\tdebian\talias_debian/g’\ /etc/hosts > /etc/hosts.new root# mv /etc/hosts.new /etc/hosts usuario$ ping -c 1 alias_debian PING debian.localdomain (127.0.1.1) 56(84) bytes of data. 64 bytes from debian.localdomain (127.0.1.1): icmp_seq=1 ttl=64 time=0.060 ms --- debian.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_debian <VirtualHost alias_debian> DocumentRoot /var/www/alias_debian/ </VirtualHost> EOF # Creamos el nuevo "site". root# cp -rav /var/www/debian/ /var/www/alias_debian # Lo cambiamos un poco: root# sed ’s/Funciona!/Funciona de nuevo!/g’ /var/www/alias_debian/index.html\ > /var/www/alias_debian/index.html.new root# mv /var/www/alias_debian/index.html.new /var/www/alias_debian/index.html # Reiniciamos Apache root# /etc/init.d/apache2 restart # ¿Funciona? usuario$ firefox alias_debian & |