Mostrando entradas con la etiqueta proxy. Mostrar todas las entradas
Mostrando entradas con la etiqueta proxy. Mostrar todas las entradas

Varnish, configuración avanzada

El otro día comentamos cómo instalar Varnish en nuestro equipo y configurarlo para que cachee contenidos a nivel local, pero también hablamos de que podía hacer de proxy inverso para nuestros sistemas. Es decir, podemos tener un número n de servidores con Apache (por ejemplo) sirviendo una página web y que todo el contenido estático lo sirva Varnish, dejando la parte dinámica en round-robin entre los servidores de backend. Toda la configuración es la misma que la presentada en el post de instalación. Lo único que cambiará será el contenido del fichero /etc/varnish/default.vcl, que contendrá los equipos a los que conectarse.
director www_master round-robin {
   { .backend = { .host = "192.168.0.33"; .port = "http"; } }
   { .backend = { .host = "192.168.0.34"; .port = "http"; } }
}
 
sub vcl_recv {
   set req.backend = www_master;
   remove req.http.X-Forwarded-For;
   set req.http.X-Forwarded-For = client.ip;
}
E incluso una configuración más compleja, con varios virtualhost y varios servidores de backend
director web_master round-robin {
   { .backend = { .host = "192.168.0.33"; .port = "http"; } }
   { .backend = { .host = "192.168.0.34"; .port = "http"; } }
}
 
director mail_master round-robin {
   { .backend = { .host = "192.168.0.37"; .port = "8080"; } }
   { .backend = { .host = "192.168.0.65"; .port = "80"; } }
}
 
director photos_master round-robin {
   { .backend = { .host = "192.168.0.100"; .port = "http"; } }
}
 
sub vcl_recv {
   if (req.http.host ~ "^(mail.|webmail.)?domain.(com)$") {
      set req.backend = mail_master;
   }
 
   if (req.http.host ~ "^(fotos.|photos.)doamin.(com)$") {
      set req.backend = photos_master;
   }
 
   if (req.http.host ~ "^(www.)?doamin.(com)$") {
      set req.backend = web_master;
   }

   remove req.http.X-Forwarded-For;
   set req.http.X-Forwarded-For = client.ip;
}
Leer más

Varnish, cacheando contenido

Varnish es un pequeño servidor que actúa como proxy-caché de nuestro servidor web y que permite reducir notablemente las consultas a disco y por lo tanto acelerar las respuestas de la web. Varnish es por lo tanto un proxy inverso para un servidor web (Apache, Cherokee, etc) que permite a la vez que servir contenidos también mantenerlos en caché, acelerando así las respuestas. Aunque las páginas sean dinámicas y necesiten ser consultas a una base de datos, Varnish lo hace por nosotros, almacenando la página como estática en la memoria para que devolverla al cliente sea inmediato.
Varnish es software libre y está disponible en los repositorios de las principales distribuciones. Como lenguaje de configuración usa VLC (Varnish Configuration Language), un lenguaje propio que permite darle la flexibilidad y personalización que cada entorno necesita.
En este post vamos a configurar Varnish de forma sencilla para que nos cachee los contenidos de un servidor web (Apache) local que tenemos.
  1. Instalación
    Al emplear Debian como sistema operativo tenemos el paquete compilado en los repositorios oficiales.
    shell> apt-get install varnish
    
  2. Configuración de apache
    Como servidor de backend vamos a tener nuestro servidor Apache montado y escuchando en la IP pública o IP de DMZ correspondiente. Puesto que dejaremos que sea Varnish el encargado de servidor la web, es decir, escuchar en el puerto 80 de la IP "pública", configuraremos Apache para que escuche en el interfaz de localhost. Para ello editamos el fichero /etc/apache2/ports.conf dejándolo como sigue.
    NameVirtualHost 127.0.0.1:8080
    Listen 127.0.0.1:80
    
    <IfModule mod_ssl.c>
        Listen 443
    </IfModule>
    
    <IfModule mod_gnutls.c>
        Listen 443
    </IfModule>
    
    Fijaros que en esta configuración sólo cambiamos el puerto 80 de escucha a localhost. Si hay algo sirviéndose en https (puerto 443) será entregado por Apache directamente.
  3. Configuración de varnish
    Ahora que ya tenemos el backend en localhost:80 tenemos que configurar Varnish para que escuche en el puerto 80 de la IP "pública" y que envíe dichas peticiones al backend.
    Lo primero de todo, configurar el comportamiento por defecto del nuevo servicio. En este caso editamos el fichero /etc/default/varnish.
    START=yes
    
    DAEMON_OPTS="-a 192.168.0.33:80 \
        -T 192.168.0.33:6082 \
        -u varnish \
        -g varnish \       
        -f /etc/varnish/default.vcl \
        -S /etc/varnish/secret \
        -s file,/var/lib/varnish/varnish_storage.bin,1G"
    
    Una vez que ya tenemos esto, simplemente queda por crear el contenido del fichero /etc/varnish/default.vcl, que tendrá el comportamiento del servicio propiamente dicho.
    director www_master round-robin {
       { .backend = { .host = "127.0.0.1"; .port = "80"; } }
    }
     
    sub vcl_recv {
       set req.backend = www_master;
       remove req.http.X-Forwarded-For;
       set req.http.X-Forwarded-For = client.ip;
    }
    
    Este fichero es muy simple, puesto que no hay nada especial en él, simplemente indicamos que el proveedor de datos (Apache) está en localhost:80.
  4. Arrancando servicios
    Ahora que ya está todo guardado, simplemente lanzamos los servicios para que nuestro servidor quede nuevamente funcionando, pero con un proxy caché intermedio.
    shell> /etc/init.d/apache2 restart
    shell> /etc/init.d/varnish start
    
Leer más

zabbix-proxy: Instalación

La instalación de proxy's por la red es uno de los puntos fuertes de zabbix, que permite así escalar la recolección de datos desde un único punto a varios puntos, aunque siga a centralizar todos los datos sobre una misma base de datos y de consulta. La idea es que desde un punto centralizado (zabbix_server) estén todos los datos pero que la recolección de los mismos se haga desde varios puntos deferentes, para así poder levantar el número de threads necesarios de cada poller y distribuir la carga de CPU entre varias máquinas. 'divide y vencerás'.
Antes de comenzar con la instalación de un zabbix-proxy hay que aclarar un par de conceptos.
  1. La cantidad de equipos que cada uno de los proxy's va a controlar y la frecuencia de los check's. Es decir, cuantos vps va a tener que soportar la base de datos. No hay un número exacto que podamos decir, pero esto es importante pues según estos datos tendremos que optar por instalar un proxy con sqlite o un proxy con una base de datos más potente (mysql o postgress).
  2. El tipo de proxy que vamos a tener:
    • Activo
      El propio proxy enviará la información al servidor zabbix según la configuración que tenga. El servidor únicamente tendrá que atender las peticiones y recolectar los datos.
    • Pasivo
      Será el propio servidor zabbix el que se encargue de pedirle al proxy los datos con una frecuencia determinada.
Una vez tengamos esto decidido ya es hora de instalar el servicio y de configurarlo sobre todo.
  • SQLite
    Esta es la solución más sencilla y no necesita prácticamente nada. Simplemente se instala y la configuración de la base de datos es inmediata. El propio proceso la crea al arrancar por primera vez, no hay que desplegar el schema.
    shell> apt-get install zabbix-proxy-sqlite
    
  • MySQL
    Esta es junto con la opción de postgress la opción a elegir si tenemos más carga de trabajo en el proxy. Vamos a partir de que la instalación del servidor MySQL ya está realizada. Por lo tanto sólo queda instalar el servicio y desplegar el schema de zabbix.
    • Instalamos el servicio
      Primero vamos a instalar el servicio de zabbix-proxy. Para eso empleamos el gestor de paquetes de nuestra distribución.
      shell> apt-get install zabbix-proxy-mysql
      
    • Configuramos la base de datos
      La versión de MySQL no instala la base de datos al arrancarse por primera vez, así que tenemos que desplegar el schema y crear un usuario con acceso a la nueva base de datos del proxy. El schema que emplea es el mismo que el servidor zabbix, pero el proxy no necesita datos, esos se los provee el servidor en su debido momento.
      mysql> CREATE DATABASE zabbix_proxy_1;
      mysql> USE zabbix_proxy_1;
      mysql> SOURCE ~/create/schema/mysql.sql
      mysql> GRANT ALL PRIVILEGES ON zabbix_proxy_1.*
             -> to 'proxy_1'@'192.168.1.51'
             -> IDENTIFIED BY 'YOURPASSWD';
      
    • Configuramos zabbix_proxy.conf para emplear MySQL
      Esta parte es específica si empleamos una base de datos diferente a SQLite.
      ...
      DBHost     = 192.168.1.33
      DBName     = zabbix_proxy_1
      DBUser     = proxy_1
      DBPassword = YOURPASSWD
      ...
      
Una vez esté todo instalado hay que realizar la configuración del servicio como primer paso antes de arrancarlo. Esta configuración se lleva a cabo en el fichero /etc/zabbix/zabbix_proxy.conf y está perfectamente documentada en la documentación oficial. Al finalizar la configuración, arrancamos el servicio y desde el servidor zabbix creamos un nuevo proxy (Administration/DM/Proxy), según sea activo o pasivo.
Create a zabbix new proxy
Una vez tengamos el nuevo proxy creado, todos aquellos equipos que nos interese monitorizar a través de él tendremos que indicarlo desde el interfaz web y en su fichero de configuración indicar que la IP del servidor zabbix será la del proxy y no la del servidor real.
Leer más

Empleo de apt con proxy

Se nos puede plantear el caso de que estemos trabajando en un entorno de trabajo donde todos nuestros equipos no tengan salida a internet, sino que sea una DMZ cerrada. El cortafuegos puede permitir la entrada de conexiones a los servidores que estrictamente lo necesiten, pero no la salida de paquetes a la red. En este caso, a la hora de actualizar nuestra distro, o incluso de descargar algo, no podremos.
Para casos como este, existen los proxy's de red. Un equipo que permite, de forma más o menos controlada, saber todo lo que sale y entra de internet, teniendo un pequeño buffer para poder servir así también páginas o archivos previamente descargados de forma más rápida.
Si queremos usar un proxy con el sistema de paquetería de debian, existen dos formas que las veremos a continuación.
  1. Variables de entorno
    Esta forma permite establecer el proxy como un proxy global para todo nuestro sistema GNU/Linux. Todas las peticiones http/ftp será redirigidas por el proxy especificado.
    shell> export http_proxy="http://user:pass@proxy:port"
    shell> export ftp_proxy="http://user::pass@proxy:port"
    
  2. apt-setup
    De esta forma, sólo apt empleará el proxy para salir a internet. Para usarlo, creamos el fichero /etc/apt/apt.conf y le añadimos el siguiente contenido
    Acquire
    {
      http
      {
         Proxy "http://user:pass@proxy:port";
      };
      ftp
      {
         Proxy "http://user:pass@proxy:port";
      };
    }
    
Tras cualquiera de los dos métodos, las acciones realizadas por apt será redirigidas por el proxy empleado, permitiendo la salida a internet del sistema y también en caso de que el proxy tenga suficiente caché, acelerando la descarga de paquetes para otros equipos tras la primera descargar.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios