El servidor web apache es una de las aplicaciones estrella del mundo Linux. Es el servidor web más implantado entre los distintos servidores que ofertan servicios web en Internet.

Entre las características más significativas destacamos:

Es modular
Capacidad para crear servidores virtuales
Capacidad para crear servidores seguros https
Capacidad para crear sitios privados
En este curso haremos uso de éstas y otras características de apache.

Organización del sitio web

La organización que realizaremos de nuestro servidor Apache, será la clásica en los sistemas Unix: la página web de la intranet se almacenará en la carpeta raíz del servidor web, las páginas de los usuarios se almacenarán en la carpeta home de cada usuario y para albergar las páginas web de los distintos departamentos, lo más práctico es crear nuevos usuarios con el nombre del departamento.

Instalación de Apache2

Disponer de un servidor web nos permitirá alojar nuestras propias páginas y aplicaciones web de forma que den servicio tanto desde dentro de la intranet como desde Internet. Serán la base que facilitará el acceso a la información.

apt-get install apache2

Con lo cual se instalarán los archivos necesarios para que funcione nuestro servidor web. Se instalará apache v2.


Configuración de Apache

Los archivos de configuración de apache2 se encuentran en la carpeta /etc/apache2. El archivo principal de configuración es /etc/apache2/apache2.conf. Antes de realizar cualquier cambio en este archivo, es conveniente realizar una copia de seguridad del mismo ya que si apache encuentra algún error en el archivo de configuración, no arrancará.
Se pueden configurar infinidad de parámetros. Aquí, para poner en marcha el servidor, editaremos el archivo apache2.conf y añadiremos únicamente el siguiente parámetro:

ServerName www.ieslapaloma.com

Para que los PCs de la red local sepan que www.ieslapaloma.com es nuestro servidor web, debemos crear una entrada 'www' hacia su dirección IP en el servidor DNS. Si no, no quedará más remedio que acceder utilizando la dirección IP del servidor.


Arranque y parada del servidor web apache
El servidor web apache2, al igual que todos los servicios en Debian, dispone de un script de arranque y parada en la carpeta /etc/init.d.
// Arrancar o reiniciar el servidor apache2
/etc/init.d/apache2 restart

// Parar el servidor apache
/etc/init.d/apache2 stop

Consultar la versión instalada
/usr/sbin/apache2 -v

Espacio web para la Intranet

Por defecto, la carpeta raiz del servidor web es la carpeta /var/www. Todos los documentos que se encuentren dentro de la carpeta raíz del servidor web, serán accesibles vía web. Dentro del raiz de documentos crearemos la página web de nuestra intranet.

Carpeta principal del servidor web (DocumentRoot)
- Carpeta raíz del servidor web: /var/www
- Acceso a la web principal: http://ip-del-servidor ó http://nombre-del-servidor
Para acceder vía web a la página almacenada en la carpeta raíz del servidor, desde un navegador debemos acceder directamente con la dirección IP a: http://ip-del-servidor o bien utilizando el nombre del mismo si tenemos el DNS funcionando: http://nombre-del-servidor. Solamente si no tenemos el DNS funcionando, podemos añadir el nombre y la IP en /etc/hosts para resolver localmente.

Desde el navegador debe aparecer un mensaje como el siguiente:

It works!

Lo que siempre funcionará es ir con la dirección IP. Ejemplo, si la dirección IP de nuestro servidor fuera 192.168.1.239, podemos ir con el navegador a la dirección http://192.168.1.239 y obtendremos el mismo resultado. Podemos personalizar nuestra página modificando el archivo index.html que hay dentro de la carpeta /var/www.

Archivos i directorios de configuración
Los archivos de configuración más utilitzados son:
/etc/apache2/apache2.conf
/etc/apache2/ports.conf

La carpeta que contiene todas la webs disponibles esta en:
/etc/apache2/sites-available

Los enlaces simbólicos que habilitan las páginas web estan en el directorio:
/etc/apache2/sites-enabled

Cofiguración de los VirtualHost
Toda la configuración de carpetas, nombres y puertos que puede el servidor mostrar se establece en el directorio /etc/apache2/sites-available/

En el directorio /etc/apache2/sites-enabled deberan estar los enlaces simbólicos a los sitos web que estan habilitados, o sea los enlaces simbolicos a la carpeta /etc/apache2/sites-available/

Por defecto el fichero de configuración es /etc/apache2/sites-available/default i su contenido debe ser algo parecido a :

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>

En la carpeta /etc/apache2/sites-enabled creamos el enlace:
ln -s /etc/apache2/sites-available/default /etc/apache2/sites-enabled/default
Para que el apache2 cargue esta configuración se debe indicar el el fichero de configuración /etc/apache2/apache2.conf. Se debe añadir/descomentar al final del fichero apache2.conf la línia:

Include /etc/apache2/sites-enabled/

Opcionalmente podemos copiar la carpeta /var/www/apache-default a la carpeta /var/www/

Dominios Virtuales
Para que funcionen varios dominios virtuales en un host que tiene asociado los dominios a una única IP se debe utilizar la cláusula NameVirtualHost y VirtualHost.

En /etc/apache2/sites-available vamos a tener un archivo por cada uno de nuestros sitios, que luego serán enlazados dinámicamente desde /etc/apache2/sites-enabled

Cada uno de estos archivos (relacionados con cada sitio) van a vincular el contenido real del sitio web.

Vamos a los bifes, tengo dos dominios:
- www.uno.com
- www.dos.com

El dominio uno.com debe aceptar las consultas al puerto 80 pero redirigirlas al puerto 8080. El segundo, funciona solo en el puerto 8080.

Creamos estos dos archivos y los enlazamos como dijimos:
/etc/apache2/sites-available# touch www.uno.com /etc/apache2/sites-available# touch www.dos.com /etc/apache2/sites-available#cd ../sites-enabled /etc/apache2/sites-enabled#ln -s ../sites-available/www.uno.com uno /etc/apache2/sites-enabled#ln -s ../sites-available/www.dos.com dos
Vamos a encontrar bajo este directorio también un archivo que es el que trae apache por defecto, este es el famoso It works!.

Antes de ver cómo configurar cada uno de estos dominios vale la pena aclarar que la cláusula NameVirtualHost debe ir en uno solo de los archivos que se encuentren en /sites-available/ , esto le indica a apache que se están utilizando varios hostvirtuales. En nuestro caso lo vamos a incluir en www.uno.com pero podría ir en cualquiera.

Ahora sí, veamos lo que ponemos en www.uno.com:
NameVirtualHost *:80 NameVirtualHost *:8080 <VirtualHost *:80>
ServerName www.uno.com
ServerAlias uno.com
DocumentRoot /var/www/sitiouno
<Directory /var/www/sitiouno>
AllowOverride All
Options MultiViews Indexes SymLinksIfOwnerMatch
Allow from All
</Directory>
# Redirigir a https
RewriteEngine On RewriteRule ^(.*)$ https://www.dos.com$1 [R,L]
</VirtualHost>

Ahora veamos el contenido del sitio www.dos.com
<VirtualHost *:8080> ServerName www.dos.com ServerAlias dos.com DocumentRoot/var/www/sitiodos<Directory /var/www/sitiodos>
AllowOverride All
Options MultiViews Indexes SymLinksIfOwnerMatch
Allow from All
</Directory> </VirtualHost>
Solo queda reiniciar el apache2 y listo

Espacio web para cada usuario
Cada usuario del sistema dispondrá de un espacio web que se almacena dentro de su carpeta home en una carpeta llamada 'public_html'. Si dicha carpeta no existe, el propio usuario puede crearla y copiar dentro de ella su página web. Los permisos recomendados para carpetas son 655 para que el 'grupo' y el 'resto' de usuarios tengan acceso de lectura y así se puedan visualizar las páginas.

Para acceder vía web a la página de un usuario, desde un navegador debemos acceder directamente con la dirección IP a: http://ip-del-servidor/~login-usuario/

El caracter '~'comúnmente conocido como gusanillo y que se obtiene con Alt Gr + 4 sirve para indicar a apache que debe servir la página desde el home del usuario (en Linux el 'gusanillo' equivale a la carpeta home). Ejemplo, si hemos creado un usuario javier y éste ha creado la carpeta /home/javier/public_html y ha copiado en ella su página web, desde cualquier PC de la red podremos acceder a dicha carpeta yendo a la dirección http://ip-del-servidor/~javier/. Para que la página aparezca automáticamente, es necesario crear un archivo llamado index.html.

Carpetas web de los usuarios
- Carpeta web de javier: /home/javier/public_html
- Acceso a la web de javier: http://ip-del-servidor/~javier/
Para configurar el apache para habilitar el espacio web para usuarios se puede hacer de dos maneras. La primera creando los enlaces simbólicos:

cd /etc/apache2/mods-enabled
ln -s ../mods-available/userdir.conf userdir.conf
ln -s ../mods-available/userdir.load userdir.load

Segunda simplemente ejecutando
a2enmod userdir

Sólo nos quedará reiniciar el apache
/etc/init.d/apache2 restart
Espacio web para los departamentos

Para proporcionar espacio web a los departamentos, lo más sencillo es crear un usuario para cada departamento. Podemos crear los usuarios: compras, produccion (sin acentos), etc... Al igual que cada usuario del sistema, dispondrán de un espacio web dentro de su carpeta home en una carpeta llamada 'public_html'. Si dicha carpeta no existe, habrá que crearla y copiar dentro de ella la página web del departamento.

Para acceder vía web a la página del departamento, desde un navegador debemos acceder directamente con la dirección IP a: http://ip-del-servidor/~departamento. Ejemplo, si hemos creado un usuario compras y hemos creado la carpeta /home/compras/public_html y copiado en ella la web del departamento de compras, desde cualquier PC de la red podremos acceder a dicha web yendo a la dirección http://ip-del-servidor/~compras. Para que la página aparezca automáticamente, es necesario crear un archivo llamado index.html.

Carpetas web de los departamentos

- Carpeta web del dpto. de compras: /home/compras/public_html
- Acceso a la web de dpto. de compras: http://ip-del-servidor/~compras/
De la misma manera, se pueden crear usuarios para proporcionar espacio web a otros órganos, p.ej: equipodirectivo, conserjeria, etc... para que dispongan de su propio espacio web.