Cómo guardar tráfico en un servidor web



Un proyecto web cargado consume terabytes de tráfico. Para grandes números, los ahorros del 10-20% pueden ahorrar significativamente dinero y ayudar a no ir más allá de las cuotas.
¿Qué debo hacer si el tráfico se acerca peligrosamente a los límites de su tarifa de alojamiento o incluso los supera?

En este artículo, analizaremos las técnicas básicas que ayudan a ahorrar tráfico en el servidor web.

¡Exprimirlo!


La forma más fácil de ahorrar en tráfico es comprimirlo. Esto carga el procesador del servidor, pero le permite enviar datos al cliente más rápido, reduciendo su tamaño, para que las conexiones se puedan cerrar más rápido. Se utilizan principalmente algoritmos compatibles con Deflate, pero también hay exóticos.

Gzip


El algoritmo de compresión más común. Compresión sin pérdidas, con una buena relación de compresión (configurable de 1 a 9, por defecto 6) y desembalaje rápido. Simple y efectivo, adecuado en la mayoría de los casos.



Nginx

gzip            on;
gzip_min_length 1000;
gzip_proxied    expired no-cache no-store private auth;
gzip_types      text/plain application/xml;

apache

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

Zopfli


La alternativa moderna a gzip comprime 3-8% mejor, pero mucho más lentamente (se descomprime en el cliente a la misma velocidad). Funciona en Deflate, por lo tanto, es 100% compatible con zlib, el soporte en los navegadores también está completo.

git clone https://code.google.com/p/zopfli/
cd zopfli
make

Nginx

gzip_static     on;

Brotli


Como Zopfli, desarrollado en las entrañas de Google. Capaz de comprimir no solo en estática, sino también sobre la marcha, como gzip. A diferencia de los algoritmos anteriores, no solo busca repeticiones en el texto, sino que también asigna inmediatamente su propio diccionario, que tiene muchas etiquetas y frases de código estándar, lo cual es extremadamente efectivo para la compresión html / css / js: si Zopfli proporciona aproximadamente un 8% de compresión después de gzip , entonces Brotli puede lanzar otro 10-15%, ¡mientras que otra persona tiene 23%! Pero solo es compatible con https y es incompatible con zlib / deflate. Caniuse es alentador: el soporte de



Nginx

en forma de módulo estándar solo está disponible en Plus, Nginx normal debe construirse con un módulo de terceros ( --add-module = / path / to / ngx_brotli ):

git clone https://github.com/google/ngx_brotli.git
git clone https://github.com/bagder/libbrotli.git
./autogen.sh
./configure
make


cd /path/to/nginx
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-stream_geoip_module=dynamic --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed' --add-module=/path/to/ngx_brotli
make

Config:

brotli_static	on;

En modo dinámico:

brotli		on;
brotli_comp_level	6;
brotli_types	text/plain text/css text/xml application/x-javascript;

Apache

Everything es más simple aquí, instala mod_brotli y configura el módulo:

<IfModule brotli_module>
 BrotliCompressionLevel 10
 BrotliWindowSize 22
 AddOutputFilterByType BROTLI text/html text/plain text/css text/xml
 AddOutputFilterByType BROTLI text/css
 AddOutputFilterByType BROTLI application/x-javascript application/javascript
 AddOutputFilterByType BROTLI application/rss+xml
 AddOutputFilterByType BROTLI application/xml
 AddOutputFilterByType BROTLI application/json
 </IfModule>

Cachéalo!


También puede descargar el canal entre el usuario y el servidor, minimizando la necesidad de volver a cargar recursos. Si el archivo se almacenó en caché, en la siguiente solicitud, el navegador recibirá su contenido localmente.

Los encabezados HTTP Cache-control, Expires y Vary le permiten diseñar una política de caché muy flexible, aunque puede poner max-age = 2592000 en todas partes en la frente.

Nginx

location ~* ^.+\.(js|css)$ {
	expires max;
}

apache

<ifModule mod_headers.c>
    <FilesMatch "\.(html|htm)$">
        Header set Cache-Control "max-age=43200"
    </FilesMatch>
    <FilesMatch "\.(js|css|txt)$">
        Header set Cache-Control "max-age=604800"
    </FilesMatch>
    <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
        Header unset Cache-Control
    </FilesMatch>
</IfModule>
<ifModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 5 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 604800 seconds"
    ExpiresByType application/javascript "access plus 604800 seconds"
    ExpiresByType application/x-javascript "access plus 604800 seconds"
    ExpiresByType text/html "access plus 43200 seconds"
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

Distribuirlo!


Un buen CDN para un sitio ocupado generalmente cuesta mucho dinero, pero por primera vez, gratis es suficiente. ¡Descargar recursos pesados ​​a través de CDN puede reducir el tráfico varias veces! No desaproveches esta oportunidad, especialmente cuando se trata de shareware. Hay muchos artículos únicos con la parte superior de las redes gratuitas en Internet, pero Cloudflare siempre es lo primero.



Y también tienen trabajadores de servicio gratuitos, en los que puede aumentar manualmente su CDN con preferencia y cortesanas. Hay pocos ejemplos, pero el tutorial está en el portal oficial de SW.

Conclusión


Si no está utilizando al menos gzip, bienvenido a Internet, aquí más del 80% de los sitios trabajan con él. Si no tiene suficiente compresión estándar y -9, use Brotli con una copia de seguridad en forma de Zopfli (ya que Brotley aún no tiene una cobertura del 100%). Esto puede ahorrar mucho tráfico:

  • gzip: 50-95% de compresión dependiendo del contenido. Promedio web 65-80%
  • Zopfli: + 3-8% de compresión en relación con gzip en promedio, pero ocurre 10%
  • Brotli: + 10-15% de compresión en relación con gzip dependiendo del contenido con disparos raros de hasta 20% y más

imagen

Datos de caché en el cliente, esto reduce el tráfico durante visitas repetidas en un 99% o menos, dependiendo de la política de caché seleccionada y los cambios en el sitio.

Use un CDN para la entrega de contenido y el equilibrio básico. El servidor de distribución se lleva la peor parte, mientras que el tráfico principal se reducirá varias veces. Cuánto depende exactamente de la red, la carga y el modo operativo seleccionado.

Todo lo anterior se lleva a cabo en el menor tiempo posible y no requiere una reestructuración compleja de la arquitectura del servidor, lo que le da tiempo para su diseño competente. Comprime, almacena en caché, distribuye y controla tus costos para que no obtengas mucho dinero.


All Articles