CDN-i kogumine ja seadistamine

Sisu edastamise vĂ”rke (CDN-e) kasutavad veebisaidid ja rakendused peamiselt staatiliste elementide laadimise kiirendamiseks. See juhtub failide vahemĂ€llu salvestamisel erinevates geograafilistes piirkondades asuvates CDN-serverites. CDN-i kaudu andmeid kĂŒsides saab kasutaja need lĂ€himast serverist.

KĂ”igi sisuedastusvĂ”rkude tööpĂ”himĂ”te ja funktsionaalsus on ligikaudu samad. PĂ€rast faili allalaadimise taotluse saamist vĂ”tab CDN-server selle ĂŒhekordselt algsest serverist ja annab selle kasutajale, sĂ€ilitades samal ajal selle kindlaksmÀÀratud ajavahemikuks vahemĂ€llu. KĂ”ikidele jĂ€rgnevatele pĂ€ringutele vastatakse vahemĂ€lust. KĂ”ikidel CDN-idel on vĂ”imalused failide eellaadimiseks, vahemĂ€lu tĂŒhjendamiseks, vahemĂ€lu aegumise mÀÀramiseks ja palju muud.

Juhtub, et ĂŒhel vĂ”i teisel pĂ”hjusel on vaja korraldada oma sisu edastamise vĂ”rgustik ja siis - olgu meile abiks jĂ€rgmise ratta kokkupanemise juhend.

CDN-i kogumine ja seadistamine
Allikas: Pikisuperstar loodud infograafiline vektor — www.freepik.com

Millal vajate oma CDN-i?

Vaatame juhtumeid, kus oma CDN-i kÀitamine on mÔttekas:

  • kui soovite sÀÀsta raha ja jooksvaid kulusid isegi siis, kui kasutate selliseid odavaid CDN-e JĂ€nkuCDN ulatub mitmesaja dollarini kuus
  • kui tahame saada pĂŒsivat vahemĂ€lu vĂ”i vahemĂ€lu ilma naabriteta serveris ja kanalis
  • CDN-i teenustel pole teie vajalikus piirkonnas kohalolekupunkte
  • Vaja on mis tahes spetsiaalseid sisu edastamise seadeid
  • tahame kiirendada dĂŒnaamilise sisu edastamist, asetades tootmisserverid kasutajatele lĂ€hemale
  • on mure, et kolmanda osapoole CDN-teenus vĂ”ib valesti koguda vĂ”i kasutada teavet kasutaja kĂ€itumise kohta (tere, GDPR-ga mitteĂŒhilduvad teenused) vĂ”i osaleda muus ebaseaduslikus tegevuses

Enamikul muudel juhtudel on Ôigem kasutada olemasolevaid valmislahendusi.

Mida peate alustama

See on suurepĂ€rane, kui teil on oma autonoomne sĂŒsteem (AS). Sellega saate mÀÀrata sama IP mitmele serverile ja vastavalt sellele juhisele vĂ”rgu tasemel suunata kasutajad lĂ€himasse. Tasub öelda, et isegi /24 aadressiplokiga on vĂ”imalik ĂŒles ehitada sisu edastamise vĂ”rk. MĂ”ned serveripakkujad lubavad teil reklaamida kasutamiseks kĂ”igis neile saadaolevates piirkondades.

Kui te pole IP-aadresside ploki Ônnelik omanik, vajate lihtsa CDN-i kÀivitamiseks:

  • domeeninimi vĂ”i alamdomeen
  • vĂ€hemalt kaks serverit erinevates piirkondades. Server vĂ”ib olla kas pĂŒhendatud vĂ”i virtuaalne
  • geoDNS-i tööriist. Selle abiga suunatakse domeenile ligipÀÀsev kasutaja lĂ€himasse serverisse

Registreerige domeen ja tellige servereid

Domeeni registreerimisega on kĂ”ik lihtne – registreerime end igas tsoonis mis tahes registripidaja juures. CDN-i jaoks saate kasutada ka alamdomeeni, nĂ€iteks midagi sellist cdn.domainname.com. Tegelikult teeme meie nĂ€ites just seda.

Mis puutub serverite tellimisse, siis need tuleks rentida nendes piirkondades ja riikides, kus teie kasutajate vaatajaskond asub. Kui projekt on kontinentidevaheline, siis on mugav valida hostingu pakkujad, kes pakuvad servereid ĂŒle kogu maailma. NĂ€ited: ovh, Leaseweb Đž 100Tb - spetsiaalsete serverite jaoks, Vultr Đž DigitalOcean — virtuaalse pilve* jaoks.

Meie privaatse CDN-i jaoks tellime 3 virtuaalserverit erinevatel kontinentidel. U Vultr jaoks serveris 5 dollarit kuus me saame 25GB SSD kohad ja 1TB liiklust. Installimise ajal valime uusima Debiani. Meie serverid:

CDN-i kogumine ja seadistamine Frankfurt, ip: 199.247.18.199

CDN-i kogumine ja seadistamine Chicago, ip: 149.28.121.123

CDN-i kogumine ja seadistamine Singapur, ip: 157.230.240.216

*Vultr ja DigitalOcean lubavad 100 dollarit krediiti kasutajatele, kes registreeruvad, kasutades makseviisi lisamist, kasutades selle artikli linke. Sellest saab autor ka vÀikese komplimendi, mis on tema jaoks praegu vÀga mÀrgiline. Palun olge mÔistvad.

GeoDNS-i seadistamine

Tagamaks, et kui kasutaja pöördub CDN-i domeeni vÔi alamdomeeni poole, suunatakse ta soovitud (lÀhimale) serverile, vajame geoDNS-funktsiooniga DNS-serverit.

GeoDNS-i pÔhimÔte ja tööprotseduur on jÀrgmine:

  1. MÀÀrab DNS-pÀringu saatnud kliendi IP-aadressi vÔi kliendipÀringu töötlemisel kasutatava rekursiivse DNS-serveri IP-aadressi. Sellised rekursiivsed serverid on tavaliselt DNS-i pakkujad.
  2. Kliendi IP tuvastab tema riigi vÔi piirkonna. Selleks kasutatakse GeoIP andmebaase, mida tÀnapÀeval on vÀga palju. On mÔned head tasuta valikud.
  3. SÔltuvalt kliendi asukohast annab see talle lÀhima CDN-serveri IP-aadressi.

GeoDNS-funktsiooniga DNS-server vĂ”ib olla pane see ise kokku, kuid parem on kasutada valmislahendusi DNS-serverite vĂ”rguga ĂŒle maailma ja Igatahes kastist:

  • CloudDNS pĂ€rit 9.95 dollarit kuus, GeoDNS-i tariif, vaikimisi on ĂŒks DNS-i tĂ”rkevahetus
  • Zilore pĂ€rit 25 dollarit kuus, DNS-i tĂ”rkevahetus lubatud
  • Amazoni tee 53 pĂ€rit 35 dollarit kuus puhta 50 miljoni geopĂ€ringu jaoks. DNS-i tĂ”rkevahetuse eest tasutakse eraldi
  • DNS lihtsaks tehtud pĂ€rit 125 dollarit kuus, on 10 DNS-i tĂ”rkevahetust
  • CloudFlare, on funktsioon „Geo Steering” saadaval ettevĂ”tte tariifides

GeoDNS-i tellides tuleks tÀhelepanu pöörata tariifis sisalduvate pÀringute arvule ning arvestada sellega, et tegelik pÀringute arv domeenile vÔib olla oodatust kordades suurem. Miljonid Àmblikud, skannerid, rÀmpspostitajad ja muud kurjad vaimud töötavad vÀsimatult.

Peaaegu kÔik DNS-teenused sisaldavad hinnas asendamatut teenust CDN-i loomiseks - DNS-i tÔrkevahetus. Selle abil saate seadistada oma serverite töö jÀlgimise ja elumÀrkide puudumisel asendada DNS-vastustes mittetöötava serveri aadressi automaatselt varu aadressiga.

CDN-i loomiseks kasutame CloudDNS, GeoDNS-i tariif.

Lisame teie isiklikule kontole uue DNS-tsooni, mis nĂ€itab teie domeeni. Kui ehitame CDN-i alamdomeenile ja pĂ”hidomeen on juba kasutusel, siis Ă€rge unustage kohe pĂ€rast tsooni lisamist lisada olemasolevad töötavad DNS-kirjed. JĂ€rgmise sammuna tuleb luua CDN-i domeeni/alamdomeeni jaoks mitu A-kirjet, millest igaĂŒht kasutatakse meie mÀÀratud piirkonna jaoks. Piirkondadena saate mÀÀrata mandreid vĂ”i riike; alampiirkonnad on saadaval USA ja Kanada jaoks.

Meie puhul tÔstetakse CDN alamdomeenil cdn.sayt.in. Tsooni lisamisega sayt.in, loome alamdomeeni jaoks esimese A-kirje ja suuname kogu PÔhja-Ameerika Chicagos asuvasse serverisse:

CDN-i kogumine ja seadistamine
Kordame toimingut teiste piirkondade jaoks, unustamata luua vaikepiirkondade jaoks ĂŒht kirjet. Siin on see, mida saate lĂ”puks:

CDN-i kogumine ja seadistamine

Ekraanipildi viimane vaikekirje tÀhendab, et kÔik mÀÀramata piirkonnad (ja need on Euroopa, Aafrika, satelliit-Interneti kasutajad jne) saadetakse Frankfurdis asuvasse serverisse.

See lĂ”petab DNS-i pĂ”hiseadistuse. JÀÀb ĂŒle minna domeeniregistripidaja veebisaidile ja asendada praegused domeeni NS-id ClouDNS-i vĂ€ljastatud omadega. Ja NS-ide uuendamise ajal valmistame servereid ette.

SSL-sertifikaatide installimine

Meie CDN töötab HTTPS-i kaudu, nii et kui teil on domeeni vĂ”i alamdomeeni jaoks juba SSL-sertifikaadid, laadige need ĂŒles kĂ”ikidesse serveritesse, nĂ€iteks kataloogi /etc/ssl/yourdomain/

Kui teil sertifikaate pole, saate selle tasuta hankida Let's Encrypti kaudu. Ideaalne selleks ACME Shelli skript. Klienti on mugav ja lihtne seadistada ning mis kĂ”ige tĂ€htsam – see vĂ”imaldab DNS-i abil domeeni/alamdomeeni valideerida API kaudu ClouDNS-ist.

Installime acme.sh ainult ĂŒhte serverisse - Euroopa 199.247.18.199, kust sertifikaadid kopeeritakse kĂ”igile teistele. Installimiseks toimige jĂ€rgmiselt.

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

Skripti installimise ajal luuakse CRON-i ĂŒlesanne sertifikaatide edasiseks vĂ€rskendamiseks ilma meie osaluseta.

Domeeni kontrollimine sertifikaadi vĂ€ljastamisel toimub DNS-i kaudu API abil, seega peate oma ClouDNS-i isiklikul kontol edasimĂŒĂŒja API menĂŒĂŒs looma uue API kasutaja ja mÀÀrama sellele parooli. Kirjutame saadud auth-id koos parooliga faili ~/.acme.sh/dnsapi/dns_cloudns.sh (mitte segi ajada failiga dns_clouddns.sh). Siin on read, mida tuleb kommenteerida ja muuta:

CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<ĐżĐ°Ń€ĐŸĐ»ŃŒ>"

NĂŒĂŒd taotleme SSL-sertifikaati cdn.sayt.in

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

Tuleviku parameetrites mÀÀrasime kÀsu veebiserveri konfiguratsiooni automaatseks uuesti laadimiseks pÀrast iga sertifikaadi kehtivuse vÀrskendust tulevikus.

Kogu sertifikaadi saamise protsess vÔib kesta kuni 2 minutit, Àrge katkestage seda. Kui ilmneb domeeni valideerimise tÔrge, proovige kÀsku uuesti kÀivitada. LÔpus nÀeme, kust sertifikaadid alla laaditi:

CDN-i kogumine ja seadistamine

Pidagem neid teid meeles, need tuleb mÀÀrata nii sertifikaadi kopeerimisel teistesse serveritesse kui ka veebiserveri seadetes. Me ei pööra tÀhelepanu Nginxi konfiguratsioonide uuesti laadimise veale - tÀielikult konfigureeritud serveris seda sertifikaatide vÀrskendamisel ei kuvata.

Meil jÀÀb SSL-iga ĂŒle vaid kopeerida saadud sertifikaat kahte teise serverisse, sĂ€ilitades failide tee. Loome igale neist samad kataloogid ja teeme koopia:

root@cdn:~# mkdir -p /root/.acme.sh/cdn.sayt.in/
root@cdn:~# scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/

Sertifikaatide korrapĂ€raseks vĂ€rskendamiseks loome mĂ”lemas serveris igapĂ€evase CRON-i ĂŒlesande kĂ€suga:

scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload

Sellisel juhul tuleb konfigureerida juurdepÀÀs kaugallika serverile vĂ”tme jĂ€rgi, st. ilma parooli sisestamata. Ärge unustage seda teha.

Nginxi installimine ja konfigureerimine

Staatilise sisu teenindamiseks kasutame vahemÀllu salvestava puhverserverina konfigureeritud Nginxi. VÀrskendame pakettide loendeid ja installime selle kÔigisse kolme serverisse:

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

Vaikimisi asemel kasutame alloleva spoileri konfiguratsiooni:
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;
    }
  }
}

Konfiguratsioonis muudame:

  • max_size — vahemĂ€lu maht ei ĂŒleta saadaolevat kettaruumi
  • inaktiivne — vahemĂ€llu salvestatud andmete salvestusaeg, millele pole juurde pÀÀsetud
  • ssl_certificate Đž ssl_certificate_key — SSL-sertifikaadi ja vĂ”tmefailide teed
  • proxy_cache_valid — vahemĂ€llu salvestatud andmete salvestusaeg
  • puhverserveri_pÀÀs — algse serveri aadress, kust CDN taotleb failide vahemĂ€llu salvestamist. Meie nĂ€ites on see sayt.in

Nagu nÀete, on kÔik lihtne. Ainus raskus vÔib tekkida vahemÀllu salvestamise aja mÀÀramisel direktiivide sarnasuse tÔttu inaktiivne О proxy_cache_valid. Vaatame neid meie nÀitel. See juhtub siis, kui mitteaktiivne=7d О proxy_cache_valid 90d:

  • kui taotlust 7 pĂ€eva jooksul ei korrata, kustutatakse andmed pĂ€rast seda perioodi vahemĂ€lust
  • kui taotlust korratakse vĂ€hemalt kord 7 pĂ€eva jooksul, loetakse vahemĂ€lus olevad andmed 90 pĂ€eva pĂ€rast aegunuks ja jĂ€rgmise pĂ€ringuga uuendab Nginx seda, vĂ”ttes need algsest serverist

PÀrast toimetamise lÔpetamist nginx.conf, laadige konfiguratsioon uuesti:

root@cdn:~# service nginx reload

Meie CDN on tÀielikult valmis. 15 dollari eest kuus. saime kohalolekupunkte kolmel kontinendil ja 3 TB liiklust: 1 TB igas asukohas.

CDN-i töö kontrollimine

Vaatame erinevatest geograafilistest asukohtadest meie CDN-i pingisid. Selleks sobivad kÔik pingiteenused.

Alguspunkt
Host
IP
Keskmine aeg, ms

Saksamaa Berliin
cdn.sayt.in
199.247.18.199
9.6

Holland, Amsterdam
cdn.sayt.in
199.247.18.199
10.1

Prantsusmaa Pariis
cdn.sayt.in
199.247.18.199
16.3

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

Singapur
cdn.sayt.in
157.230.240.216
1.7

Jaapan Tokyo
cdn.sayt.in
157.230.240.216
74.8

Austraalia, Sydney
cdn.sayt.in
157.230.240.216
95.9

Tulemused on head. NĂŒĂŒd asetame pĂ”hisaidi juurtesse testpildi test.jpg ja kontrollige selle allalaadimiskiirust CDN-i kaudu. Öeldakse- tehtud. Sisu tarnitakse kiiresti.

Kirjutame vĂ€ikese skripti juhuks, kui tahame CDN-punkti vahemĂ€lu tĂŒhjendada.
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

Kogu vahemÀlu kustutamiseks kÀivitage see; saate kustutada eraldi faili jÀrgmiselt:

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

JĂ€relduste asemel

LĂ”petuseks tahan anda mĂ”ned kasulikud nĂ€punĂ€ited, et kohe ĂŒle astuda kunagi peavalu valmistanud rehast:

  • CDN-i tĂ”rketaluvuse suurendamiseks on soovitatav konfigureerida DNS-i tĂ”rkevahetus, mis aitab serveri rikke korral kiiresti A-kirjet muuta. Seda tehakse domeeni DNS-kirjete juhtpaneelil
  • Laia geograafilise ulatusega saidid nĂ”uavad kahtlemata suurt hulka CDN-punkte, kuid Ă€rgem olgem fanaatilised. TĂ”enĂ€oliselt ei mĂ€rka kasutaja olulist erinevust tasulise CDN-iga vĂ”rreldes, kui paigutate serverid 6-7 kohta: Euroopas, PĂ”hja-Ameerikas (ida), PĂ”hja-Ameerikas (lÀÀnes), Singapuris, Austraalias, Hongkongis vĂ”i Jaapanis.
  • MĂ”nikord ei luba hostid CDN-i eesmĂ€rkidel kasutada renditud servereid. SeetĂ”ttu, kui otsustate ootamatult teenusena kasutusele vĂ”tta sisuedastusvĂ”rgu, Ă€rge unustage eelnevalt lugeda oma konkreetse hostiteenuse pakkuja reegleid
  • Avastage veealuse side kaartkujutleda, kuidas mandrid on omavahel ĂŒhendatud, ja arvestada sellega sisuedastusvĂ”rgu ehitamisel
  • Proovige kontrollida pingid erinevatest kohtadest teie serveritele. Nii nĂ€ete CDN-punktidele lĂ€himaid piirkondi ja GeoDNS-i Ă”igemini seadistada
  • SĂ”ltuvalt ĂŒlesannetest oleks kasulik kohandada Nginxi konkreetsete vahemĂ€llu salvestamise nĂ”uete ja serveri koormusega. Artiklid Nginxi vahemĂ€lu kohta aitasid mind selles palju - siin ja töö kiirendamine suurte koormuste korral: siin Đž siin

Allikas: www.habr.com