Reescritura de URLs

Con frecuencia resulta útil aparentar que un servidor web publica los contenidos que realmente están en otro. Esto se puede hacer para repartir la carga entre varios servidores o por cualquier otra razón administrativa.

De la colección de módulos que soporta Apache, para esta función se suelen utilizar dos alternativas:

 

Por ejemplo, en el centro educativo hay varios servicios web que se ejecutan en su propia máquina virtual. Pero cuando se accede a estas páginas desde Internet, en todos los casos, los nombres de los servicios (elpuig.xeill.net, blog.elpuig.xeill.net, etc...) se resuelven a la IP pública del router del centro educativo.

En dicho router existe una redirección para el puerto 80 TCP (puerto HTTP) y para el puerto 443 TCP (puerto HTTPS) hacia una máquina en la que hay un servidor Apache que aparenta servir todos los VirtualHosts. Pero realmente únicamente cumple la función de proxy transmitiendo las solicitudes de los clientes al servidor adecuado. Al que no se puede acceder directamente desde Internet.

Así, los clientes solo ven la dirección de un servidor frontal (front-end) aunque la aplicación se está ejecutando en otra máquina (back-end).

Por ejemplo, en el front-end el VirtualHost dedicado a OwnCloud es:

# cloud.elpuig.xeill.net
<VirtualHost *:80>
        ServerName cloud.elpuig.xeill.net
        RewriteEngine On
        RewriteRule ^/(.*) http://cloud.elpuig.xeill.net/$1 [L,P]

        <Location />
                Order Deny,Allow
                Allow from all
        </Location>
</VirtualHost>

Cabe destacar, que en esta máquina el nombre DNS cloud.elpuig.xeill.net se resuelve a la dirección IP de la máquina virtual que ejecuta el servicio. Esto se puede hacer configurando el DNS o añadiendo la información al fichero /etc/hosts.

De igual modo, la versión HTTPS del servicio está gestionada por:

# cloud.elpuig.xeill.net  
<VirtualHost *:443>
        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        SSLCertificateFile    /etc/ssl/certs/ssl-cert-owncloud.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-owncloud.key

        ServerName cloud.elpuig.xeill.net

        RewriteEngine On
        RewriteRule ^/(.*) http://cloud.elpuig.xeill.net/$1 [L,P]
        <Location />
                Order Deny,Allow
                Allow from all
        </Location>
</VirtualHost>

 

En esta actividad se utilizará el servidor web con el que se ha estado trabajando para acceder a servicios web que realmente están alojados en otras máquinas. Estas últimas máquinas estarán conectadas a una red interna, en la que también tendrá una nueva interfaz de red el servidor web frontal.

De este modo en el servidor web frontal se declararán los VirtualHosts que atenderán a los usuarios con las aplicaciones que se encuentran en los servidores ocultos.

  • blog -> 192.168.<200+X>.254
  • docuwiki -> 192.168.<200+X>.253
  • mediawiki -> 192.168.<200+X>.252

 

Desarrollo de la actividad:

  1. Añada una segunda interfaz de red en modo red interna a su servidor web. Haga que esta interfaz esté configurada de manera estática con la IP 192.168.<200+X>.1
  2. A partir de la máquina virtual proporcionada por el profesor realice un nuevo clon para obtener blog. Haga que esta máquina únicamente tenga una interfaz de red en modo red interna, conectada a la misma red que el servidor web.
  3. Disponga lo necesario para que blog:
    • Tenga su interfaz configurada con la última IP de host disponible.
    • Tenga por puerta de enlace por defecto al servidor web.
    • Pueda descargar paquetes a través del servidor web.
  4. Instale en el VirtualHost por defecto de blog, un Wordpress que tenga por título "El blog de <login>".
  5. Disponga lo necesario para que, accediendo al primer servidor web se pueda acceder al blog utilizando el VirtualHost blog.
  6. Asegure el wordpress de blog con HTTPS, puede utilizar el VirtualHost por defecto para HTTPS. Modifique la configuración del primer servidor web para que se pueda acceder al blog con HTTP y con HTTPS.
  7. DokuWiki es un sencillo wiki que no precisa de un sistema gestor de bases de datos. Realice un nuevo clon con el nombre dokuwiki. Configúrelo con una única interfaz de red en modo red interna, instale DokuWiki y haga que sea accesible mediante HTTP y HTTPS a través del primer servidor web.
  8. MediaWiki es la aplicación desarrollada por y para las diferentes ediciones de Wikipedia y sus proyectos aledaños. Es un software con muchas funciones, aunque su instalación tampoco resulta complicada. Demuestre la instalación de MediaWiki en un nuevo clon que tenga por nombre mediawiki. Se debe poder acceder acceder al servicio a partir del primer servidor web, tanto utilizando HTTP como HTTPS.

 

Suponga que se desea que los usuarios únicamente utilicen la versión segura de los servicios. De manera que al acceder a cualquiera de los VirtualHost con HTTP sean redirigidos a la versión HTTPS de forma permanente.

En el wiki de Apache hay un artículo que explica cómo poner en marcha la redirección de HTTP a HTTPS. Lea el artículo y demuestre su funcionamiento.