Sammelen an Ariichten Är CDN

Inhalt Liwwerung Netzwierker (CDNs) gi vu Websäiten an Uwendungen benotzt haaptsächlech fir d'Luede vu statesche Elementer ze beschleunegen. Dëst geschitt duerch Cache Dateien op CDN Serveren a verschiddene geographesche Regiounen. Andeems Dir Daten iwwer CDN ufrot, kritt de Benotzer se vum nooste Server.

De Betribsprinzip an d'Funktionalitéit vun all Inhalt Liwwerung Netzwierker ass ongeféier d'selwecht. Nodeems Dir eng Ufro kritt hutt fir eng Datei erofzelueden, hëlt den CDN-Server et eemol vum ursprénglechen Server a gitt et dem Benotzer, gläichzäiteg Cache fir eng spezifizéierter Zäit. All spéider Ufroe ginn aus dem Cache geäntwert. All CDNs hunn Optiounen fir Dateien viraus ze lueden, Cache ze läschen, Cache-Verfall a vill méi ze setzen.

Et geschitt datt et aus engem oder anere Grond néideg ass fir Ären eegene Inhaltsliwwernetz ze organiséieren, an dann - d'Instruktioune fir den nächste Vëlo ze montéieren fir eis hëllefen.

Sammelen an Ariichten Är CDN
Source: Infographic Vektor erstallt vum pikisuperstar - www.freepik.com

Wéini brauch Dir Ären eegene CDN?

Loosst eis op Fäll kucken wou Ären eegene CDN Sënn mécht:

  • wann Dir Sue wëllt spueren, a lafend Käschten och wann Dir bëlleg CDNs benotzt wéi BunnyCDN Betrag op e puer honnert Dollar pro Mount
  • wa mir e permanente Cache oder e Cache ouni Noperen um Server a Kanal kréien wëllen
  • CDN Servicer hunn keng Präsenz Punkten an der Regioun déi Dir braucht
  • All speziell Inhalt Liwwerung Astellunge sinn néideg
  • mir wëllen d'Liwwerung vun dynameschen Inhalt beschleunegen andeems d'Produktiounsservere méi no bei de Benotzer setzen
  • et gëtt Suergen datt en Drëtt Partei CDN Service falsch Informatioun iwwer Benotzerverhalen sammelen oder benotze kann (Moien un net-GDPR-konforme Servicer) oder an aner illegal Aktivitéiten engagéieren

Am meeschten anere Fäll ass et méi ubruecht bestehend fäerdeg Léisungen ze benotzen.

Wat Dir braucht fir unzefänken

Et ass wonnerbar wann Dir Ären eegene autonome System (AS) hutt. Mat et kënnt Dir déi selwecht IP op e puer Serveren an no dëser Instruktioune um Reseau Niveau, Direktnoriichten Benotzer op déi noosten. Et ass derwäert ze soen datt och mat engem /24 Adressblock et méiglech ass en Inhalt Liwwerungsnetz ze bauen. E puer Server Ubidder erlaben Iech Reklamm fir ze benotzen an alle Regiounen déi hinnen verfügbar sinn.

Wann Dir net de gléckleche Besëtzer vun engem Block vun IP Adressen sidd, da fir en einfachen CDN ze starten braucht Dir:

  • Domain Numm oder Subdomain
  • op d'mannst zwee Serveren a verschiddene Regiounen. De Server kann entweder engagéiert oder virtuell sinn
  • GeoDNS Tool. Mat senger Hëllef gëtt e Benotzer, deen op en Domain zougräift, op den nooste Server geleet

Registréiert en Domain an bestellt Serveren

Mat Domainregistrierung ass alles einfach - mir registréieren an all Zone mat all Registrar. Dir kënnt och e Subdomain fir den CDN benotzen, zum Beispill eppes wéi cdn.domainname.com. Tatsächlech wäerte mir an eisem Beispill just dat maachen.

Wat d'Server bestellen, sollten se an de Regiounen a Länner gelount ginn, wou Äre Benotzerpublikum läit. Wann de Projet interkontinental ass, dann ass et praktesch Hosting Ubidder ze wielen déi Serveren op der ganzer Welt ubidden. Beispiller: OVH, Web leasen и 100Tb - fir dedizéierten Serveren, Vultr и DigitalOcean - fir virtuell Wollek*.

Fir eise privaten CDN bestelle mir 3 virtuell Serveren op verschiddene Kontinenter. U Vultr um Server fir $ 5 / Mount mir kréien 25GB SSD Plaze an 1TB Verkéier. Wärend der Installatioun wäerte mir déi lescht Debian auswielen. Eis Serveren:

Sammelen an Ariichten Är CDN FrankfurtIP: 199.247.18.199 Standuert

Sammelen an Ariichten Är CDN ChicagoIP: 149.28.121.123 Standuert

Sammelen an Ariichten Är CDN СингапурIP: 157.230.240.216 Standuert

* Vultr an DigitalOcean verspriechen $ 100 u Kreditt fir Benotzer déi sech mat de Linken an dësem Artikel umellen nodeems se eng Bezuelmethod derbäigesat hunn. Dovunner kritt den Auteur och e klengt Kompliment, dat fir hien elo ganz bedeitend ass. Gitt w.e.g. Verständnis.

GeoDNS opsetzen

Fir sécherzestellen datt wann e Benotzer Zougang zu engem CDN Domain oder Subdomain kritt, hien op de gewënschten (noosten) Server geleet gëtt, brauche mir en DNS Server mat der GeoDNS Funktioun.

De Prinzip an d'Operatiounsprozedur vu GeoDNS ass wéi follegt:

  1. Definéiert d'IP vum Client, deen d'DNS-Ufro geschéckt huet, oder d'IP vum rekursive DNS-Server, dee benotzt gëtt beim Veraarbechtung vun der Client-Ufro. Esou rekursive Servere sinn normalerweis DNS Ubidder.
  2. Dem Client seng IP identifizéiert säi Land oder Regioun. Dofir gi GeoIP-Datebanken benotzt, vun deenen et haut immens vill gëtt. Et ginn e puer gutt fräi Optiounen.
  3. Ofhängeg vum Standuert vum Client gëtt et d'IP Adress vum nooste CDN Server.

DNS Server mat geoDNS Funktioun ka sinn montéiert et selwer, mee et ass besser fäerdeg Léisunge mat engem Netz vun DNS Serveren ronderëm d'Welt ze benotzen an Anycast aus der Këscht:

  • CloudDNS от $ 9.95 / Mount, GeoDNS Tarif, Par défaut gëtt et een DNS Failover
  • Zilore от $ 25 / Mount, DNS Failover aktivéiert
  • Amazon Route 53 от $ 35 / Mount fir reng 50M Geo-Ufroen. DNS Failover gëtt separat berechent
  • DNS Made Easy от $ 125 / Mount, ginn et 10 DNS Failovers
  • Cloudflare, d'Funktioun "Geo Steering" ass an Enterprise Tariffer verfügbar

Wann Dir GeoDNS bestellt, sollt Dir op d'Zuel vun den Ufroen, déi am Tarif abegraff sinn, oppassen a berücksichtegen datt d'tatsächlech Zuel vun Ufroen un d'Domain vill Mol méi héich sinn wéi erwaart. Millioune Spannen, Scanner, Spammer an aner béis Séilen schaffen onermiddlech.

Bal all DNS Servicer enthalen am Präis en onverzichtbare Service fir en CDN ze bauen - DNS Failover. Mat senger Hëllef kënnt Dir d'Iwwerwaachung vun der Operatioun vun Äre Serveren opstellen an, wann et keng Zeeche vum Liewen sinn, automatesch d'Adress vum net-schaffende Server an DNS-Äntwerten mat engem Backup ersetzen.

Fir eisen CDN ze bauen wäerte mir benotzen CloudDNS, GeoDNS Tarif.

Loosst eis eng nei DNS Zone an Ärem perséinleche Kont addéieren, wat Är Domain uginn. Wa mir e CDN op engem Subdomain bauen, an den Haaptdomän ass schonn am Gebrauch, dann direkt nodeems Dir d'Zone bäigefüügt hutt, vergiesst net déi existent schaffend DNS-Records derbäi ze ginn. De nächste Schrëtt ass e puer A-Records fir den CDN Domain / Subdomain ze kreéieren, jidderee gëtt fir d'Regioun benotzt déi mir spezifizéiert hunn. Dir kënnt Kontinenter oder Länner als Regiounen uginn; Ënnerregiounen si verfügbar fir d'USA a Kanada.

An eisem Fall gëtt den CDN op engem Subdomain erhéicht cdn.sayt.in. Andeems Dir eng Zone bäidréit gesot.in, loosst eis den éischten A-Rekord fir den Ënnerdomain erstellen an all Nordamerika op de Server zu Chicago dirigéieren:

Sammelen an Ariichten Är CDN
Loosst eis d'Aktioun fir aner Regiounen widderhuelen, net ze vergiessen eng Entrée fir d'Standardregiounen ze kreéieren. Hei ass wat Dir um Enn kritt:

Sammelen an Ariichten Är CDN

Déi lescht Standardentrée am Screenshot bedeit datt all onspezifizéierte Regiounen (an dëst sinn Europa, Afrika, Satellite Internet Benotzer, etc.) op de Server zu Frankfurt geschéckt ginn.

Dëst fäerdeg de Basis DNS-Setup. Alles wat bleift ass op d'Websäit vum Domain Registrar ze goen an déi aktuell Domain NSs ze ersetzen mat deenen ausgestallt vu ClouDNS. A wärend d'NSs aktualiséiert ginn, preparéiere mir d'Server.

Installatioun vun SSL Certificaten

Eis CDN funktionnéiert iwwer HTTPS, also wann Dir schonn SSL Certificaten fir en Domain oder Subdomain hutt, lued se op all Server erop, zum Beispill an de Verzeichnis /etc/ssl/yourdomain/

Wann Dir keng Certificaten hutt, kënnt Dir e gratis vu Let's Encrypt kréien. Perfekt fir dës ACME Shell Skript. De Client ass bequem an einfach ze konfiguréieren, an am wichtegsten, et erlaabt Iech en Domain / Subdomain mat DNS iwwer d'API vu ClouDNS ze validéieren.

Mir installéieren acme.sh nëmmen op ee vun de Serveren - Europäesch 199.247.18.199, aus deenen d'Zertifikater op all aner kopéiert ginn. Fir ze installéieren, maacht:

root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc

Wärend der Installatioun vum Skript gëtt eng CRON Aufgab erstallt fir weider Certificaten ze aktualiséieren ouni eis Participatioun.

Domain Verifizéierung wann Dir e Certificat ausgëtt gëtt iwwer DNS mat der API duerchgefouert, also an Ärem ClouDNS perséinleche Kont am Reseller API Menu musst Dir en neien API Benotzer erstellen an e Passwuert dofir setzen. Mir schreiwen déi resultéierend Auth-ID mat Passwuert an enger Datei ~/.acme.sh/dnsapi/dns_cloudns.sh (net mat der Datei ze verwiesselen dns_clouddns.sch). Hei sinn d'Zeilen déi net kommentéiert a geännert musse ginn:

CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<пароль>"

Loosst eis elo en SSL Zertifika froen fir cdn.sayt.in

root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"

An de Parameteren, fir d'Zukunft, hu mir e Kommando spezifizéiert fir automatesch d'Webserverkonfiguratioun no all Zertifikatvaliditéitsaktualiséierung an Zukunft nei ze lueden.

De ganze Prozess fir en Zertifika ze kréien kann bis zu 2 Minutten daueren, ënnerbrach et net. Wann en Domain Validatioun Feeler geschitt, probéiert de Kommando nach eng Kéier auszeféieren. Um Enn wäerte mir gesinn wou d'Zertifikater erofgeluede goufen:

Sammelen an Ariichten Är CDN

Loosst eis dës Weeër erënneren; Si musse spezifizéiert ginn wann Dir den Zertifika op aner Server kopéiert, souwéi an de Webserver-Astellungen. Mir oppassen net op de Feeler beim Neiluede vun Nginx Konfiguratiounen - op engem komplett konfiguréierten Server gëtt et net beim Update vun Zertifikater.

Alles wat fir eis mat SSL bleift ass de kritt Zertifikat op zwee aner Serveren ze kopéieren, de Wee op d'Dateien ze konservéieren. Loosst eis déiselwecht Verzeichnisser op jiddereng vun hinnen erstellen an eng Kopie maachen:

root@cdn:~# mkdir -p /root/.acme.sh/cdn.sayt.in/
root@cdn:~# scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/

Fir Certificaten regelméisseg ze aktualiséieren, erstellen mir eng deeglech CRON Aufgab op béide Server mam Kommando:

scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload

An dësem Fall muss den Zougang zum Fernquellserver konfiguréiert sinn duerch Schlëssel, d.h. ouni Passwuert aginn. Vergiesst net dëst ze maachen.

Nginx installéieren an konfiguréieren

Fir statesch Inhalter ze déngen, benotze mir Nginx konfiguréiert als Caching Proxy Server. Loosst eis d'Packagelëscht aktualiséieren an se op allen dräi Serveren installéieren:

root@cdn:~# apt update
root@cdn:~# apt install nginx

Amplaz vum Standard benotze mir d'Konfiguratioun vum Spoiler hei ënnen:
nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 4096;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log off;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_vary on;
    gzip_types text/plain application/javascript text/javascript text/css application/json application/xml text/xml application/rss+xml;
    gunzip on;            

    proxy_temp_path    /var/cache/tmp;
    proxy_cache_path   /var/cache/cdn levels=1:2 keys_zone=cdn:64m max_size=20g inactive=7d;
    proxy_cache_bypass $http_x_update;

server {
  listen 443 ssl;
  server_name cdn.sayt.in;

  ssl_certificate /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.cer;
  ssl_certificate_key /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.key;

  location / {
    proxy_cache cdn;
    proxy_cache_key $uri$is_args$args;
    proxy_cache_valid 90d;
    proxy_pass https://sayt.in;
    }
  }
}

An der Configuratioun änneren mir:

  • max_Gréisst - Cache Gréisst net méi wéi de verfügbaren Disk Space
  • inaktiv - Späicherzäit fir Cache Daten déi net zougänglech sinn
  • ssl_zertifikat и ssl_certificate_key - Weeër fir SSL Zertifikat a Schlësseldateien
  • proxy_cache_valid - Späicherzäit vun cachedaten
  • proxy_pass - d'Adress vum ursprénglechen Server, aus deem den CDN Dateie fir Cache freet. An eisem Beispill ass dëst gesot.in

Wéi Dir kënnt gesinn, ass alles einfach. Déi eenzeg Schwieregkeet kann optrieden fir d'Cachingzäit ze setzen wéinst der Ähnlechkeet vun den Direktiven inaktiv и proxy_cache_valid. Loosst eis se mat eisem Beispill kucken. Dëst ass wat geschitt wann inaktiv = 7d и proxy_cache_valid 90d:

  • wann d'Ufro net bannent 7 Deeg widderholl gëtt, ginn d'Donnéeë no dëser Period aus dem Cache geläscht
  • wann d'Demande op d'mannst eemol all 7 Deeg widderholl gëtt, da ginn d'Donnéeën am Cache no 90 Deeg als verréckt ugesinn a mat der nächster Ufro wäert Nginx se aktualiséieren, se vum ursprénglechen Server huelen

Fäerdeg ze änneren nginx.conf, lued d'Konfiguratioun nei:

root@cdn:~# service nginx reload

Eis CDN ass komplett prett. Fir $ 15 / Mount. mir krut Punkten vun Präsenz op dräi Kontinenter an 3 TB Verkéier: 1 TB an all Plaz.

Kontrolléiert d'Operatioun vum CDN

Loosst eis Pings zu eisem CDN vu verschiddene geographesche Plazen kucken. All Ping Servicer si gëeegent fir dëst.

Startpunkt
Host
IP
Moyenne Zeit, ms

Däitschland Berlin
cdn.sayt.in
199.247.18.199
9.6

Holland, Amsterdam
cdn.sayt.in
199.247.18.199
10.1

Frankräich Paräis
cdn.sayt.in
199.247.18.199
16.3

Vereenegt Kinnekräich, London
cdn.sayt.in
199.247.18.199
14.9

Kanada, Toronto
cdn.sayt.in
149.28.121.123
16.2

USA, San Francisco
cdn.sayt.in
149.28.121.123
52.7

USA, Dallas
cdn.sayt.in
149.28.121.123
23.1

USA, Chicago
cdn.sayt.in
149.28.121.123
2.6

USA, New York
cdn.sayt.in
149.28.121.123
19.8

Сингапур
cdn.sayt.in
157.230.240.216
1.7

Japan Tokyo
cdn.sayt.in
157.230.240.216
74.8

Australien, Sydney
cdn.sayt.in
157.230.240.216
95.9

D'Resultater si gutt. Loosst eis elo en Testbild an der Wuerzel vun der Haaptsäit setzen test.jpg a kontrolléiert seng Downloadgeschwindegkeet iwwer CDN. Et gëtt gesot - gemaach. Inhalt gëtt séier geliwwert.

Loosst eis e klenge Skript schreiwen am Fall wou mir de Cache um CDN Punkt wëllen läschen.
purge.sh

#!/bin/bash
if [ -z "$1" ]
then
    echo "Purging all cache"
    rm -rf /var/cache/cdn/*
else
    echo "Purging $1"
    FILE=`echo -n "$1" | md5sum | awk '{print $1}'`
    FULLPATH=/var/cache/cdn/${FILE:31:1}/${FILE:29:2}/${FILE}
    rm -f "${FULLPATH}"
fi

Fir de ganze Cache ze läschen, lafen se einfach; Dir kënnt eng separat Datei wéi dës läschen:

root@cdn:~# ./purge.sh /test.jpg

Amplaz vu Conclusiounen

Schlussendlech wëll ech e puer nëtzlech Tipps ginn fir direkt iwwer de Rake ze goen, deen mir eemol Kappwéi gemaach huet:

  • Fir d'CDN Feeler Toleranz ze erhéijen, ass et recommandéiert DNS Failover ze konfiguréieren, wat hëlleft séier den A Rekord am Fall vun engem Serverfehler z'änneren. Dëst gëtt am Domain DNS Records Kontrollpanel gemaach
  • Siten mat enger grousser geographescher Erreeche wäerten ouni Zweifel eng grouss Zuel vun CDN Punkten erfuerderen, awer loosst eis net fanatesch sinn. Wahrscheinlech wäert de Benotzer net e wesentlechen Ënnerscheed am Verglach zu engem bezuelte CDN bemierken wann Dir Serveren op 6-7 Plazen placéiert: Europa, Nordamerika (Osten), Nordamerika (West), Singapur, Australien, Hong Kong oder Japan
  • Heiansdo erlaben Hoster d'Benotzung vu gelounte Serveren fir CDN Zwecker net. Dofir, wann Dir op eemol décidéiert en Inhalt Liwwerung Netzwierk als Service z'installéieren, vergiesst net d'Regele vun Ärem spezifesche Hosting Provider am Viraus ze liesen
  • Entdeckt Ënnerwaasser Kommunikatiouns Kaartvirzestellen wéi d'Kontinente verbonne sinn an dëst Rechnung huelen wann Dir en Inhalt Liwwerungsnetz bauen
  • Probéieren ze kontrolléieren Pings aus verschiddene Plazen op Är Serveren. Op dës Manéier kënnt Dir d'Regiounen am nootste bei CDN Punkten gesinn a GeoDNS méi korrekt konfiguréieren
  • Ofhängeg vun den Aufgaben, wier et nëtzlech fir Nginx fir spezifesch Cache-Ufuerderungen unzepassen an d'Laascht op de Server ze berücksichtegen. Artikelen iwwer Nginx Cache hunn mir vill mat dësem gehollef - hei a Beschleunegung vun der Aarbecht ënner schwéier Laascht: hei и hei

Source: will.com