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.listActualiza APT e instala Varnish:
sudo apt-get updatesudo apt-get install varnishGenial, 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/varnishDesplá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.confCambia:
NameVirtualHost *:80
Listen 80A:
NameVirtualHost *:8000
Listen 127.0.0.1:8000Apache 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-rpafEl 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 restartVerifica si está vinculado a la IP/Puerto correcto ejecutando:
netstat -lp | grep apache2Si ves:
tcp 0 0 localhost:8000 *:* LISTEN 4586/apache2Esto 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 restartVerificamos esto nuevamente ejecutando:
netstat -lp | grep varnishEl 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.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.