Sisuhalduse sisu (CDN) kasutatakse veebilehtedel ja rakendustes peamiselt staatiliste elementide laadimise kiirusel. See toimub, salvestades faile CDN-serveritesse, mis asuvad erinevates geograafilistes piirkondades. Kui kasutaja taotleb andmeid lÀbi CDN-i, saab ta need lÀhimalt serverilt.
Tööprintsiip ja funktsioonid on kĂ”igil sisuhalduse vĂ”rkudel enam-vĂ€hem ĂŒhesugused. Saades faililaadimise taotluse, tĂ”mbab CDN-server selle esmakordselt originaalserverist ja edastab kasutajale, samal ajal salvestades selle endale etteantud ajavahemikuks. KĂ”ikidele jĂ€rgnevale taotlusele vastatakse vahemikust. KĂ”ikidel CDN-idel on failide eelneva laadimise, vahemiku tĂŒhjendamise, selle sĂ€ilitamise ajastamise valikud ja palju muud.
MĂ”nel juhul on vajalik luua oma sisuhalduse vĂ”rk ja siis â aitab meid taas kord juhend jĂ€rgmise jalgratta kokkupanekuks.

Allikas:
Kui on vajalik oma CDN
Kaalume olukordi, kus oma CDN-i kÀivitamine on mÔistlik:
- kui on soov sÀÀsta raha, samas kui praegused kulud isegi odavaid CDN-e nagu koosnevad mitmest sajast dollarist kuus
- kui soovime pidevat vahemÀlu vÔi vahemÀlu ilma serveri ja kanali naabriteta
- kui soovitud piirkonnas ei ole CDN-teenustel kohalolekupunkte
- kui on vajalikud erilised sisu edastamise seaded
- kui tahame kiirendada dĂŒnaamilise sisu edastamist, paigutades tootmisserverid lĂ€hemale kasutajatele
- kui on kahtlus, et kolmas osaline CDN-teenus vÔib ebaseaduslikult koguda vÔi kasutada kasutajakÀitumise kohta teavet (tervitused, teenused, mis ei ole GDPR-i nÔuetele vastavad) vÔi tegeleda muude ebaseaduslike tegevustega
Enamikul teistel juhtudel on mÔistlikum kasutada olemasolevaid valmis lahendusi.
Mida on tarvis kÀivitamiseks
VĂ€ga hĂ€sti, kui teil on oma iseseisev sĂŒsteem (AS). Sellega saab mÀÀrata mitmele serverile sama IP-aadressi ja suunata kasutajad lĂ€himasse. Tuleb öelda, et isegi /24 aadressibloki olemasolul on vĂ”imalik luua sisuhalduse vĂ”rk. MĂ”ned serveriteenuse pakkujad lubavad kuulutada kasutamiseks kĂ”ikides nende saadaval olevates piirkondades.
Kui teil ei ole Ônnelikku IP-aadresside plokki, siis vajate lihtsa CDN-i kÀivitamiseks jÀrgmist:
- domeeninime vÔi alamdomeeni
- vĂ€hemalt kahte serverit erinevates regionaalses asukohas. Server vĂ”ib olla nii pĂŒhendatud kui ka virtuaalne
- geoDNS tööriista. Selle abil suunatakse kasutaja, kes pöördub domeeni poole, lÀhimale serverile
Registreerime domeeni ja tellime serverid
Domeeni registreerimine on lihtne â registreerime igas tsoonis igasuguse registreerija juures. CDN-i jaoks saab kasutada ka alamdomeeni, nĂ€iteks midagi sellist nagu cdn.domeeninimi.com. Meie nĂ€ites teeme just nii.
Serverite tellimise osas tasub neid rentida piirkondades ja riikides, kus asub teie kasutajaskond. Kui projekt on interkontinentaalne, siis on mugav valida hostimise pakkujad, kes pakuvad servereid ĂŒle kogu maailma. NĂ€ited: , ja â pĂŒhendatud serverite jaoks, ja â virtuaalsete pilveserverite jaoks.
Meie privaatse CDN-i jaoks tellime 3 virtuaalset serverit eri kontinendidelt. Meie serverite hind on Vultr $5/kuu saame ruumi ja 25GB SSD 1TB liiklust. Paigaldamisel valime viimase Debian'i. Meie serverid:Frankfurdis,
ip: 199.247.18.199, ip: 149.28.121.123
Chicago, ip: 157.230.240.216
Singapur* Vultr ja DigitalOcean lubavad $100 krediiti registreeritud kasutajatele, kes liituvad artiklis toodud linkide kaudu, kohe pÀrast makseviisi lisamist. Autor saab samuti vÀikese boonuse, mis on talle praegu vÀgagi oluline. Palun vÔtke seda arvesse.
Seadistame geoDNS-i
Et kasutaja suunataks domeeni vÔi alamdomeeni kaudu lÀhimale (temaga lÀhimale) serverile, vajame DNS-serverit, millel on geoDNS funktsioon.
geoDNS-i tööpÔhimÔte ja -jÀrg on jÀrgmine:
MÀÀrab kliendi IP-aadresse, kes saadab DNS-pÀringu, vÔi IP-aadressi rekursiivse DNS-serveri jaoks, mida kasutatakse kliendipÀringu töötlemisel. Need rekursiivsed serverid on tavaliselt teenusepakkujate DNS-serverid.
- Kliendi IP-aadressi pÔhjal mÀÀratakse tema riik vÔi piirkond. Selleks kasutatakse GeoIP andmebaase, mida on tÀnapÀeval palju. On head
- tasuta variandid. .
- GeoDNS-funktsiooniga DNS-serverit on vÔimalik
, kuid parem on kasutada valmis lahendusi, millel on DNS-serverite vĂ”rk ĂŒle kogu maailma ja Anycast CloudDNS
- alates , GeoDNS hind, vaikimisi on olemas ĂŒks DNS Failover.Zilore
- alates $25/kuus, lisatud DNS Failover
- alates $35/kuu puhaste 50M geoloogiliste pÀringute eest. DNS Failover on eraldi tasuline
- alates $125/kuu, sisaldab 10 DNS Failover
- , funktsioon âGeo Steeringâ on saadaval Enterprise plaanides
GeoDNS tellimisel tuleks tĂ€helepanu pöörata plaani sisaldatud pĂ€ringute arvule ja arvestada, et tegelik domeenipĂ€ringute arv vĂ”ib mitu korda ĂŒletada ootusi. Miljonid roomikud, skannerid, rĂ€mpsposti saatjad ja muud soovimatud isikud töötavad tegevuses pidevalt.
Peaaegu kĂ”ikides DNS-teenustes on hinna sees asendamatu CDN-i seadmise teenus â DNS Failover. Selle abil on vĂ”imalik seadistada oma serverite töö jĂ€lgimine ja, kui elumĂ€rke ei ole, asendada automaatselt DNS-vastustes mittetöötava serveri aadress varu serveriga.
CDN-i loomiseks kasutame , plaan GeoDNS.
Lisame iseteeninduse keskkonnas uue DNS-tsooni, mĂ€rkides oma domeeni. Kui CDN-i ehitatakse alamdomeenile ja pĂ”hidomeen on juba kasutuses, siis Ă€rge unustage tsooni lisamisel mĂ”ne olemasoleva töötava DNS-kirje lisamist. JĂ€rgmiseks sammuks on mitme A-kirje loomine CDN-i domeeni/alamdomeeni jaoks, kus igaĂŒht rakendatakse nimelt meie mÀÀratud piirkondade jaoks. Piirkondadeks vĂ”ivad olla kontinendid vĂ”i riigid, USA ja Kanada puhul on saadaval ka alampiirkonnad.
Meie puhul tÔstame CDN-i alamdomeenil cdn.sayt.in. Lisades tsooni sayt.in, loome alamdomeeni esimese A-kirje ja suuname kogu PÔhja-Ameerika serverisse Chicagosse:

Korrake tegevust teiste piirkondade jaoks, unustamata luua ĂŒks kirje vaikimisi piirkondade jaoks. Niimoodi nĂ€eb tulemus vĂ€lja:

Viimane vaikimisi kirje ekraanipildil tÀhendab, et kÔik mÀÀramata piirkonnad (sh Euroopa, Aafrika, satelliidi interneti kasutajad jms) suunatakse serverisse Frankfurtis.
Sellega on DNS-i pĂ”hi seadistus lĂ”petatud. ĂlejÀÀnud on see, et minna domeeni registri kodulehele ja asendada domeeni praegused NS-id ClouDNS-i antud omadega. Ja seni, kuni NS-id uuenevad, valmistame serverid ette.
SSL-sertifikaatide installimine
Meie CDN töötab HTTPS-i kaudu, seega kui teil on juba domeeni vĂ”i alamdomeeni jaoks SSL-sertifikaadid, laadige need kĂ”ikidele serveritele ĂŒles, nĂ€iteks katalooge /etc/ssl/ĐČаŃĐŽĐŸĐŒĐ”Đœ/
Kui sertifikaate ei ole, saate tasuta sertifikaadi Letâs Encryptilt. Selleks sobib suurepĂ€raselt Klient on mugav ja lihtne seadistada ning mis kĂ”ige tĂ€htsam â vĂ”imaldab valideerida domeeni/aladomeeni DNS kaudu ClouDNS API abil.
Installeerime acme.sh ainult ĂŒhele serverile â Euroopa serverile 199.247.18.199, kust sertifikaadid kopeeritakse kĂ”ikidele teistele. Installimiseks tĂ€idame:
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrcInstallimise kĂ€igus luuakse skripti jaoks CRON-ĂŒlesanne sertifikaatide automaatseks uuendamiseks meie osaluseta.
Domeeni kontroll sertifikaadi vĂ€ljastamise ajal toimub DNS-i kaudu, kasutades API-d, seetĂ”ttu tuleb ClouDNS iseteeninduses Reseller API menĂŒĂŒs luua uus API kasutaja ja mÀÀrata talle parool. Saadud auth-id koos parooliga kirjutame faili ~/ .acme.sh/dnsapi/dns_cloudns.sh (Ă€ra sega seda faili segi dns_clouddns.sh). Siin on read, mida tuleb kommenteerimisest vabastada ja redigeerida:
CLOUDNS_AUTH_ID=
CLOUDNS_AUTH_PASSWORD=""
NĂŒĂŒd taotleme SSL sertifikaadi saamist cdn.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"Parameetrites oleme tuleviku tarbeks mÀÀranud kÀsu veebiserveri konfiguratsiooni automaatseks taaskÀivitamiseks pÀrast iga sertifikaadi kehtivusaja vÀrskendamist.
Kogu sertifikaadi saamise protsess vÔib vÔtta kuni 2 minutit, Àra katkesta seda. Kui domeeni valideerimisel tekib tÔrge, proovi kÀsku uuesti kÀivitada. LÔpus nÀeme, kuhu sertifikaadid on laaditud:

JĂ€tame need teed meelde, neid tuleb nĂ€idata sertifikaadi kopeerimisel teistesse serveritesse ning ka veebiserveri seadistustes. Nginxi konfiguratsioonide taaskĂ€ivitamise tĂ”rketeateid ignoreerime â tĂ€ielikult seadistatud serveris sertifikaatide vĂ€rskendamisel neid ei esine.
KĂ”ik, mis meil SSL-i osas jÀÀnud on â tuleb kopeerida saadud sertifikaat kahte teise serverisse, sĂ€ilitades failide teed. Loome igas neist sarnased 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 regulaarseks uuendamiseks loome mĂ”lemal serveril iga pĂ€ev CRON-ĂŒ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
Samas peab ligipÀÀs kaugserverile allikaks olema seadistatud , st. parooli sisestamata. Ăra unusta seda teha.
Nginxi installimine ja seadistamine
Meie staatilise sisu edastamiseks kasutame Nginx'i, mis on seadistatud vahemÀlu proxy-serverina. Uuendame paketite nimekirju jainstallime selle kÔigile kolmele serverile:
root@cdn:~# apt update
root@cdn:~# apt install nginxKasutame vaikimisi asemel allpool toodud 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;
}
}
}Muudame konfiguratsioonis:
- max_size â vahemĂ€lu maksimaalne suurus, mis ei ĂŒleta saadaval olevat kettaruumi
- inactive â mitteaktiivsete vahemĂ€lu andmete sĂ€ilitamise aeg
- ssl_certificate ja ssl_certificate_key â SSL-sertifikaadi ja vĂ”tme failide teed
- proxy_cache_valid â vahemĂ€lu andmete sĂ€ilitamise aeg
- proxy_pass â originaalserveri aadress, millest CDN pĂ€rib faile vahemĂ€lu jaoks. Meie nĂ€ites on see sayt.in
Nagu nÀeme, on kÔik lihtne. Ainult vahemÀlu seadistamisel vÔib tekkida keerukus sarnaste direktiivide tÔttu. inactive ja proxy_cache_validVaatame neid meie nÀites. Siin, mis juhtub, kui inactive=7d ja proxy_cache_valid 90d:
- kui pÀringut ei kordata 7 pÀeva jooksul, kustutatakse andmed vahemÀlust pÀrast seda perioodi
- kui pÀringut kordatakse vÀhemalt kord 7 pÀeva jooksul, loetakse andmed vahemÀlus aegunuks 90 pÀeva möödumisel ja Nginx uuendab need, vÔttes need originaalserverist
LÔpetanud muudatused nginx.conf, taaskÀivitame konfiguratsiooni:
root@cdn:~# service nginx reloadMeie CDN on tÀielikult valmis. 15 dollari eest kuus saime kohaloleku kolmele mandrile ja 3 TB liiklust: 1 TB igas asukohas.
Kontrollime CDN-i toimimist
Vaadakem meie CDN-i pingeid erinevatest geograafilistest asukohtadest. Selleks sobivad igasugused pingeteenused.
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. Paigutame nĂŒĂŒd pĂ”hisaidi juurese testpildi test.jpg ja kontrollime selle laadimiskiirust CDN-i kaudu. Ătlesin, â . Sisu edastatakse kiiresti.
Kirjutame vĂ€ikese skripti juhuks, kui soovime CDN-i punktis 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 eemaldamiseks piisab lihtsalt selle kÀivitamisest, eraldi faili saab puhastada nii:
root@cdn:~# ./purge.sh /test.jpgJĂ€reldused
LĂ”petuseks tahan anda mĂ”ned kasulikud nĂ€punĂ€ited, et kohe ĂŒle tĂ”kete astuda, mis kunagi mul peavalu tekitas:
- CDN-i katkestusteta töö tagamiseks soovitatakse seadistada DNS Failover, mis aitab kiiresti A-kirje vahetada serveri rikke korral. Seda tehakse domeeni DNS-kirjete haldamise paneelis
- Laialdase geograafilise katvusega veebisaidid vajavad kahtlemata suurt arvu CDN-punkte, aga teeme seda mÔÔdukalt. TÔenÀoliselt ei mÀrka kasutaja olulist erinevust vÔrreldes tasulise CDN-iga, kui paigutate serverid 6-7 kohta: Euroopa, PÔhja-Ameerika (ida), PÔhja-Ameerika (lÀÀs), Singapur, Austraalia, Hongkong vÔi Jaapan
- MÔnikord ei luba hostijat teenindavad serverid CDN-i eesmÀrkidel kasutada. SeetÔttu, kui otsustate luua sisu edastamise vÔrgustiku teenusena, Àrge unustage eelnevalt tutvuda konkreetse hostimisteenuse pakkuja reeglitega
- Uurige , et mÔista, kuidas kontinendid on omavahel seotud ja arvestada seda sisu edastamise vÔrgustiku loomisel
- Proovige kontrollida teie serverite suhtes. Nii saab nÀha kÔige lÀhemal asuvaid CDN-i punkte ja Ôigesti seadistada GeoDNS-i
- SĂ”ltuvalt ĂŒlesannetest on kasulik Nginx-i tĂ€iustamine konkreetsete vahemĂ€lu nĂ”uete ja serveri koormuse arvessevĂ”tmisega. Selles aitas mind vĂ€ga Nginx-i vahemĂ€lu ja töö kiirus suurtel koormustel kĂ€sitlevad artiklid: ja töö kiirus suurte koormuste korral: ja
Allikas: habr.com
