Kogume ja seadistame oma CDN-i

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.

Kogume ja seadistame oma CDN-i
Allikas: Infograafika vektor loodud pikisuperstar — www.freepik.com

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 BunnyCDN 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 jĂ€rgida seda juhendit 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: OVH, Leaseweb ja 100Tb — pĂŒhendatud serveritele, Vultr ja DigitalOcean — 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:

Kogume ja seadistame oma CDN-i Frankfurt, ip: 199.247.18.199

Kogume ja seadistame oma CDN-i Chicago, ip: 149.28.121.123

Kogume ja seadistame oma CDN-i 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:

  1. 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.
  2. 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 tasuta valikud.
  3. Kliendi asukohast sÔltuvalt antakse talle lÀhima CDN serveri IP-aadress.

DNS-server geolocation funktsiooniga geoDNS saab ise kokku panna, kuid parem on kasutada valmis lahendusi, kus on DNS-serverid ĂŒle kogu maailma ja Anycast valmis lahendused:

  • ClouDNS alates $9.95/kuus, GeoDNS plaanis on juba ĂŒks DNS Failover
  • Zilore alates $25/kuus, sisalduv DNS Failover
  • Amazon Route 53 alates $35/kuus 50M geokĂŒlastuse eest. DNS Failover arvestatakse eraldi
  • DNS Made Easy alates $125/kuus, sisaldab 10 DNS Failoverit
  • Cloudflare, „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 ClouDNS, 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:

Kogume ja seadistame oma CDN-i
Korrame toimingut teiste piirkondade jaoks, unustamata luua ĂŒhte kirjet vaikepiirkondade jaoks. Nii see lĂ”puks vĂ€lja nĂ€eb:

Kogume ja seadistame oma CDN-i

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 ACME Shell skript. 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 ~/\.bashrc

Skripti 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:

Kogume ja seadistame oma CDN-i

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 vĂ”tmega, 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 nginx

Kasutame 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 reload

Meie 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 — tehtud. 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.jpg

KokkuvÔ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 aluskommunikatsiooni kaarti, et mĂ”ista, kuidas kontinentide vahelised sidemed on ja arvestada seda sisu edastamise vĂ”rgu ĂŒlesehitamisel.
  • Proovige kontrollida pinget erinevatest kohtadest 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: siit Ja töö kiirus suurtel koormustel: siit ja siit

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster