Apache no me comprime con gzip la web para optimizar el contenido para Google
Bienvenidos a VerTutoriales.com, si estáis optimizando vuestra web por ejemplo para Google con PageSpeed Insight, es posible que os esté pidiendo que comprimáis el contenido para reducir el tiempo de carga de la web, algo recomendable en la mayoría de los casos aunque penalice nuestro servidor.
Este era mi caso, lo único que ocurría es que ya había probado a comprimir el contenido de varias formas, utilizando la compresión desde htaccess:
Comprimir utilizando GZip
[codesyntax lang=”apache”]
<IfModule mod_gzip.c> mod_gzip_on Yes mod_gzip_item_include file .html$ mod_gzip_item_include file .php$ mod_gzip_item_include file .css$ mod_gzip_item_include file .js$ mod_gzip_item_include mime ^application/javascript$ mod_gzip_item_include mime ^application/x-javascript$ mod_gzip_item_include mime ^text/.* mod_gzip_item_include handler ^application/x-httpd-php mod_gzip_item_exclude mime ^image/.* </IfModule> [/codesyntax]
Utilizando Deflated:
[codesyntax lang=”apache”]
AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml
[/codesyntax]
La cosa es que ninguno de estos me funciono, así que seguí a la caza buscando el código y localización correcta para configurarlo… me tiré directamente a Apache para configurarlo por defecto para todas las páginas, no me gustó la idea mucho, primero por que teniendo multitud de webs en producción realizar un cambio de esta envergadura puede llevar al caos y la incidencia para varias decenas de webs… segundo por que al realizar la compresión el servidor consume un mayor número de recursos en comprimir la información para las peticiones que recibe. Aún así… estaba decidido a comprimir la web y probar si ayudaba a posicionar la web 😉
Lo primero era buscar donde se encuentra el fichero de configuración del servidor web Apache, en mi caso utilizaba en este servidor Centos con Plesk, por lo que la configuración por defecto está en:
/etc/apache2/apache2.conf
Para editarlo simplemente hay que abrirlo utilizando alguno de los editor de texto, por ejemplo “vim”. Una vez abierto, hay que añadir una nueva declaración, por ejemplo, si vamos a utilizar deflated para comprimir:
[codesyntax lang="apache"]
<IfModule mod_deflate.c> SetOutputFilter DEFLATE # Don’t compress SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #Dealing with proxy servers <IfModule mod_headers.c> Header append Vary User-Agent </IfModule> </IfModule>
[/codesyntax]
Luego hay que reiniciar el servicio, dependiendo de tu versión puede ser
service httpd restart
Después de reiniciar el servidor Apache y comprobar de nuevo la compresión…. sorpresa! Aún no estaba funcionando… algo raro pasaba, había probado los dos métodos para comprimir que conocía, tiré de Google para seguir buscando más opciones, pero pasaban por modificar el htaccess o configurar Apache…
La sorpresa de nginx
Ya es hora de conocer este servidor optimizado para webs 🙂 Con las últimas versiones de “autoinstalación” de mis servidores, no me había entretenido a probar el servidor que estaba corriendo, de hecho en alguno lo he tenido que tener deshabilitado para que no entrara en conflicto con versiones antiguas de algunos clientes y sus gestores de tiendas.
Sí, nginx era lo que no estaba comprimiendo y era a su vez el que estaba sirviendo las webs, por eso todas las configuraciones que estaba utilizando para Apache no funcionaban… NORMAL.
Así que paso a daros los pasos que dí para configurar finalmente el servidor nginx para comprimir las webs
Como anteriormente, hay que buscar el fichero de configuración de nginx y editarlo
vi /etc/nginx/nginx.conf
Una vez tenemos abierto el fichero de configuración del servidor, hay que buscar la linea de http con sus parámetros de configuración que viene entre llaves {}. Encontrada esta línea simplemente hay que añadir tal y como indico a continuación para configurar Gzip:
[codesyntax lang=”apache”]
http { gzip on; gzip_http_version 1.1; gzip_vary on; gzip_comp_level 6; gzip_proxied any; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; gzip_buffers 16 8k; gzip_disable "MSIE [1-6].(?!.*SV1)"; }
[/codesyntax]
Y listo! Con este puñado de líneas tendremos configurado nuestro servidor para la compresión.
He de decir que los múltiples golpes recibidos para esta configuración casi me llevaron a la desesperación, pero el resultado de un punto verde en Google es como recibir el aprobado que tanto esperábamos en esa asignatura que se nos hacía cuesta arriba en el instituto!
Además el tiempo de carga de la web casi se redujo a la mitad, hablamos de milisegundos, pero todo cuenta 😉
Si os ha resuelto la duda… compartid, dar like o comentad