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.

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.