Kogume ja seadistame oma CDN-i.

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.

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

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 BunnyCDN 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 selle juhendi jĂ€rgi 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: OVH, Leaseweb ja 100Tb — pĂŒhendatud serverite jaoks, Vultr ja DigitalOcean — 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,

Kogume ja seadistame oma CDN-i. ip: 199.247.18.199, ip: 149.28.121.123

Kogume ja seadistame oma CDN-i. Chicago, ip: 157.230.240.216

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

  1. Kliendi IP-aadressi pÔhjal mÀÀratakse tema riik vÔi piirkond. Selleks kasutatakse GeoIP andmebaase, mida on tÀnapÀeval palju. On head
  2. tasuta variandid. Kliendi asukoha pÔhjal antakse talle lÀhima CDN-serveri IP-aadress..
  3. GeoDNS-funktsiooniga DNS-serverit on vÔimalik

, kuid parem on kasutada valmis lahendusi, millel on DNS-serverite vĂ”rk ĂŒle kogu maailma ja ise kokku pannaAnycast valmiduses: CloudDNS

  • $9.95/kuu alates , GeoDNS hind, vaikimisi on olemas ĂŒks DNS Failover.Zilore
  • $25/kuu alates $25/kuus, lisatud DNS Failover
  • Amazon Route 53 alates $35/kuu puhaste 50M geoloogiliste pĂ€ringute eest. DNS Failover on eraldi tasuline
  • DNS Made Easy alates $125/kuu, sisaldab 10 DNS Failover
  • Cloudflare, 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 ClouDNS, 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:

Kogume ja seadistame oma CDN-i.
Korrake tegevust teiste piirkondade jaoks, unustamata luua ĂŒks kirje vaikimisi piirkondade jaoks. Niimoodi nĂ€eb tulemus vĂ€lja:

Kogume ja seadistame oma CDN-i.

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

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

Kogume ja seadistame oma CDN-i.

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

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

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

JĂ€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 alajĂ”udude kaarti, et mĂ”ista, kuidas kontinendid on omavahel seotud ja arvestada seda sisu edastamise vĂ”rgustiku loomisel
  • Proovige kontrollida pingisid erinevates kohtades 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: siin ja töö kiirus suurte koormuste korral: siin ja siin

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster