Varnish Apache · 4 min read · Jan 01, 2026

Colocando Varnish Frente a Apache en Ubuntu/Debian

Colocando Varnish Frente a Apache en Ubuntu/Debian

Versión 1.0, 15-10-2010
Sígueme en Twitter

Varnish es un “acelerador web” de código abierto que puedes usar para acelerar tu sitio web.

Puede almacenar en caché ciertos elementos estáticos, como imágenes o javascript, pero también puedes usarlo para otros propósitos, como balanceo de carga o algo de seguridad adicional.

En este tutorial nos centraremos en este último.
En este modo, Varnish detendrá las solicitudes HTTP incompletas antes de que lleguen a tu servidor web Apache.

Este tutorial está construido en Ubuntu, pero probablemente también funcionará en Debian.

Primero que nada, asegúrate de que estás ejecutando Apache2 y que lo tienes configurado.

Instalando Varnish

Esto es bastante fácil, ya que está en el repositorio de Ubuntu. Sin embargo, es posible que desees usar el repositorio de Varnish para asegurarte de tener una versión más reciente. Para agregar este, ejecuta esto:

sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.list

Actualiza APT e instala Varnish:

sudo apt-get update
sudo apt-get install varnish

Genial, ahora tienes Varnish, pero aún necesitamos configurarlo.

Cambiando la configuración de Varnish

Primero, tenemos que cambiar el puerto predeterminado. Edita /etc/default/varnish:

vim /etc/default/varnish

Desplázate un poco hacia abajo, hasta que encuentres una línea sin comentar que comience con “ DAEMON_OPTS “.

  • Cambia :6081* a :80* para que escuche en el puerto HTTP predeterminado.
  • edita default.vcl a algo más, yo elegí “mysite.vcl”.

Guarda el archivo.

Edita el archivo VCL que mencionaste en el archivo anterior. En mi caso, estaré editando /etc/varnish/mysite.vcl. Pega el siguiente contenido:

## Redirigir solicitudes a Apache, ejecutándose en el puerto 8000 en localhost
backend apache {
        .host = "127.0.0.1";
        .port = "8000";
}
## Obtener
sub vcl_fetch {
        ## Eliminar el encabezado X-Forwarded-For si existe.
        remove req.http.X-Forwarded-For;
        
        ## insertar la dirección IP del cliente como X-Forwarded-For. Esta es la dirección IP normal del usuario.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        ## Seguridad adicional, los ataques "w00tw00t" son bastante molestos, así que bloqueémoslo antes de que llegue a nuestro servidor web
        if (req.url ~ "^/w00tw00t") {
                error 403 "No permitido";
        }
        ## Entregar el contenido
        return(deliver);
}

## Entregar
sub vcl_deliver {
        ## Estaremos ocultando algunos encabezados añadidos por Varnish. Queremos asegurarnos de que la gente no vea que estamos usando Varnish.
              ## Dado que no estamos almacenando en caché (aún), ¿por qué molestarse en decirle a la gente que lo usamos?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;
        
        ## Nos gustaría ocultar los encabezados X-Powered-By. Nadie tiene que saber que podemos ejecutar PHP y tenemos la versión xyz de él.
        remove resp.http.X-Powered-By;
}

Guarda el archivo. Muy bien, esa fue la parte de Varnish. No lo inicies aún.

Cambiando la configuración de Apache

OK, así que tenemos que hacer que Apache2 escuche en localhost. Para esto, se requieren algunos pequeños cambios.

vim /etc/apache2/ports.conf

Cambia:

NameVirtualHost *:80
Listen 80

A:

NameVirtualHost *:8000
Listen 127.0.0.1:8000

Apache escuchará en ese puerto. También tendrás que editar tus vhosts. Abre tu(s) vhost(s) y reemplaza

con

Hasta ahora todo bien. Ahora tenemos que instalar un módulo adicional de Apache para asegurarnos de que la dirección IP del usuario termine correcta. Dado que Varnish está hablando básicamente con Apache2, verías 127.0.0.1 como IP del visitante.

apt-get install libapache2-mod-rpaf

El módulo RPAF (Reverse Proxy Add Forward) se asegurará de que la IP de 127.0.0.1 sea reemplazada por la IP establecida en X-Forwarded-For establecida por Varnish.

Reiniciar demonios

Reinicia Apache:

/etc/init.d/apache2 restart

Verifica si está vinculado a la IP/Puerto correcto ejecutando:

netstat -lp | grep apache2

Si ves:

tcp        0      0 localhost:8000          *:*                     LISTEN      4586/apache2

Esto es correcto. De lo contrario, cometiste un error. Muy bien, ahora tenemos que reiniciar Varnish para que escuche en el puerto 80.

/etc/init.d/varnish restart

Verificamos esto nuevamente ejecutando:

netstat -lp | grep varnish

El resultado será:

tcp        0      0 *:www                   *:*                     LISTEN      4498/varnishd  
tcp6       0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd

(Sí, varnish también escucha en cualquier dirección IPv6).

Así que… Ahora hemos colocado Varnish frente a Apache2. Podemos probar si el sitio aún funciona simplemente visitándolo. Verás el sitio, como si nada hubiera pasado. Puedes probar esto más a fondo apagando apache. Entonces verás una página de error de Varnish.

Características adicionales

Bueno, es posible que desees cambiar el nombre del servidor HTTP de “Apache” a algo más. Esto se puede hacer editando tu archivo VCL, ubicado en /etc/varnish. Después de:

sub vcl_fetch {

Agrega:

## Eliminar el encabezado http.Server
unset obj.http.Server;
## Cambiar el encabezado http.Server a algo más
set obj.http.Server = "Incognito";

Obviamente, puedes hacerlo parecer como quieras. Yourdomain.com, por ejemplo. Ten en cuenta que todos los dominios en este servidor usarán el mismo nombre de servidor.

Bueno, eso es todo. ¡Ahora tienes un proxy inverso frente a tu Apache!
Con un poco de ajuste, puedes hacer que almacene en caché o balancee carga.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.