Comment économiser du trafic sur un serveur Web



Un projet Web chargé consomme des téraoctets de trafic. Pour les grands nombres, des économies de 10 à 20% peuvent considérablement économiser de l'argent et éviter de dépasser les quotas.
Que dois-je faire si le trafic approche dangereusement les limites de votre tarif d'hébergement ou va même au-delà?

Dans cet article, nous analyserons les techniques de base qui permettent d'économiser du trafic sur le serveur Web.

Pressez-le!


Le moyen le plus simple d'économiser sur le trafic est de le compresser. Cela charge le processeur du serveur, mais vous permet d'envoyer des données au client plus rapidement, en réduisant leur taille, afin que les connexions puissent être fermées plus rapidement. La plupart des algorithmes compatibles avec Deflate sont utilisés, mais il existe également des algorithmes exotiques.

Gzip


L'algorithme de compression le plus courant. Compression sans perte, avec un bon taux de compression (configurable de 1 à 9, par défaut 6) et un déballage rapide. Simple et efficace, adapté dans la plupart des cas.



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


L'alternative moderne à gzip compresse mieux de 3 à 8%, mais beaucoup plus lentement (elle décompresse le client à la même vitesse). Il fonctionne sur Deflate, il est donc 100% compatible avec zlib, le support dans les navigateurs est également complet.

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

Nginx

gzip_static     on;

Brotli


Comme Zopfli, développé dans les entrailles de Google. Capable de compresser non seulement en statique, mais aussi à la volée, comme gzip. Contrairement aux algorithmes précédents, il recherche non seulement les répétitions dans le texte, mais mappe également immédiatement son propre dictionnaire, qui a beaucoup de balises et de phrases de code standard, ce qui est extrêmement efficace pour la compression html / css / js: si Zopfli donne environ 8% de compression après gzip , alors Brotli est capable de lancer encore 10-15%, tandis que quelqu'un d'autre a 23%! Mais il n'est pris en charge que dans https et est incompatible avec zlib / deflate. Caniuse est encourageant: le support



Nginx

sous la forme d'un module standard est disponible uniquement dans Plus, Nginx standard doit être construit avec un module tiers ( --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 mode dynamique:

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

Apache

Tout est plus simple ici, installez mod_brotli et configurez le module:

<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>

Cachez-le!


Vous pouvez également décharger le canal entre l'utilisateur et le serveur, minimisant ainsi le besoin de recharger les ressources. Si le fichier a été mis en cache, à la prochaine demande, le navigateur recevra son contenu localement.

Les en-têtes HTTP Cache-control, Expires et Vary vous permettent de concevoir une politique de cache très flexible, bien que vous puissiez mettre max-age = 2592000 partout sur le front.

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>

Distribuez-le!


Un bon CDN pour un site très fréquenté coûte généralement beaucoup d'argent, mais pour la première fois, la gratuité est suffisante. Le téléchargement de ressources lourdes via CDN peut réduire le trafic de plusieurs fois! Ne négligez pas cette opportunité, surtout lorsqu'il s'agit de shareware. Il y a beaucoup d'articles uniques avec des sommets de réseaux gratuits sur Internet, mais Cloudflare vient toujours en premier.



Et ils ont également des travailleurs de service gratuits, sur lesquels vous pouvez manuellement augmenter votre CDN avec préférence et courtisanes. Il y a peu d'exemples, mais le tutoriel se trouve sur le portail SW officiel.

Conclusion


Si vous n'utilisez pas au moins gzip, bienvenue sur Internet, ici plus de 80% des sites fonctionnent avec. Si vous n'avez pas assez de compression standard et -9, utilisez Brotli avec une sauvegarde sous forme de Zopfli (car brotley n'a pas encore une couverture à 100%). Cela peut économiser beaucoup de trafic:

  • gzip: compression 50-95% selon le contenu. Web moyen 65-80%
  • Zopfli: + 3-8% de compression par rapport à gzip en moyenne, mais ça arrive 10%
  • Brotli: + 10-15% de compression par rapport à gzip selon le contenu avec des clichés rares jusqu'à 20% et plus

image

Cachez les données sur le client, cela réduit le trafic lors des visites répétées de 99% ou moins, selon la politique de mise en cache sélectionnée et les changements sur le site.

Utilisez un CDN pour la livraison de contenu et l'équilibrage de base. Le serveur de distribution en subit les conséquences, tandis que le trafic principal sera réduit de plusieurs fois. La quantité dépend exactement du réseau, de la charge et du mode de fonctionnement sélectionné.

Tout ce qui précède se déroule dans les plus brefs délais et ne nécessite pas de restructuration complexe de l'architecture du serveur, ce qui vous laisse le temps pour sa conception compétente. Compressez, mettez en cache, distribuez et surveillez vos coûts afin de ne pas gagner beaucoup d'argent.


All Articles