Sisu edastamise vĂ”rgud (CDN) kasutatakse peamiselt veebisaitidel ja rakendustes staatiliste elementide laadimise kiirusel. See toimub failide vahemĂ€llu salvestamise teel CDN-serverites, mis asuvad erinevates geograafilistes piirkondades. Kui kasutaja kĂŒsib andmeid lĂ€bi CDN-i, saab ta need lĂ€himast serverist.
Kuna tööpÔhimÔte ja funktsioonid on kÔigil sisu edastamise vÔrkudel enam-vÀhem samad, vÔtab CDN-server failitaotluse saabudes korra faili originaalserverist ja edastab selle kasutajale, samal ajal vahemÀllu salvestades. KÔik jÀrgnevad taotlused saavad vastuse vahemÀlust. KÔigil CDN-idel on failide eelneva laadimise, vahemÀlu puhastamise, selle sÀilitamise aja seadistamise ja palju muud vÔimalused.
MĂ”nikord on tarvis korraldada oma sisu edastamise vĂ”rk ning sel juhul â olgu meie abiks jĂ€rgmise ratta monteerimise juhend.

Allikas:
Millal on vajalik oma CDN
Vaatleme olukordi, kus oma CDN-i kÀivitamine on mÔistlik:
- kui soovite kokku hoida, aga praegused kulud isegi odavate CDNide nagu ulatuvad mitmesaja dollarini kuus
- kui soovime saada pĂŒsivat vahemĂ€lu vĂ”i vahemĂ€lu ilma serveri ja kanaliga naabriteta
- teie sihtriigis ei ole CDN teenustel kohaloleku punkte
- on vajalikud mingid erilised sisu edastamise seadistused
- soovime kiirendada dĂŒnaamilise sisu edastamist, paigutades tootmisserverid lĂ€hemale kasutajatele
- on mure, et kolmas osapool CDN teenus vÔib ebaseaduslikult koguda vÔi kasutada teavet kasutajate kÀitumise kohta (tere GDPR-iga kooskÔlastatud teenustele) vÔi tegeleda muude ebaseaduslike tegevustega
Enamikul teistel juhtudel on mÔttekam kasutada olemasolevaid lahendusi.
Mida on vaja kÀivitamiseks
Tore, kui teil on oma iseseisev sĂŒsteem (AS). Sellega on vĂ”imalik mÀÀrata sama IP mitmele serverile ja vĂ”rgu tasemel suunata kasutajad lĂ€himasse. Tuleb vĂ€lja tuua, et isegi /24 aadressiblokiga on vĂ”imalik luua sisu edastamise vĂ”rgustik. MĂ”ned serveriteenuse osutajad vĂ”imaldavad teha kuulutuse kĂ”igis nende saadaval olevates piirkondades.
Kui te ei ole Ônnelik IP aadresside bloki omanik, siis simple CDN-i kÀivitamiseks vajate:
- domeeninime vÔi alamdomeeni
- vĂ€hemalt kahte serverit erinevates piirkondades. Server vĂ”ib olla nii pĂŒhendatud kui ka virtuaalne
- geoDNS tööriist. Selle abiga suunatakse kasutaja, kui ta pöördub domeeni poole, lÀhimasse serverisse
Registreerime domeeni ja tellime serverid
Domeeni registreerimine on lihtne â registreerige see igas tsoonis igasuguse registri kaudu. Samuti saab CDN-i jaoks kasutada alamdomeeni, nĂ€iteks midagi sellist nagu cdn.domeeninimi.com. Meie nĂ€ite puhul teeme just nii.
Mis puudutab serverite tellimist â need tuleks rentida regioonides ja riikides, kus asub teie kasutajaskond. Kui projekt on rahvusvaheline, on mugav valida hostinguteenuse pakkujad, kes pakuvad servereid ĂŒle kogu maailma. NĂ€ited: , ja â pĂŒhendatud serveritele, ja â virtuaalsete pilvserverite jaoks*.
Meie eraldi CDN jaoks tellime 3 virtuaalset serverit erinevatesse mandritesse. Vultr serveris hinnaga $5/kuus saame 25GB SSD ruumi ja 1TB liiklust. Paigaldamisel valime viimase Debian'i versiooni. Meie serverid:
Frankfurt, ip: 199.247.18.199
Chicago, ip: 149.28.121.123
Singapur, ip: 157.230.240.216
* Vultr ja DigitalOcean lubavad $100 krediiti kasutajatele, kes registreeruvad artiklis toodud linkide kaudu, kohe pÀrast makseviisi lisamist. Autor saab ka sellest vÀikese boonuse, mis on talle praegu vÀga oluline. Palun olge mÔistvad.
Seame ĂŒles geoDNS
Et suunata kasutaja CDN-i domeeni vÔi subdomeeni kaudu Ôigesse (temale lÀhimasse) serverisse, on meil vaja DNS-serverit, millel on geoDNS funktsioon.
geoDNS-i pÔhimÔte ja töökorraldus on jÀrgmised:
- MÀÀrab IP-aadressi kliendilt, kes saatis DNS-pÀringu, vÔi rekursiivse DNS-serveri IP-aadressi, mida kasutatakse kliendipÀringu töötlemisel. Sellised rekursiivsed serverid on tavaliselt teenusepakkujate DNS-id.
- Kliendi IP-aadressi pÔhjal tuvastab selle riigi vÔi regiooni. Selleks kasutatakse GeoIP andmebaase, mida on tÀnapÀeval tohutult palju. On olemas ka hÀid .
- Kliendi asukohast sÔltuvalt antakse talle lÀhima CDN serveri IP-aadress.
DNS-server geolocation funktsiooniga geoDNS saab , kuid parem on kasutada valmis lahendusi, kus on DNS-serverid ĂŒle kogu maailma ja valmis lahendused:
- alates $9.95/kuus, GeoDNS plaanis on juba ĂŒks DNS Failover
- alates $25/kuus, sisalduv DNS Failover
- alates $35/kuus 50M geokĂŒlastuse eest. DNS Failover arvestatakse eraldi
- alates $125/kuus, sisaldab 10 DNS Failoverit
- , âGeo Steeringâ funktsioon on saadaval Enterprise plaanides
geoDNS tellimisel on oluline jÀlgida plaani sisaldavate pöördumiste arvu ja arvestada, et tegelik domeeni pöördumiste arv vÔib olla mitu korda suurem, kui oodata. Miljonid Àmblikud, skÀnnerid, rÀmpspostitajad ja muud sarnased töötavad ööpÀevaringselt.
Peaaegu kĂ”igil DNS-teenustel on hinnas sisaldatud CDN-i ĂŒlesehitamiseks vajalik teenus â DNS Failover. Sellega saab seadistada oma serverite töö jĂ€lgimise ning juhul, kui elu mĂ€rke ei ole, asendada automaatselt DNS-i vastustes mitteaktiivse serveri aadress varurdserveriga.
Meie CDN-i ehitamiseks kasutame , GeoDNS plaan.
Loo meie isiklikus kabinetis uus DNS-tsoon, mĂ€rkides oma domeeni. Kui CDN ehitatakse alamdomeenile ja peamine domeen on juba kasutusel, siis peale tsooni lisamist Ă€rge unustage lisada olemasolevaid töötavaid DNS-kirjeid. JĂ€rgmine samm on luua CDN-ile domeeni/alamdomeeni jaoks mitu A-kirjet, millest igaĂŒks rakendub meie mÀÀratud piirkonnale. Piirkondadena saab valida kontinente vĂ”i riike, Ameerika Ăhendriikides ja Kanadas on saadaval alamregionid.
Meie juhul tÔstetakse CDN alamdomeenile cdn.sayt.in. Tsoon lisades sayt.in, loome alamdomeeni jaoks esimese A-kirje ja suuname kogu PÔhja-Ameerika serveerimise Chicago serverisse:

Korrame toimingut teiste piirkondade jaoks, unustamata luua ĂŒhte kirjet vaikepiirkondade jaoks. Nii see lĂ”puks vĂ€lja nĂ€eb:

Viimane vaike kirje ekraanipildil tÀhendab, et kÔik mÀÀramatud piirkonnad (sealhulgas Euroopa, Aafrika, satelliitinternetikasutajad jne) suunatakse Frankfurdi serverisse.
DNS-i baaseseade on nĂŒĂŒd lĂ”petatud. JÀÀb vaid minna domeeni registreerija veebisaidile ja asendada domeeni praegused NS-id ClouDNS-i poolt antud omajagu. Sel ajal, kui NS-id uuenevad, valmistame serverid ette.
SSL sertifikaatide paigaldamine
Meie CDN töötab HTTPS-i kaudu, seega kui teil on juba domeeni vĂ”i alamdomeeni jaoks SSL sertifikaadid, laadige need ĂŒles kĂ”ikidele serveritele, nĂ€iteks kausta /etc/ssl/ĐČаŃĐŽĐŸĐŒĐ”Đœ/
Kui sertifikaate ei ole, saab tasuta sertifikaadi Letâs Encrypt-ilt. Sel eesmĂ€rgil sobib suurepĂ€raselt . Klient on mugav ja lihtne seadistada, ning mis kĂ”ige olulisem â vĂ”imaldab teha domeeni/alamdomeeni valideerimist DNS-i kaudu ClouDNS-i API kaudu.
Paigaldame acme.sh ainult ĂŒhte serverisse â Euroopa 199.247.18.199, kust sertifikaadid kopeeritakse kĂ”ikidesse ĂŒlejÀÀnud. Paigaldamiseks tĂ€idame:
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/\.bashrcSkripti paigaldamise kĂ€igus luuakse CRON-ĂŒlesanne sertifikaatide edasise uuendamise jaoks ilma meie sekkumiseta.
Domeeni kontrollimine sertifikaadi vĂ€ljastamise ajal toimub DNS-i kaudu API kasutades, seega tuleb ClouDNSi isiklikus kabinetis menĂŒĂŒs Reseller API luua uus API kasutaja ja mÀÀrata talle parool. Saadud auth-id koos parooliga paneme faili. ~/.acme.sh/dnsapi/dns_cloudns.sh (Ă€ra sega seda faili dns_clouddns.sh). Siin on read, mida tuleb kommenteerida ja redigeerida:
CLOUDNS_AUTH_ID=
CLOUDNS_AUTH_PASSWORD=""
NĂŒĂŒd kĂŒsime SSL-sertifikaadi saamist aadressile cdn.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"Parameetrites oleme tulevikuks mÀÀranud veebiserveri konfigureerimise automaatse taaskÀivitamise kÀsu pÀrast sertifikaadi kehtivuse pikendamise igat vÀrskendust.
Kogu sertifikaadi saamise protsess vÔib vÔtta kuni 2 minutit, mitte katkestage seda. Kui domeeni valideerimisega tekib viga, proovige kÀsku veel kord kÀivitada. LÔpus nÀeme, kuhu sertifikaadid said laaditud:

Needime need teid, et neid kasutada sertifikaadi kopeerimisel teistele serveritele ning samuti veebiserveri seadetes. Nginx-i konfigureerimise laadimise viga ignoreerime, â tĂ€ielikult seadistatud serveris ei teki seda sertifikaatide vĂ€rskendamise ajal.
KĂ”ik, mis meil SSL-i osas on jÀÀnud, â on kopeerida saadud sertifikaat kahe teise serverisse, sĂ€ilitades failide tee. Loome igas neis samasugused 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 vĂ€rskendamise regulaarseks tagamiseks loome mĂ”lemas serveris igapĂ€evase CRON-i ĂŒlesande jĂ€rgmise kĂ€suga:
scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
Sel juhul peab ligipÀÀs kaugserverile olema seadistatud , st ilma parooli sisestamata. Ăra unusta seda teha.
Nginx-i installimine ja seadistamine
Kandmiseks staatilise sisu me kasutame Nginx-i, mis on konfigureeritud vahemÀlu proxy-serverina. VÀrskendame paketilisti ja installime selle kÔikidesse kolme serverisse:
root@cdn:~# apt update
root@cdn:~# apt install nginxKasutame allpool toodud spoilerist konfiguratsiooni vaikesÀtte asemel:
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 suurus, mis ei ĂŒleta saadaval olevat kettaruumi
- inactive â vahemĂ€lu andmete sĂ€ilitamise aeg, millega mitte keegi ei kasuta
- ssl_certificate ja ssl_certificate_key â teed SSL sertifikaadi ja vĂ”tme failide juurde
- proxy_cache_valid â vahemĂ€lu andmete sĂ€ilitamise aeg
- proxy_pass â originaalserveri aadress, kust CDN palub faile vahemĂ€llu salvestamiseks. Meie nĂ€ites see on sayt.in
Nagu nÀha, on kÔik lihtne. Raskusi vÔib tekkida ainult vahemÀlu seadistamise ajas, kuna direktiivid on sarnased. inactive ja proxy_cache_validUurime neid meie nÀitel. NÀiteks toimub jÀrgmine: inactive=7d ja proxy_cache_valid 90d:
- Kui pÀring ei kordu 7 pÀeva jooksul, siis andmed eemaldatakse vahemÀlust pÀrast seda perioodi.
- Kui pÀring kordub vÀhemalt korra 7 pÀeva jooksul, loetakse andmed vahemÀlus aegunuks 90 pÀeva pÀrast ja jÀrgmise pÀringu korral uuendab Nginx neid, vÔttes need originaalserverilt.
LÔpetades muutmise nginx.conf, laadime konfiguratsiooni uuesti:
root@cdn:~# service nginx reloadMeie CDN on tÀielikult valmis. $15/kuus saime kohalolupunktid kolmel kontinendil ja 3 TB liiklust: 1 TB igas asukohas.
Kontrollime CDN-i tööd
Vaatame meie CDN-i pingeid erinevatest geograafilistest asukohtadest. Selleks sobivad kÔik pingiteenused.
KĂ€ivitamispunkt
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. Paigaldame nĂŒĂŒd testpildi pĂ”hisaidi juurte. test.jpg ja kontrollime selle laadimiskiirus CDN-i kaudu. Nii on â . Sisu edastatakse kiiresti.
Kirjutame vÀikese skripti juhuks, kui soovime CDN-punktis vahemÀlu kustutada.
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 eemaldamiseks piisab lihtsalt selle kÀivitamisest, eraldi faili saab puhtaks teha nii:
root@cdn:~# ./purge.sh /test.jpgKokkuvÔtte asemel
LÔpetuseks tahan jagada mÔningaid kasulikke nÀpunÀiteid, et kohe alustada mööda raisakotka teed, mis kunagi mulle peavalu valmistas:
- CDN-i tÔrkeotsingute tÔhususe suurendamiseks soovitatakse seadistada DNS Failover, mis aitab kiiresti A-kirje vahetada serveri rikke korral. Seda tehakse domeeni DNS-kirjete juhtpaneelil
- Laialdase geograafilise katvusega saidid nÔuavad kindlasti suurt hulka CDN-punkte, kuid teeme seda mÔÔdukalt. TÔenÀoliselt ei mÀrkavad kasutajad mÀrkimisvÀÀrset erinevust kui kasutate tasulist CDN-i, kui paigutate serverid 6-7 kohas: Euroopa, PÔhja-Ameerika (ida), PÔhja-Ameerika (lÀÀs), Singapur, Austraalia, Hongkong vÔi Jaapan.
- MÔned hostid ei luba renditud serverite kasutamist CDN-i eesmÀrkidel. SeetÔttu, kui otsustate rakendada sisu edastamise vÔrgustikku teenusena, lugege kindlasti konkreetse hostimisteenuse pakkuja reeglid eelnevalt lÀbi.
- Uurige , et mĂ”ista, kuidas kontinentide vahelised sidemed on ja arvestada seda sisu edastamise vĂ”rgu ĂŒlesehitamisel.
- Proovige kontrollida oma serveritele. Nii saab nÀha, millised piirkonnad on CDN-punktidega kÔige lÀhemal, ning GeoDNS-i seadistamine Ônnestub paremini.
- Olenevalt ĂŒlesannetest ei tee paha ka Nginx-i tĂ€iendav seadistamine, et kohandada seda konkreetsete vahemĂ€lu nĂ”uete ja serveri koormuse arvestamisega. Siin aitas mind vĂ€ga palju Nginx-i vahemĂ€lu ja suurte koormuste kiirusartiklid: Ja töö kiirus suurtel koormustel: ja
Allikas: habr.com
