Cómo ahorrar tráfico con mod_deflate de Apache2
En esta página
- 1 Habilitar mod_deflate
2 Configurar mod_deflate
- 2.1 Inclusión explícita de archivos por tipo MIME
- 2.2 Exclusión explícita de archivos por extensión
- 2.3 Directivas de configuración adicionales
- 3 pruebas
En este tutorial, describiré cómo instalar y configurar mod_deflate en un servidor web Apache2. mod_deflate permite a Apache2 comprimir archivos y entregarlos a clientes (por ejemplo, navegadores) que pueden manejar contenido comprimido como lo hacen la mayoría de los navegadores modernos. Con mod_deflate, puedes comprimir archivos HTML, texto o XML a aprox. entre un 20 y un 30% de su tamaño original, ahorrando así tráfico en el servidor y haciendo más felices a los usuarios de su módem.
La compresión de archivos provoca una carga ligeramente mayor en el servidor, pero en mi experiencia, esto se compensa con el hecho de que los tiempos de conexión de los clientes a su servidor disminuyen mucho. Por ejemplo, un usuario de módem que necesitaba siete segundos para descargar un archivo HTML sin comprimir ahora podría necesitar sólo dos segundos para el mismo archivo, pero comprimido.
Al utilizar mod_deflate, no debe temer excluir a los usuarios con navegadores más antiguos que no pueden manejar contenido comprimido. El navegador negocia con el servidor antes de transferir cualquier archivo y, si el navegador no puede manejar contenido comprimido, el servidor entrega los archivos sin comprimir.
mod_deflate ha reemplazado mod_gzip de Apache 1.3 en Apache2. Si desea servir archivos comprimidos con Apache 1.3, consulte este tutorial: mod_gzip - servir contenido comprimido mediante el servidor web Apache
En primer lugar quiero decir que ésta no es la única manera de establecer un sistema de este tipo. Hay muchas maneras de lograr este objetivo, pero esta es la que yo tomo. ¡No doy ninguna garantía de que esto funcione para usted!
1 Habilitar mod_deflate
Si tiene instalado Apache2, mod_deflate también debería estar instalado en su sistema. Ahora tenemos que habilitarlo. En Debian, podemos hacerlo así:
a2enmod deflate
Luego reinicie Apache2:
service apache2 restart
En otras distribuciones, es posible que tengas que editar la configuración de Apache2 manualmente para habilitar mod_deflate. Es posible que tengas que agregar una línea como esta a la sección LoadModule:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
Asegúrese de ajustar la ruta a mod_deflate.so y luego reinicie Apache2.
2 Configurar mod_deflate
La compresión de archivos se puede configurar de dos maneras: exclusión explícita de archivos por extensión o inclusión explícita de archivos por tipo MIME. Puede habilitar mod_deflate para todo su servidor Apache2 o solo para sitios virtuales específicos. Dependiendo de esto, abra la sección de configuración global del servidor Apache2 ahora o simplemente la sección de configuración de vhost donde desea habilitar mod_deflate.
2.1 Inclusión explícita de archivos por tipo MIME
Si desea comprimir únicamente archivos HTML, texto y XML, agregue esta línea a su configuración:
AddOutputFilterByType DEFLATE text/html text/plain text/xml
Esta es la configuración que estoy usando porque no quiero comprimir imágenes ni archivos PDF ni archivos ya comprimidos, como archivos zip.
2.2 Exclusión explícita de archivos por extensión
Si desea comprimir todos los tipos de archivos y excluir solo algunos, agregaría algo como esto a su configuración (en lugar de la línea de la sección 2.1):
SetOutputFilter DEFLATE
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
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
Esto comprimiría todos los archivos excepto las imágenes (gif, jpg y png), los archivos ya comprimidos (como zip y tar.gz) y los archivos PDF, lo cual tiene sentido porque no se gana mucho comprimiendo estos tipos de archivos.
2.3 Directivas de configuración adicionales
Independientemente de si utilizas la configuración de la sección 2.1 o 2.2, debes agregar estas líneas a tu configuración:
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Estas líneas son para algunos navegadores antiguos que no admiten la compresión de archivos que no sean documentos HTML.
La configuración ya ha finalizado y ahora debe reiniciar Apache2. En Debian, lo haces así:
service apache2 restart
Para obtener más información sobre directivas de configuración, consulte el módulo Apache mod_deflate.
3 pruebas
Para probar nuestra compresión, agregamos algunas directivas a nuestra configuración mod_deflate que registran la relación de compresión de los archivos entregados. Abra su configuración mod_deflate y agregue las siguientes líneas:
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog /var/log/apache2/deflate_log deflate
Asegúrese de reemplazar /var/log/apache2 con el directorio de registro de su Apache2. Esto podría ser /var/log/httpd, /var/log/httpd2, etc.
Luego reinicie Apache2. En Debian, hazlo así:
service apache2 restart
Ahora, cada vez que se solicite un archivo, se registrará en /var/log/apache2/deflate_log (o en cualquier archivo al que lo haya cambiado). Una línea de registro típica se ve así:
"GET /info.php HTTP/1.1" 7621/45430 (16%)
Verá que el archivo info.php fue solicitado y entregado. Su tamaño original era de 45430 bytes y estaba comprimido a 7621 bytes o el 16% de su tamaño original. Este es un gran resultado, y si su sitio web consta principalmente de archivos HTML, texto y XML, mod_deflate le ahorrará mucho tráfico y, para los usuarios con una conexión de ancho de banda bajo, su sitio se cargará mucho más rápido.
Si ya no necesita el registro después de las pruebas, puede deshacer los cambios de la sección 3 y reiniciar Apache2.
4 enlaces
- Módulo Apache mod_deflate: http://httpd.apache.org/docs/2.0/mod/mod_deflate.html
- mod_gzip: entrega contenido comprimido mediante el servidor web Apache: https://linux-console.net/linux_apache_mod_gzip