So speichern Sie Datenverkehr auf einem Webserver



Ein geladenes Webprojekt verbraucht Terabyte an Datenverkehr. Bei großen Zahlen können Einsparungen von 10 bis 20% erheblich Geld sparen und dazu beitragen, die Quoten nicht zu überschreiten.
Was soll ich tun, wenn sich der Verkehr gefährlich den Grenzen Ihres Hosting-Tarifs nähert oder diese sogar überschreitet?

In diesem Artikel werden die grundlegenden Techniken analysiert, mit denen der Datenverkehr auf dem Webserver gespart werden kann.

Es auspressen!


Der einfachste Weg, um Verkehr zu sparen, besteht darin, ihn zu komprimieren. Dadurch wird der Serverprozessor geladen, Sie können jedoch Daten schneller an den Client senden und dessen Größe verringern, sodass Verbindungen schneller geschlossen werden können. Meist werden Deflate-kompatible Algorithmen verwendet, aber es gibt auch exotische.

Gzip


Der am häufigsten verwendete Komprimierungsalgorithmus. Verlustfreie Komprimierung mit einem guten Komprimierungsverhältnis (konfigurierbar von 1 bis 9, Standard 6) und schnellem Auspacken. Einfach und effektiv, in den meisten Fällen geeignet.



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


Die moderne Alternative zu gzip komprimiert 3-8% besser, aber viel langsamer (sie dekomprimiert auf dem Client mit der gleichen Geschwindigkeit). Es funktioniert mit Deflate, ist also 100% kompatibel mit zlib, die Unterstützung in Browsern ist ebenfalls voll.

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

Nginx

gzip_static     on;

Brotli


Wie Zopfli, entwickelt im Darm von Google. Kann nicht nur in der Statik, sondern auch im laufenden Betrieb wie gzip komprimiert werden. Im Gegensatz zu früheren Algorithmen sucht es nicht nur nach Wiederholungen im Text, sondern ordnet auch sofort ein eigenes Wörterbuch zu, das viele Tags und Standardcodephrasen enthält. Dies ist äußerst effektiv für die HTML / CSS / JS-Komprimierung: Wenn Zopfli nach gzip eine Komprimierung von etwa 8% ergibt , dann kann Brotli weitere 10-15% werfen, während jemand anderes 23% hat! Es wird jedoch nur in https unterstützt und ist nicht mit zlib / deflate kompatibel. Caniuse ist ermutigend:



Nginx-

Unterstützung in Form eines Standardmoduls ist nur in Plus verfügbar. Normales Nginx muss mit einem Modul eines Drittanbieters erstellt werden ( --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

Konfiguration:

brotli_static	on;

Im dynamischen Modus:

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

Apache Hier ist

alles einfacher, installieren Sie mod_brotli und konfigurieren Sie das Modul:

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

Zwischenzuspeichern!


Sie können den Kanal auch zwischen dem Benutzer und dem Server auslagern, um das erneute Laden von Ressourcen zu minimieren. Wenn die Datei zwischengespeichert wurde, erhält der Browser bei der nächsten Anforderung den Inhalt lokal.

Mit den HTTP-Headern Cache-Control, Expires und Vary können Sie eine sehr flexible Caching-Richtlinie entwerfen, obwohl Sie max-age = 2592000 überall auf die Stirn legen können.

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>

Verteile es!


Ein gutes CDN für eine geschäftige Site kostet normalerweise viel Geld, aber zum ersten Mal ist kostenlos genug. Durch das Herunterladen schwerer Ressourcen über CDN kann der Datenverkehr um ein Vielfaches reduziert werden! Vernachlässigen Sie diese Gelegenheit nicht, insbesondere wenn es sich um Shareware handelt. Es gibt viele einmalige Artikel mit den besten freien Netzwerken im Internet, aber Cloudflare steht immer an erster Stelle.



Außerdem gibt es kostenlose Servicemitarbeiter, bei denen Sie Ihr CDN manuell mit Präferenz und Kurtisanen erhöhen können. Es gibt nur wenige Beispiele, aber das Tutorial befindet sich auf dem offiziellen SW-Portal.

Fazit


Wenn Sie nicht mindestens gzip verwenden, sind Sie im Internet willkommen. Hier arbeiten mehr als 80% der Websites damit. Wenn Sie nicht über genügend Standardkomprimierung und -9 verfügen, verwenden Sie Brotli mit einem Backup in Form von Zopfli (da Brotley noch keine 100% ige Abdeckung bietet). Dies kann viel Verkehr sparen:

  • gzip: 50-95% Komprimierung je nach Inhalt. Web-Durchschnitt 65-80%
  • Zopfli: + 3-8% Komprimierung im Vergleich zu gzip im Durchschnitt, aber es passiert 10%
  • Brotli: + 10-15% Komprimierung relativ zu gzip je nach Inhalt mit seltenen Aufnahmen bis zu 20% und höher

Bild

Durch das Zwischenspeichern von Daten auf dem Client wird der Datenverkehr bei wiederholten Besuchen um 99% oder weniger reduziert, abhängig von der ausgewählten Caching-Richtlinie und den Änderungen auf der Site.

Verwenden Sie ein CDN für die Bereitstellung von Inhalten und den grundlegenden Ausgleich. Der verteilende Server übernimmt die Hauptlast, während der Hauptverkehr um ein Vielfaches reduziert wird. Wie viel genau hängt vom Netzwerk, der Last und der ausgewählten Betriebsart ab.

All dies geschieht in kürzester Zeit und erfordert keine komplexe Umstrukturierung der Serverarchitektur, sodass Sie Zeit für deren kompetentes Design haben. Komprimieren, zwischenspeichern, verteilen und überwachen Sie Ihre Kosten, damit Sie nicht viel Geld erhalten.


All Articles