Content delivery networks (CDN) anvÀnds av webbplatser och applikationer frÀmst för att pÄskynda laddningen av statiska element. Detta sker genom att cachelagra filer pÄ CDN-servrar som finns i olika geografiska regioner. Genom att begÀra data via CDN fÄr anvÀndaren den frÄn nÀrmaste server.
Funktionsprincipen och funktionaliteten för alla innehÄllsleveransnÀtverk Àr ungefÀr densamma. Efter att ha mottagit en begÀran om att ladda ner en fil tar CDN-servern den en gÄng frÄn den ursprungliga servern och ger den till anvÀndaren, samtidigt som den cachelagras under en viss tidsperiod. Alla efterföljande förfrÄgningar besvaras frÄn cachen. Alla CDN:er har alternativ för att ladda filer i förvÀg, rensa cacheminne, stÀlla in cache-utgÄng och mycket mer.
Det hÀnder att det av en eller annan anledning Àr nödvÀndigt att organisera ditt eget nÀtverk för innehÄllsleverans, och dÄ - kan instruktionerna för montering av nÀsta cykel vara till hjÀlp för oss.

KĂ€lla:
NÀr behöver du ditt eget CDN?
LÄt oss titta pÄ fall dÀr det Àr vettigt att köra ditt eget CDN:
- nÀr du vill spara pengar och driftskostnader Àven nÀr du anvÀnder billiga CDN som uppgÄr till flera hundra dollar i mÄnaden
- om vi vill fÄ en permanent cache eller en cache utan grannar pÄ servern och kanalen
- CDN-tjÀnster har inte nÀrvaropunkter i den region du behöver
- Eventuella sÀrskilda instÀllningar för innehÄllsleverans krÀvs
- vi vill pÄskynda leveransen av dynamiskt innehÄll genom att placera produktionsservrar nÀrmare anvÀndarna
- det finns en oro för att en CDN-tjÀnst frÄn tredje part kan samla in eller anvÀnda information om anvÀndarbeteende pÄ ett felaktigt sÀtt (hej till tjÀnster som inte Àr GDPR-kompatibla) eller delta i andra olagliga aktiviteter
I de flesta andra fall Àr det lÀmpligare att anvÀnda befintliga fÀrdiga lösningar.
Vad du behöver för att börja
Det Àr underbart om du har ett eget autonomt system (AS). Med den kan du tilldela samma IP till flera servrar och pÄ nÀtverksnivÄ, hÀnvisa anvÀndare till den nÀrmaste. Det Àr vÀrt att sÀga att Àven med ett /24-adressblock Àr det möjligt att bygga ett innehÄllsleveransnÀtverk. Vissa serverleverantörer tillÄter dig att annonsera för anvÀndning i alla tillgÀngliga regioner.
Om du inte Àr den lyckliga Àgaren av ett block med IP-adresser behöver du för att starta ett enkelt CDN:
- domÀnnamn eller underdomÀn
- minst tvÄ servrar i olika regioner. Servern kan antingen vara dedikerad eller virtuell
- geoDNS-verktyg. Med dess hjÀlp kommer en anvÀndare som kommer Ät en domÀn att dirigeras till nÀrmaste server
Registrera en domÀn och bestÀll servrar
Med domÀnregistrering Àr allt enkelt - vi registrerar oss i vilken zon som helst hos vilken registrar som helst. Du kan ocksÄ anvÀnda en underdomÀn för CDN, till exempel nÄgot liknande cdn.domainname.com. Faktum Àr att i vÄrt exempel kommer vi att göra just det.
NĂ€r det gĂ€ller bestĂ€llningsservrar bör de hyras i de regioner och lĂ€nder dĂ€r din anvĂ€ndarpublik finns. Om projektet Ă€r interkontinentalt Ă€r det bekvĂ€mt att vĂ€lja vĂ€rdleverantörer som erbjuder servrar över hela vĂ€rlden. Exempel: , Đž - för dedikerade servrar, Đž â för virtuellt moln*.
För vÄrt privata CDN kommer vi att bestÀlla 3 virtuella servrar pÄ olika kontinenter. U Vultr pÄ servern för $5/mÄnad vi kommer fÄ 25GB SSD platser och 1TB trafik. Under installationen kommer vi att vÀlja den senaste Debian. VÄra servrar:
Frankfurt, IP: 199.247.18.199
Chicago, IP: 149.28.121.123
Singapore, IP: 157.230.240.216
*Vultr och DigitalOcean utlovar $100 i kredit till anvÀndare som registrerar sig med lÀnkarna i den hÀr artikeln nÀr de har lagt till en betalningsmetod. Författaren fÄr ocksÄ en liten komplimang av detta, vilket Àr mycket betydelsefullt för honom nu. Var förstÄende.
Konfigurera geoDNS
För att sÀkerstÀlla att nÀr en anvÀndare kommer Ät en CDN-domÀn eller underdomÀn, han dirigeras till den önskade (nÀrmaste) servern kommer vi att behöva en DNS-server med geoDNS-funktionen.
Principen och operationsproceduren för geoDNS Àr som följer:
- Definierar IP-adressen för klienten som skickade DNS-begÀran, eller IP-adressen för den rekursiva DNS-servern som anvÀnds vid bearbetning av klientbegÀran. SÄdana rekursiva servrar Àr vanligtvis DNS-leverantörer.
- Klientens IP identifierar dess land eller region. Till detta anvÀnds GeoIP-databaser, som det finns vÀldigt mÄnga av idag. Det finns nÄgra bra .
- Beroende pÄ klientens plats ger den IP-adressen till nÀrmaste CDN-server.
DNS-server med geoDNS-funktion kan vara , men det Àr bÀttre att anvÀnda fÀrdiga lösningar med ett nÀtverk av DNS-servrar runt om i vÀrlden och frÄn lÄdan:
- frÄn $9.95/mÄnad, GeoDNS-taxa, som standard finns det en DNS-failover
- frÄn $25/mÄnad, DNS-failover aktiverad
- frÄn $35/mÄnad för rena 50 miljoner geofrÄgor. DNS-failover debiteras separat
- frÄn $125/mÄnad, det finns 10 DNS-failovers
- , "Geo Steering"-funktionen Àr tillgÀnglig i Enterprise-tariffer
NÀr du bestÀller geoDNS bör du vara uppmÀrksam pÄ antalet förfrÄgningar som ingÄr i tariffen och ta hÀnsyn till att det faktiska antalet förfrÄgningar till domÀnen kan vara mÄnga gÄnger högre Àn förvÀntat. Miljontals spindlar, skannrar, spammare och andra onda andar arbetar outtröttligt.
NÀstan alla DNS-tjÀnster inkluderar i priset en oumbÀrlig tjÀnst för att bygga en CDN - DNS Failover. Med dess hjÀlp kan du stÀlla in övervakning av driften av dina servrar och, om det inte finns nÄgra tecken pÄ liv, automatiskt ersÀtta adressen till den icke-fungerande servern i DNS-svar med en backup.
För att bygga vÄrt CDN kommer vi att anvÀnda , GeoDNS-tariff.
LĂ„t oss lĂ€gga till en ny DNS-zon i ditt personliga konto, som anger din domĂ€n. Om vi ââbygger ett CDN pĂ„ en underdomĂ€n och huvuddomĂ€nen redan anvĂ€nds, glöm inte att lĂ€gga till de befintliga fungerande DNS-posterna omedelbart efter att du har lagt till zonen. NĂ€sta steg Ă€r att skapa flera A-poster för CDN-domĂ€nen/underdomĂ€nen, som var och en kommer att anvĂ€ndas för den region vi har angett. Du kan ange kontinenter eller lĂ€nder som regioner; underregioner Ă€r tillgĂ€ngliga för USA och Kanada.
I vÄrt fall kommer CDN att höjas pÄ en underdomÀn cdn.sayt.in. Genom att lÀgga till en zon sat.in, lÄt oss skapa den första A-posten för underdomÀnen och dirigera hela Nordamerika till servern i Chicago:

LÄt oss upprepa ÄtgÀrden för andra regioner, utan att glömma att skapa en post för standardregionerna. HÀr Àr vad du fÄr till slut:

Den sista standardposten i skÀrmdumpen innebÀr att alla ospecificerade regioner (och dessa Àr Europa, Afrika, satellitinternetanvÀndare, etc.) kommer att skickas till servern i Frankfurt.
Detta slutför den grundlÀggande DNS-instÀllningen. Allt som ÄterstÄr Àr att gÄ till domÀnregistratorns webbplats och ersÀtta de nuvarande domÀn-NS med de som utfÀrdats av ClouDNS. Och medan NS:erna uppdateras kommer vi att förbereda servrarna.
Installera SSL-certifikat
VÄrt CDN kommer att fungera över HTTPS, sÄ om du redan har SSL-certifikat för en domÀn eller underdomÀn, ladda upp dem till alla servrar, till exempel till katalogen /etc/ssl/dindomÀn/
Om du inte har certifikat kan du fÄ ett gratis frÄn Let's Encrypt. Perfekt för detta . Klienten Àr bekvÀm och enkel att konfigurera, och viktigast av allt lÄter den dig validera en domÀn/underdomÀn med hjÀlp av DNS via API:et frÄn ClouDNS.
Vi kommer att installera acme.sh pÄ endast en av servrarna - European 199.247.18.199, frÄn vilken certifikat kommer att kopieras till alla andra. För att installera, gör:
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrcUnder installationen av skriptet kommer en CRON-uppgift att skapas för ytterligare uppdatering av certifikat utan vÄr medverkan.
DomÀnverifiering nÀr du utfÀrdar ett certifikat kommer att utföras via DNS med hjÀlp av API:t, sÄ i ditt personliga ClouDNS-konto i à terförsÀljar-API-menyn mÄste du skapa en ny API-anvÀndare och ange ett lösenord för den. Vi kommer att skriva det resulterande auth-id med lösenord i en fil ~/.acme.sh/dnsapi/dns_cloudns.sh (inte att förvÀxla med filen dns_clouddns.sh). HÀr Àr raderna som behöver okommenteras och redigeras:
CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<паŃĐŸĐ»Ń>"
LÄt oss nu begÀra ett SSL-certifikat för cdn.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"I parametrarna, för framtiden, angav vi ett kommando för att automatiskt ladda om webbserverkonfigurationen efter varje certifikatets giltighetsuppdatering i framtiden.
Hela processen för att fÄ ett certifikat kan ta upp till 2 minuter, avbryt det inte. Om ett domÀnvalideringsfel uppstÄr, försök att köra kommandot igen. I slutet kommer vi att se var certifikaten laddades ner:

LÄt oss komma ihÄg dessa sökvÀgar; de mÄste specificeras nÀr du kopierar certifikatet till andra servrar, sÄvÀl som i webbserverinstÀllningarna. Vi uppmÀrksammar inte felet med att ladda om Nginx-konfigurationer - pÄ en fullt konfigurerad server kommer det inte att visas nÀr certifikat uppdateras.
Allt som ÄterstÄr för oss med SSL Àr att kopiera det mottagna certifikatet till tvÄ andra servrar och bevara sökvÀgen till filerna. LÄt oss skapa samma kataloger pÄ var och en av dem och göra en kopia:
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/
För att uppdatera certifikat regelbundet kommer vi att skapa en daglig CRON-uppgift pÄ bÄda servrarna med kommandot:
scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
I det hÀr fallet mÄste Ätkomst till fjÀrrkÀllservern konfigureras , dvs. utan att ange ett lösenord. Glöm inte att göra detta.
Installera och konfigurera Nginx
För att servera statiskt innehÄll kommer vi att anvÀnda Nginx konfigurerad som en caching proxyserver. LÄt oss uppdatera paketlistorna och installera dem pÄ alla tre servrarna:
root@cdn:~# apt update
root@cdn:~# apt install nginxIstÀllet för standarden anvÀnder vi konfigurationen frÄn spoilern nedan:
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;
}
}
}I konfigurationen redigerar vi:
- max_storlek â cachestorlek som inte överstiger tillgĂ€ngligt diskutrymme
- inaktiv â Lagringstid för cachad data som inte har nĂ„tts
- ssl_certificate Đž ssl_certifikatnyckel â sökvĂ€gar till SSL-certifikat och nyckelfiler
- proxy_cache_valid â Lagringstid för cachade data
- proxy_pass â Adressen till den ursprungliga servern frĂ„n vilken CDN kommer att begĂ€ra filer för cachning. I vĂ„rt exempel Ă€r detta sat.in
Som du kan se Àr allt enkelt. Den enda svÄrigheten kan uppstÄ med att stÀlla in cachingtiden pÄ grund av likheten mellan direktiven inaktiv О proxy_cache_valid. LÄt oss titta pÄ dem med vÄrt exempel. Detta Àr vad som hÀnder nÀr inaktiv=7d О proxy_cache_valid 90d:
- om begÀran inte upprepas inom 7 dagar, kommer uppgifterna att raderas frÄn cachen efter denna period
- om begÀran upprepas minst en gÄng var 7:e dag, kommer data i cachen att betraktas som inaktuell efter 90 dagar och med nÀsta begÀran kommer Nginx att uppdatera den och ta den frÄn den ursprungliga servern
Har redigerat klart nginx.conf, ladda om konfigurationen:
root@cdn:~# service nginx reloadVÄrt CDN Àr helt klart. För $15/mÄnad. vi fick nÀrvaropunkter pÄ tre kontinenter och 3 TB trafik: 1 TB pÄ varje plats.
Kontrollerar CDN:s funktion
LÄt oss titta pÄ ping till vÄrt CDN frÄn olika geografiska platser. Alla pingtjÀnster Àr lÀmpliga för detta.
Startpunkt
VĂ€rd
IP
Genomsnittlig tid, ms
Tyskland Berlin
cdn.sayt.in
199.247.18.199
9.6
NederlÀnderna, Amsterdam
cdn.sayt.in
199.247.18.199
10.1
Frankrike Paris
cdn.sayt.in
199.247.18.199
16.3
Storbritannien, 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
Singapore
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
Resultaten Àr bra. LÄt oss nu placera en testbild i roten pÄ huvudsidan test.jpg och kontrollera dess nedladdningshastighet via CDN. Det sÀgs - . InnehÄllet levereras snabbt.
LÄt oss skriva ett litet skript ifall vi vill rensa cachen vid CDN-punkten.
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
För att ta bort hela cachen, kör bara den; du kan rensa en separat fil sÄ hÀr:
root@cdn:~# ./purge.sh /test.jpgI stÀllet för slutsatser
Till sist vill jag ge nÄgra anvÀndbara tips för att omedelbart kliva över raken som en gÄng gav mig huvudvÀrk:
- För att öka CDN-feltoleransen rekommenderas det att konfigurera DNS Failover, vilket hjÀlper till att snabbt Àndra A-posten i hÀndelse av ett serverfel. Detta görs i kontrollpanelen för domÀnens DNS-poster
- Webbplatser med stor geografisk rÀckvidd kommer utan tvekan att krÀva ett stort antal CDN-poÀng, men lÄt oss inte vara fanatiska. Mest troligt kommer anvÀndaren inte att mÀrka nÄgon signifikant skillnad jÀmfört med ett betald CDN om du placerar servrar pÄ 6-7 platser: Europa, Nordamerika (öst), Nordamerika (vÀst), Singapore, Australien, Hong Kong eller Japan
- Ibland tillÄter inte hostare anvÀndning av hyrda servrar för CDN-ÀndamÄl. DÀrför, om du plötsligt bestÀmmer dig för att distribuera ett innehÄllsleveransnÀtverk som en tjÀnst, glöm inte att lÀsa reglerna för din specifika vÀrdleverantör i förvÀg
- Utforska att förestÀlla sig hur kontinenterna hÀnger ihop och ta hÀnsyn till detta nÀr man bygger ett nÀtverk för innehÄllsleverans
- Försök kolla till dina servrar. PÄ sÄ sÀtt kan du se regionerna nÀrmast CDN-punkter och konfigurera GeoDNS mer korrekt
- Beroende pÄ uppgifterna skulle det vara anvÀndbart att anpassa Nginx för specifika cachningskrav och med hÀnsyn till belastningen pÄ servern. Artiklar om Nginx cache hjÀlpte mig mycket med detta - och acceleration av arbete under tung belastning: О
KĂ€lla: will.com
