Mirror con mod proxy y mod cache de apache

De Ardemans Wiki
Saltar a: navegación, buscar

Introduccion

De lo que se trata es de tener en un único servidor los paquetes, binarios, ficherso, etc... a instalar en el resto de servidores de una plataforma, sin dejar que todos los servidores tengan acceso a internet directamente. La idea es tener un proxy pero gestionando las URL's a las que se tiene acceso.

Un ejemplo sería tener acceso a los paquetes de instalación de Nodejs.org, sin que las máquinas que lo instalan tengan navegación a internet. Las máquinas para recuperar el paquete navegarán a través de la web de nuestro apache con proxy inverso:

http://<ip_nuestro_apache>/nodejs_dist/

Hay una configuración de proxy inverso contra la web de http://nodejs.org/dist/, y cada petición que se realice a nuestro servidor irá a buscarlo al servidor de nodejs. Además, podemos añadir el uso del módulo de cache, con lo cual si un paquete es requerido muchas veces no estaremos accediendo a internet cada dos por tres.

Lo que se suele hacer en estos casos es configurar un proxy al que tienen acceso estas máquinas y personalizar a que tienen acceso por máquina, e incluso se pueden cachear URL's, y después todas las máquinas son configuradas con el uso de ese proxy. Con la opción de poner el apache con proxy inverso tambien se puede controlar quien tiene acceso a que recursos, por IP, o incluso por auth, pero no tenemos que hacer ninguna configuración de proxy en los servidores donde se hace la instalación.

Todavía no lo he probado bien con otro tipo de repositorios, como repos de yum, de npm, apt, etc...


Configuracion del apache

La configuracion de apache es de lo más sencilla, eso si, hace falta tener instalados los módulos de mod_proxy y mod_cache (para el cacheo... claro)

Lo podemos hace a base de vhost diferentes para cada repositorio, lo cual es muy sencillo, pero tambien se puede hacer a nivel de directorios.

Este es el ejemplo más básico que he probado con un directorio virtual:

ProxyRemote * http://proxyaplic02.eci.geci:8080/

ProxyPass /nodejs_dist/ http://nodejs.org/dist/
ProxyPassReverse /nodejs_dist/ http://nodejs.org/dist/

CacheDefaultExpire 3600
CacheRoot          "/var/cache/mod_proxy"
CacheMaxFileSize   10000000

CacheEnable        disk   /nodejs_dist/

Tal y como se ven el este ejemplo, se puede poner tanto a nivel de servidor, en el httpd.conf directamente, o bien dentro de un VirtualHost

Las dos directivas ProxyPass son las que se encargan de ir a buscar los contenidos que se solicitan en la URL local /nodejs_dist/* a su misma URL en el site nodejs.org/dist. ProxyRemote además se añade si nuestro servidor necesita acceder a esa URL a través de otro proxy remoto.

Los parámetros de Cache se pueden complicar mucho más. En este caso he puesto que el contenido expire en una hora, y que solo se cacheen ficheros menores de 10Mb. El cache está configurado a disco en /var/cache/mod_proxy, pero tambien se podría hacer cacheo a memoria, aunque por ahí he leido que no es tan eficiente (ver este enlace)