Rrjetet e shpërndarjes së përmbajtjes (CDN) përdoren në faqe dhe aplikacione kryesisht për të përshpejtuar ngarkimin e elementeve statikë. Kjo ndodh përmes ruajtjes së skedarëve në serverët e CDN, të vendosur në rajone të ndryshme gjeografike. Duke kërkuar të dhëna përmes CDN, përdoruesi i merr ato nga serveri më i afërt.
Principi i funksionimit dhe funksionaliteti i të gjitha rrjeteve të shpërndarjes së përmbajtjes janë përafërsisht të njëjta. Kur merr një kërkesë për ngarkimin e një skedari, serveri i CDN njëherë e merr atë nga serveri origjinal dhe ia jep përdoruesit, duke e ruajtur së bashku në cache për një periudhë të caktuar kohe. Për të gjitha kërkesat më pas, përgjigja jepet nga cache. Të gjitha CDN kanë opsione për ngarkimin paraprak të skedarëve, pastrimin e cache, konfigurimin e afatit të ruajtjes, dhe shumë më tepër.
NdonjĂ«herĂ«, pĂ«r shkak tĂ« arsyeve tĂ« ndryshme, nevojitet tĂ« organizohet njĂ« rrjet i vetĂ«shpĂ«rndarjes sĂ« pĂ«rmbajtjes, dhe atĂ«herĂ« â le tĂ« na ndihmojĂ« udhĂ«zimi pĂ«r ndĂ«rtimin e njĂ« biciklete tĂ« re.

Burimi:
Kur na nevojitet një CDN i vetëshpërndarjes
Le të shqyrtojmë rastet kur nisma e një CDN të vetme ka kuptim:
- kur dëshirojmë të kursejmë, ndërsa shpenzimet aktuale edhe me përdorimin e CDN të lira si përbëjnë disa qindra dollarë në muaj
- nëse duam të marrim cache të vazhdueshëm ose cache pa fqinjë në server dhe kanal
- në rajonin tuaj të nevojshëm serverët e CDN nuk kanë pika pranie
- kërkohen ndonjë konfigurim specifik për shpërndarjen e përmbajtjes
- duam të përshpejtojmë shpërndarjen e përmbajtjes dinamike, duke e vendosur më afër përdoruesve serverat e prodhimit
- ka shqetësime se shërbimi i palës së tretë të CDN mund të mbledhë ose të përdorë në mënyrë të paligjshme informacionin mbi sjelljen e përdoruesve (përshëndetje shërbimeve jo në përputhje me GDPR) ose të angazhohet në veprime të tjera të paligjshme
Në shumicën e rasteve të tjera, është më e arsyeshme të përdoren zgjidhje ekzistuese të gatshme.
ĂfarĂ« duhet pĂ«r fillimin
E mrekullueshme, nëse keni sistemin tuaj autonom (AS). Me të mund të caktoni të njëjtin IP për disa serverë dhe në nivelin e rrjetit të drejtoni përdoruesit te më të afërmit. Duket se, madje me një grup adresash /24 ekziston mundësia për të ndërtuar një rrjet të shpërndarjes së përmbajtjes. Disa ofrues serverësh lejojnë të bëjnë një shpallje për t'u përdorur në të gjitha rajonet e disponueshme nga ata.
Nëse nuk jeni një pronar i fatlumë i një blloku adresash IP, atëherë për të nisur një CDN të thjeshtë do t'ju nevojiten:
- emri i domeneve ose subdomeni
- minimalisht dy servera në rajone të ndryshme. Serveri mund të jetë si të dedikuar ashtu edhe virtual.
- mjeti geoDNS. Me të, përdoruesi, kur bën kërkesë ndaj domainit, do të drejtsohet te serveri më i afërt.
Rregjistrojmë domainin dhe porositim serverat.
Me regjistrimin e domainit është shumë e thjeshtë - e regjistrojmë në çdo zonë te çdo regjistrues. Gjithashtu, për CDN mund të përdorim subdomen, për shembull diçka si cdn.emriidomene.com. Në fakt, në shembullin tonë do ta bëjmë kështu.
Sa i pĂ«rket porosisĂ« sĂ« serverave - Ă«shtĂ« e rekomandueshme t'i qironi nĂ« rajonet dhe vendet ku ndodhet audienca juaj. NĂ«se projekti Ă«shtĂ« ndĂ«rkontinental, Ă«shtĂ« e pĂ«rshtatshme tĂ« zgjidhni ofruesit e hostimit qĂ« ofrojnĂ« menjĂ«herĂ« servera nĂ« tĂ« gjithĂ« botĂ«n. PĂ«r shembuj: , dhe â pĂ«r servera tĂ« dedikuar, dhe â pĂ«r virtual cloud*.
Për CDN-në tonë private do të porosisim 3 servera virtualë në kontinente të ndryshme. Te Vultr serveri për $5/muaj 25GB SSD do të marim hapësirë dhe1TB trafik.
Kur të instalojmë do të zgjedhim Debian-in e fundit. Serverat tanë:Frankfurt
Ăikago, ip: 199.247.18.199
Singapor, ip: 149.28.121.123
, ip: 157.230.240.216
* Vultr dhe DigitalOcean premtojnë $100 kredi për përdoruesit e regjistruar përmes lidhjeve në artikull, menjëherë pas shtimit të mënyrës së pagesës. Autori gjithashtu merr një kompliment të vogël nga kjo, që për të është shumë e rëndësishme. Ju lutem, trego ngrohtësi.
Konfigurojmë geoDNS
Që përdoruesi, kur kërkon te domeni ose subdomeni CDN, të drejtohet te serveri i duhur (më i afërti për të), na nevojitet një server DNS me funksionin geoDNS.
- Principi dhe rregulli i punës së geoDNS është si në vijim:
- Përcakton IP-në e klientit që ka dërguar kërkesën DNS, ose IP-në e serverit DNS rekurziv që përdoret gjatë përpunimit të kërkesës së klientit. Këto servera rekurzivë zakonisht janë DNS-të e ofruesve. .
- opcione falas
Në përputhje me vendndodhjen e klientit, i jep atij IP-në e serverit CDN më të afërt. Një server DNS me funksionin geoDNS mund të Anycast
- nga SclouDNS$9.95/muaj
- nga Zilore, e përfshirë DNS Failover
- nga $35/ muaj për 50M kërkesave të pastër geo. DNS Failover faturon veçmas
- nga $125/ muaj, ka 10 DNS Failover
- , funksioni 'Geo Steering' është i disponueshëm në planet Enterprise
Kur porositni geoDNS, duhet të keni parasysh numrin e kërkesave që përfshihen në plan dhe të kuptoni se numri real i kërkesave për domenin mund të jetë shumë më i lartë se sa pritet. Miliona robotë, skanerë, spamerë dhe krijesa të tjera punojnë pa ndalim.
Pothuajse tĂ« gjithĂ« shĂ«rbimet DNS pĂ«rfshijnĂ« nĂ« kosto shĂ«rbimin e nevojshĂ«m pĂ«r ndĂ«rtimin e CDN â DNS Failover. Me tĂ«, mund tĂ« konfiguroni monitorimin e funksionimit tĂ« serverĂ«ve tuaj dhe nĂ« rast se nuk ka shenja jete, automatikisht tĂ« zĂ«vendĂ«soni adresĂ«n e serverit jo-funksional nĂ« pĂ«rgjigjet DNS me tĂ« njĂ« serveri rezervĂ«.
Për të ndërtuar CDN-në tonë, do të përdorim , plani GeoDNS.
Shtojmë një zonë të re DNS në panelin tonë të përdoruesit, duke treguar domenin tonë. Nëse do të ndërtosh CDN-në në një subdomen, dhe domeni kryesor është tashmë në përdorim, mos harro të shtosh regjistrat ekzistues të DNS menjëherë pas shtimit të zonës. Veprimi tjetër është krijimi i disa regjistrave A për domenin/subdomenin e CDN, secili do të përdoret për rajonin që kemi përzgjedhur. Rajonet mund të jenë kontinente ose vende, për SHBA dhe Kanada janë të disponueshme subrajone.
Në rastin tonë, CDN do të ngrihet në subdomenin cdn.sayt.in. Pas shtimit të zonës sayt.in, do të krijojmë regjistrin tonë të parë A për subdomenin dhe do ta drejtojmë të gjithë Amerikën Veriore në një server në Chicago:

Do të përsërisim veprimin për rajone të tjera, pa harruar të krijojmë një regjistër për rajonet me përjashtim. Kjo është ajo çfarë do të rezultojë në fund:

Regjistri i fundit defolt në screenshot do të thotë se të gjitha rajonet që nuk janë caktuar (dhe këtu janë Europa, Afrika, përdoruesit e internetit satelitor, etj.) do të drejtohen në një server në Frankfurt.
Në këtë pikë, konfigurimi i bazës DNS ka përfunduar. Tani mbetet të vizitoni faqen e regjistrarit të domenit dhe të zëvendësoni NS-të aktuale të domenit me ato që dha ClouDNS. Dhe ndërsa NS-të do të përditësohen, ne do të përgatitim serverët.
Instalimi i certifikatave SSL
CDN ynĂ« do tĂ« funksionojĂ« nĂ« HTTPS, prandaj nĂ«se keni tashmĂ« certifikata SSL pĂ«r domenin ose subdomenin, ngarkoni ato nĂ« tĂ« gjithĂ« serverĂ«t, pĂ«r shembull nĂ« direktorinĂ« /etc/ssl/ĐČаŃĐŽĐŸĐŒĐ”Đœ/
NĂ«se nuk keni certifikata, mund tĂ« merrni njĂ« tĂ« lirĂ« nga Letâs Encrypt. PĂ«r kĂ«tĂ«, do tĂ« pĂ«rshtatet Klienti Ă«shtĂ« i lehtĂ« dhe i thjeshtĂ« pĂ«r t'u konfiguruar, dhe mĂ« e rĂ«ndĂ«sishmja â lejon verifikimin e domenit/sundimit pĂ«rmes DNS pĂ«rmes API nga ClouDNS.
Ne do ta vendosim acme.sh vetĂ«m nĂ« njĂ« nga serverat â evropianin 199.247.18.199, nga i cili certifikatat do tĂ« kopjohen nĂ« tĂ« gjitha tĂ« tjerat. PĂ«r instalimin do tĂ« kryejmĂ«:
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrcNë procesin e instalimit të skriptit do të krijohet një detyrë CRON për azhurnimin e mëtejshëm të certifikatave pa angazhimin tonë.
Kontrolli i domenit gjatë lëshimit të certifikatës do të kryhet përmes DNS duke përdorur API, prandaj, në panelin e përdoruesit të ClouDNS nën menunë Reseller API ne duhet të krijojmë një përdorues të ri API dhe të caktojmë një fjalëkalim për të. Auth-id i marrë me fjalëkalim do ta shkruajmë në skedarin ~/ .acme.sh / dnsapi / dns_cloudns.sh (mos e ngatërroni me skedarin dns_clouddns.sh). Këto janë linjat që duhet të komenton dhe redaktohen:
CLOUDNS_AUTH_ID=
CLOUDNS_AUTH_PASSWORD=""
Tani do të kërkojmë që të marrim certifikatën SSL për cdn.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"Në parametrat, për të ardhmen, ne kemi përcaktuar komandën për rinovimin automatik të konfiguracionit të serverit të uebit pas çdo azhurnimi të afatit të vlefshmërisë së certifikatës në vazhdim.
I gjithë procesi i marrjes së certifikatës mund të zgjasë deri në 2 minuta, mos e ndërpreni atë. Nëse ka ndodhur një gabim në verifikimin e domenit, provoni të ekzekutoni komandën përsëri. Në fund do të shohim se ku janë ngarkuar certifikatat:

Mbani mend kĂ«to rrugĂ«, do tĂ« nevojitet qĂ« tĂ« tregohen gjatĂ« kopjimit tĂ« certifikatave nĂ« servera tĂ« tjerĂ«, si dhe nĂ« konfigurimet e serverit tĂ« uebit. Mos u shqetĂ«soni pĂ«r gabimin e rifillimit tĂ« konfigurimeve Nginx, â nĂ« njĂ« server tĂ« konfiguruar plotĂ«sisht, gjatĂ« rinovimit tĂ« certifikatave, ajo nuk do tĂ« ndodhĂ«.
E tĂ«ra çfarĂ« na mbetet pĂ«r SSL, â Ă«shtĂ« qĂ« tĂ« kopjojmĂ« certifikatĂ«n e marrĂ« nĂ« dy servera tĂ« tjerĂ« duke ruajtur rrugĂ«n pĂ«r skedarĂ«t. Do tĂ« krijojmĂ« nĂ« secilin prej tyre direktorive tĂ« njĂ«jta dhe do tĂ« bĂ«jmĂ« njĂ« kopje:
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/
Për të bërë që rinovimi i certifikatave të jetë i rregullt, do të krijojmë një detyrë CRON ditore në të dy serverat me komandën:
scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
Me këtë, qasja në serverin burim duhet të jetë e konfirmuar , dmth. pa futur një fjalëkalim. Mos e harroni ta bëni këtë.
Instalimi dhe konfigurimi i Nginx
Për të dorëzuar përmbajtje statike do të përdorim Nginx, i konfiguruar në modin e serverit proxy me keƥ. Do të përditësojmë listat e paketave dhe do ta instalojmë atë në të tri serverat:
root@cdn:~# apt update
root@cdn:~# apt install nginxNë vend të konfigurimit default, do të përdorim konfigurimin nga spoiler-i më poshtë:
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;
}
}
}Në konfigurim do të redaktojmë:
- max_size â madhĂ«sia e keĆĄit, qĂ« nuk e kalon hapĂ«sirĂ«n e disponueshme nĂ« disk
- inactive â koha e ruajtjes sĂ« tĂ« dhĂ«nave tĂ« keĆĄuara, tĂ« cilat nuk janĂ« aksesuar nga askush
- ssl_certificate dhe ssl_certificate_key â rrugĂ«t pĂ«r skedarĂ«t e certifikatĂ«s SSL dhe çelĂ«sit
- proxy_cache_valid â koha e ruajtjes sĂ« tĂ« dhĂ«nave tĂ« keĆĄuara
- proxy_pass â adresa e serverit origjinal, nga i cili CDN do tĂ« kĂ«rkojĂ« skedarĂ«t pĂ«r keĆĄim. NĂ« shembullin tonĂ«, kjo Ă«shtĂ« sayt.in
Siç e shohim, gjithçka është e thjeshtë. Vështirësia mund të vijë vetëm nga konfigurimi i kohës së keƥimit për shkak të ngjashmërisë së direktivave. inactive dhe proxy_cache_validTë cilat do t'i analizojmë në shembullin tonë. Ky është procesi kur inactive=7d dhe proxy_cache_valid 90d:
- nëse kërkesa nuk përsëritet brenda 7 ditëve, të dhënat do të fshihen nga keƥi pas skadimit të këtij periodi
- nëse kërkesa përsëritet të paktën një herë brenda 7 ditëve, të dhënat në keƥ do të konsiderohen të vjetra pas 90 ditësh dhe gjatë kërkesës së ardhshme Nginx do t'i rinovojë, duke u marrë nga serveri origjinal
Pasi përfundojmë rregullimet nginx.conf, do të rinisnim konfigurimin:
root@cdn:~# service nginx reloadCDN-ja jonë është plotësisht e gatshme. Për $15/muaj, kemi marrë pika prezence në tri kontinente dhe 3 TB trafik: nga 1 TB në çdo lokacion.
Kontrollojmë funksionimin e CDN-së
Le tĂ« shohim ping-et pĂ«r CDN-nĂ« tonĂ« nga vende tĂ« ndryshme gjeografike. Ădo shĂ«rbim pĂ«r pingim do tĂ« jetĂ« i pĂ«rshtatshĂ«m.
Pika e nisjes
Host
IP
Koha mesatare, ms
Gjermani, Berlin
cdn.sayt.in
199.247.18.199
9.6
Holandë, Amsterdam
cdn.sayt.in
199.247.18.199
10.1
Francë, Paris
cdn.sayt.in
199.247.18.199
16.3
Mbretëria e Bashkuar, Londër
cdn.sayt.in
199.247.18.199
14.9
Kanada, Toronto
cdn.sayt.in
149.28.121.123
16.2
SHBA, San Francisco
cdn.sayt.in
149.28.121.123
52.7
SHBA, Dallas
cdn.sayt.in
149.28.121.123
23.1
SHBA, Ăikago
cdn.sayt.in
149.28.121.123
2.6
Shtetet e Bashkuara, Nju Jork
cdn.sayt.in
149.28.121.123
19.8
Singapor
cdn.sayt.in
157.230.240.216
1.7
Japoni, Tokio
cdn.sayt.in
157.230.240.216
74.8
Australi, Sidney
cdn.sayt.in
157.230.240.216
95.9
Rezultatet janĂ« tĂ« mira. Tani do tĂ« vendosim nĂ« rrĂ«njĂ«n e faqes kryesore njĂ« imazh testues test.jpg dhe do tĂ« verifikojmĂ« shpejtĂ«sinĂ« e ngarkimit tĂ« tij pĂ«rmes CDN. Thuhet, â . PĂ«rmbajtja dorĂ«zohet shpejt.
Do të shkruajmë një skenar të vogël në rast se duam të pastrojmë cache-n në pikën e CDN.
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
Për të hequr tërë cache-n, mjafton ta ekzekutoni, një skedë të veçantë mund ta pastrojmë kështu:
root@cdn:~# ./purge.sh /test.jpgNë vend të përfundimeve
Në fund, dëshiroj të jap disa këshilla të dobishme, që të kalojmë direkt mbi pengesat që më kanë shkaktuar më parë dhimbje koke:
- Për të rritur qëndrueshmërinë e CDN rekomandohet të konfiguroni DNS Failover, që ndihmon në ndërrimin e shpejtë të regjistrit A në rast të prishjes së serverit. Kjo bëhet në panelin e kontrollit të regjistrave DNS të domainit
- Faqet me përhapje gjeografike të gjerë pa dyshim kërkojnë një numër të madh të pikave CDN, por le të qëndrojmë pa fanatizëm. Probabiliteti është që përdoruesi nuk do të vërejë ndonjë diferencë të madhe krahasuar me CDN me pagesë, nëse ju vendosni serverët në 6-7 vende: Europa, Amerika Veriore (lindje), Amerika Veriore (perëndim), Singapor, Australi, Hong Kong ose Japoninë
- Ndërkohë, hostuesit mund të mos lejojnë përdorimin e serverëve të marrë me qira për qëllime CDN. Prandaj, nëse ndonjëherë vendosni të zhvilloni një rrjet shpërndarjeje përmbajtjeje si shërbim, mos harroni të lexoni paraprakisht rregullat e ofruesit të specifik hostimit
- Studioni , që të kuptoni si janë të lidhura kontinenti dhe ta merrni këtë parasysh kur të ndërtoni rrjetin e shpërndarjes së përmbajtjes
- Provoni të kontrolloni në serverët tuaj. Kështu mund të shihni rajonet më të afërta me pikat e CDN dhe të rregulloni më saktë GeoDNS
- Sipas detyrave, nuk do tĂ« ishte e tepĂ«rt tĂ« rregullohej Nginx pĂ«r kĂ«rkesat specifike tĂ« caching dhe me parasysh ngarkesĂ«n nĂ« server. NĂ« kĂ«tĂ« m'u ndihmuan shumĂ« artikujt mbi caching Nginx â dhe pĂ«rshpejtimin e punĂ«s nĂ«n ngarkesa tĂ« mĂ«dha: dhe
Burimi: habr.com
