Cómo activar la compresión gzip en nginx

Activar la compresión gzip en nginx es tan simple como utilizar las directivas de configuración que te proponemos.

Si has utilizado Google PageSpeed Insights para comprobar la velocidad de tu sitio web, tal vez Google esté quejándose de que no tienes la compresión gzip activada. Esto ocurre muy a menudo en nginx ya que la compresión viene deshabilitada por defecto.

Compresión gzip
Compresión gzip

Para activarla, basta con añadir las siguientes líneas a nuestro fichero de configuración (usualmente /etc/nginx/nginx.conf):

gzip on;
gzip_min_length 1100;
gzip_buffers 32 4k;
gzip_comp_level 4;
gzip_proxied any;
gzip_types text/plain text/xml text/css application/x-javascript font/ttf image/svg+xml;
gzip_vary on;

Una breve explicación de las directivas de configuración:

Directiva Descripción
gzip Habilita la compresión gzip.
gzip_min_length Ignora la compresión en ficheros que no superen el tamaño especificado (en bytes).
gzip_buffers Configura el número de buffers y su tamaño. El tamaño depende de nuestra plataforma. Usa el comando getconf PAGESIZE e inserta 32 4k o 16 8k, dependiendo del resultado.
gzip_comp_level El nivel de compresión de 1 a 9. El valor recomendado es 1-2, pero si sobran recursos de máquina puedes usar 3-4. Si quieres derrochar recursos, usa 5-9.
gzip_proxied Habilita la compresión gzip para peticiones a través de proxy. El valor any habilita gzip para todas.
gzip_types Especifica los tipos de archivo que serán comprimidos. El formato text/html siempre se comprime por defecto.
gzip_vary Inserta Vary: Accept-Encoding en la cabecera de la respuesta.

Si queremos deshabilitar la compresión para Internet Explorer 6 podemos añadir gzip_disable "msie6";.

Para más información sobre las directivas consulta la documentación de ngx_http_gzip_module.

En nuestro caso el tipo de archivo text/ttf no existía dentro de /etc/nginx/mime.types por lo que, después de la línea include /etc/nginx/mime.types;, hay que agregar lo siguiente:

types {
  font/ttf ttf;
}

En el caso de los ficheros .eot y .woff no necesitamos compresión pues que ya son un formato comprimido y no habría mucha ganancia.

Si queremos quitar algo de carga al servidor evitando que compriman los ficheros continuamente, podemos utilizar el módulo ngx_http_gzip_static_module que se encargará de servir los ficheros .gz que ya tendríamos comprimidos y almacenados en disco previamente.

Para comprobar que todo funciona correctamente, ejecutamos curl -H "Accept-Encoding: gzip" -I www.example.com y si recibimos la cabecera Content-Encoding: gzip entonces todo está correcto.

Compartir en

Facebook Twitter Google+ LinkedIn