Apache y Velneo 6.X WebServer

En este artículo y otros posteriores, trataremos de explicar diferentes posibilidades de montajes del servidor Velneo vServer junto con el servidor web de Apache.

Este tipo de montajes se suelen implementar en instalaciones con servidores web para canalizar las peticiones de entrada, sirviendo como un elemento adicional de defensa y por lo tanto protegiendo los servidores web, posibilitando la introducción de conexiones seguras SSL, enmascaramiento de las direcciones internas o permitiendo tener múltiples servidores web de Velneo en una red con una única IP externa.

En este primer artículo explicaremos un montaje básico, centrando el artículo en los aspectos concretos de conexión entre Apache y Velneo vServer 6.x. Al final de este artículo os dejo unos cuantos enlaces para aquellos que queráis ampliar información. La versión utilizada para el desarrollo de este montaje es Velneo 6.4.1 y Apache 2.2



Conceptos previos


Antes de pasar a explicar el montaje, revisemos unos cuantos conceptos que vamos a usar posteriormente y que son necesarios para entender este artículo:

- Dominio:
Un dominio es un nombre que agrupa a un conjunto de equipos o dispositivos. Técnicamente, es un recurso nemotécnico que se asocia a nodos de la red Internet con el objeto de facilitar su identificación, constituido por expresiones alfanuméricas concatenadas en varios niveles organizados de forma jerárquica. Se usan porque permiten proporcionar nombres de equipo más fácilmente recordables que las direcciones IP numéricas. Los nombres de dominio deberán ser definidos en nuestro servidor de nombres (DNS).

Ejemplos:


.velnealia.com
.velneo.es
.apache.org
.midominio.com (es el que usaremos para en este artículo)


- Dirección IP:
Una dirección IP es un número que identifica de manera lógica y jerárquica a una interfaz de un dispositivo dentro de una red que utilice el protocolo IP (Internet Protocol). Es como la matrícula para los vehículos, que permiten identificarlos de manera única.

Ejemplos:


209.85.129.147 (www.google.es)
192.168.1.11
200.200.200.101


- Hostname (Nombre de Host):
Un hostname representa un anfitrión lógico y debe poder resolver por lo menos a una dirección IP (o a menudo a una lista de anfitriones con distintas direcciones IP). Para nosotros normalmente resolverá a una única dirección IP, la de nuestro servidor Velneo vServer, a no ser que tengamos varios servidores web en nuestra red y queramos hacer un balanceo de carga. Los Hostnames se definen en nuestros servidores de nombres (DNS).

Ejemplos:


www.midominio.com
www.velnealia.com
www.velneo.com (Velneo web)
vconnect.velneo.com (Velneo Directo)
forum.velneo.com (Velneo foro)
www.apache.org


- Proxy:
El término proxy hace referencia a un programa o dispositivo que realiza una acción en representación de otro. Su finalidad más habitual permite el acceso a Internet a todos los equipos de una organización cuando sólo se puede disponer de un único equipo conectado, esto es, una única dirección IP. El término "proxy" tiene un significado muy general, aunque siempre es sinónimo de intermediario.

- Reverse Proxy o Proxy Inverso:
Un reverse proxy es un servidor proxy (intermediario) instalado en el domicilio de uno o más servidores web. Todo el tráfico entrante de Internet y con el destino de uno de esos servidores web pasa a través del servidor proxy. Hay varias razones para instalar un "reverse proxy":

  • Seguridad: el servidor proxy es una capa adicional de defensa y por lo tanto protege los servidores web.

  • Cifrado / Aceleración SSL: cuando se crea un sitio web seguro, habitualmente el cifrado SSL no lo hace el mismo servidor web, sino que es realizado por el "reverse proxy", el cual está equipado con un hardware de aceleración SSL (Security Sockets Layer).

  • Distribución de Carga: el "reverse proxy" puede distribuir la carga entre varios servidores web. En ese caso, el "reverse proxy" puede necesitar reescribir las URL de cada página web (traducción de la URL externa a la URL interna correspondiente, según en qué servidor se encuentre la información solicitada).

  • Caché de contenido estático: Un "reverse proxy" puede descargar los servidores web almacenando contenido estático como imágenes u otro contenido gráfico.


Fuentes: Wikipedia/Apache.org



Diagrama de Montaje Básico




Descripción del Montaje Básico


Como podemos ver en el diagrama, este montaje básico va a consistir en posicionar un servidor Apache entre el router que nos conecta a Internet y nuestro Velneo vServer 6.X. Este servidor va a tener dos interfaces de red con dos IPs diferentes, y estará conectado a dos subredes distintas (del Apache para dentro y del Apache hacia fuera). El switch en el esquema está indicado, porque a él podremos conectar varios servidores Velneo vServer, ampliando las posibilidades.

Con este montaje vamos a poder servir varias páginas web desde nuestra red interna, ya sea desde un único servidor Velneo vServer o de varios diferentes y para uno o varios dominios distintos (múltiples configuraciones posibles). Y todo desde una única dirección de IP pública de Internet (la IP externa de nuestro router). Para ello utilizaremos las directivas de VirtualHost de Apache, que junto al Reverse Proxy nos permitirá redireccionar Hostnames a aplicaciones instaladas en nuestro Velneo vServer.

Además va a permitirnos enmascarar la url de nuestro vServer, ocultando los datos de la pasarela CGI y el alias de nuestras aplicaciones.

Resultado del proceso de modificación de URLs:


URL Anterior
http://www.midominio.com/cgi-vel/vweb/index.pro (Hostname)
http://200.200.200.101/cgi-vel/vweb/index.pro (IP)

URL Nueva
http://www.midominio.com/site/index.pro



Nomenclatura a utilizar


Una vez explicado el montaje, veremos varios ejemplos en los que utilizamos unos valores que he creído conveniente indicar a continuación.

Valores y datos a utilizar en nuestros ejemplos:


Dominios a utilizar:
midominio.com
lawebdeuncliente.com
mitienda.com

IPs ejemplos:
192.168.1.11 IP interfaz interna de Apache
192.168.1.21 IP interfaz vServer A
192.168.1.22 IP interfaz vServer B
200.200.200.101 IP interfaz externa Router (IP pública)

Hostmames:
www.midominio.com
tienda.midominio.com
www.lawebdeuncliente.com
www.mitienda.com

Alias de aplicaciones Velneo:
alias
vweb

Acciones de aplicaciones de Velneo:
index.pro (proceso)
index.pag (página)
articulos.bus (búsqueda)


VirtualHost


El término Hosting Virtual se refiere a hacer funcionar más de un sitio web en una sola máquina. El hecho de que estén funcionando en la misma máquina física pasa completamente desapercibido para el usuario que visita esos sitios web.

Los sitios web virtuales pueden estar "basados en direcciones IP", lo que significa que cada sitio web tiene una dirección IP diferente, o "basados en nombres diferentes", lo que significa que con una sola dirección IP están funcionando sitios web con diferentes nombres (de dominio).

Para usar hosting virtual basado en nombres en Apache, debemos especificar en el servidor qué dirección IP (y posiblemente qué puerto) se va a usar para atender las peticiones a los diferentes hosts. Esto se hace con la directiva NameVirtualHost. Normalmente, cualquiera o todas las direcciones IP del servidor pueden usarse, también se puede usar * como argumento para la directiva NameVirtualHost. Si vamos a usar más de un puerto (por ejemplo si usamos SSL) deberemos añadir un puerto a cada argumento, por ejemplo *:80

El siguiente paso es crear un bloque <VirtualHost> para cada host diferente que queramos alojar en el servidor. Dentro de cada bloque <VirtualHost>, se necesita como mínimo una directiva ServerName para designar qué host se sirve y una directiva DocumentRoot para indicar dónde están los contenidos a servir dentro del sistema de ficheros, aunque en nuestro caso, la información estará contenida en nuestro Velneo vServer.

Fuente: Apache.org

Ejemplo de VirtualHost tomado de Apache.org


<VirtualHost 10.1.2.3>
   ServerAdmin webmaster@host.foo.com
   DocumentRoot /www/docs/host.foo.com
   ServerName host.foo.com
   ErrorLog logs/host.foo.com-error_log
   TransferLog logs/host.foo.com-access_log
</VirtualHost>



Reverse Proxy o Proxy Inverso


Una vez hemos definido nuestro VirtualHost utilizaremos el Reverse Proxy de Apache, para canalizar las peticiones a nuestro Velneo vServer ajustando la URL en las cabeceras de respuesta de HTTP.

Ejemplo de Reverse Proxy y resultado obtenido:


ProxyPass /site/ http://192.168.1.21/cgi-vel/alias/
ProxyPassReverse /site/ http://192.168.1.21/cgi-vel/alias/

URL Anterior (Internet)
http://200.200.200.101/cgi-vel/alias/

URL Nueva (Internet)
http://www.midominio.com/site/index.pro

URL Interna (Red local)
http://192.168.1.21/cgi-vel/alias/


Como resultado de este ejemplo, el servidor Apache va a conducir todas las peticiones realizadas a "www.midominio.com/site/" a la aplicación que responde en la dirección "http://192.168.1.21/cgi-vel/alias/", siendo "192.168.1.21" la IP de nuestro servidor Velneo vServer, "alias" el alias de nuestra aplicación instalada en dicho servidor (valga la redundancia) e "index.pro" la acción a realizar.



Nuestro primer montaje


Vamos a ver a continuación el bloque <VirtualHost> completo para nuestro ejemplo:

<VirtualHost 192.168.1.11>
   ServerName www.midominio.com
   ServerAlias midominio.com
   DocumentRoot /sites/midominio.com/public_html

   Redirect permanent /index.html http://www.midominio.com/site/index.pro
   Redirect permanent /index.htm http://www.midominio.com/site/index.pro

   ProxyPass /site/ http://192.168.1.21:82/cgi-vel/alias/
   ProxyPassReverse /site/ http://192.168.1.21:82/cgi-vel/alias/

</VirtualHost>


Veamos nuestro ejemplo por partes:

- Inicio y fin de nuestro bloque VirtualHost. Dependiendo de la configuración de nuestro Apache y la configuración de red, es posible que necesitemos indicar la IP externa (pública):
<VirtualHost 192.168.1.11>
</VirtualHost>

- Nombre de Hostname virtual y alias (nombres alternativos), y directiva DocumentRoot (obligatoria), aunque en nuestro caso la información será servida desde nuestro Velneo vServer:
ServerName www.midominio.com
ServerAlias midominio.com
DocumentRoot /sites/midominio.com/public_html

- Redirección de peticiones por defecto (index.htm e index.html) a la acción por defecto de la aplicación (index.pro como en la plantilla vWeb):
Redirect permanent /index.html http://www.midominio.com/site/index.pro
Redirect permanent /index.htm http://www.midominio.com/site/index.pro

- Proxy inverso, pasar las peticiones al servidor de Velneo, en este caso utilizamos la palabra "site" que es la que tomará el reverse proxy para canalizar peticiones (y que como habéis visto en las líneas anteriores, hemos indicado para las peticiones por defecto):
ProxyPass /site/ http://192.168.1.21:82/cgi-vel/alias/
ProxyPassReverse /site/ http://192.168.1.21:82/cgi-vel/alias/

Debemos tener en cuenta la palabra que utilizamos para canalizar peticiones ("site" en nuestro ejemplo), sobre todo porque todas las URLs absolutas serán del tipo "http://www.midominio.com/site/" + la acción correspondiente, que podría ser un proceso, búsqueda o página HTML en Velneo 6.X (en nuestro ejemplo, el proceso index especificado como "index.pro").



Montaje con cambio de puerto HTTP en Velneo vServer


Veamos la configuración del mismo ejemplo cuando nuestro vServer sirve web por un puerto diferente al 80 (HTTP por defecto). En nuestro ejemplo tomamos el puerto 82.

<VirtualHost 192.168.1.11>
ServerName www.midominio.com
ServerAlias midominio.com

Redirect permanent /index.html http://www.midominio.com/site/index.pro
Redirect permanent /index.htm http://www.midominio.com/site/index.pro

ProxyPass /site/ http://192.168.1.21:82/cgi-vel/alias/
ProxyPassReverse /site/ http://192.168.1.21:82/cgi-vel/alias/

</VirtualHost>


En próximos artículos veremos varias configuraciones distintas del Reverse Proxy, montajes con varios servidores Velneo vServer y otras herramientas que nos aporta Apache, como el Mod_rewrite para la reescritura de URLs.



vSaludos
Fran Abad

Más info:


Sobre Velneo vServer 6.X
Manual de interación de elementos web
Libro Oficial de Velneo 6.X
Manual de optimización Cliente-Servidor

Sobre Apache 2.2
Directiva ProxyPassReverse (versión 2.2)
Directiva VirtualHost (versión 2.2)
Hosting Virtual en Apache (ES)
Hosting Virtual basado en nombres (ES)
Guía Rápida de Referencias de Directivas (versión 2.2)
Documentación del Servidor de HTTP Apache (versión 2.2)
Documentación Apache HTTP Server
Curso