Tora radestkirina naverokê (CDN) ji hêla malper û serîlêdanan ve di serî de ji bo bilezkirina barkirina hêmanên statîk têne bikar anîn. Ev bi cachkirina pelan li ser serverên CDN-ê yên ku li herêmên cûda yên erdnîgarî ne pêk tê. Bi daxwaza daneyan bi riya CDN, bikarhêner wê ji servera herî nêzîk distîne.
Prensîba xebitandinê û fonksiyona hemî torên radestkirina naverokê bi qasî hev e. Piştî ku daxwaznameyek dakêşana pelê wergirt, servera CDN wê yek carî ji servera orîjînal digire û dide bikarhêner, di heman demê de wê ji bo demek diyarkirî cach dike. Hemî daxwazên paşîn ji cache têne bersivandin. Hemî CDN vebijarkên ji bo barkirina pelan, paqijkirina cache, danîna qedandina cache, û hêj bêtir hene.
Wusa diqewime ku ji ber sedemek an yekê din hewce ye ku hûn tora radestkirina naverokê bi xwe organîze bikin, û dûv re - dibe ku rêwerzên ji bo berhevkirina bîsîkleta din ji me re bibin alîkar.

Source:
Kengê hûn hewceyê CDN-ya xwe ne?
Ka em li rewşan binêrin ku rêvekirina CDN-ya xwe watedar e:
- gava ku hûn dixwazin drav hilînin, û lêçûnên xebitandinê jî dema ku CDN-yên erzan ên mîna bikar bînin mehê çend sed dolar e
- heke em dixwazin li ser server û kanalê kaşek daîmî an cacheyek bê cîran bistînin
- Karûbarên CDN li herêma ku hûn hewce ne xwedî xalên hebûna ne
- Mîhengên radestkirina naverokê yên taybetî hewce ne
- em dixwazin radestkirina naveroka dînamîkî bi danîna pêşkêşkerên hilberînê ji bikarhêneran re zûtir bikin
- fikar heye ku karûbarek CDN-ya sêyemîn dikare bi xeletî agahdariya li ser tevgera bikarhêner berhev bike an bikar bîne (silav ji karûbarên ne-GDPR re) an jî beşdarî çalakiyên din ên neqanûnî bibe.
Di pir rewşên din de, karanîna çareseriyên amade yên heyî guncantir e.
Ya ku hûn hewce ne ku dest pê bikin
Ger hûn pergala xweya xweser (AS) hebe pir xweş e. Bi wê re hûn dikarin heman IP-yê ji çend serveran re veqetînin û di asta torê de, bikarhêneran rasterast berbi ya herî nêzîk. Hêjayî gotinê ye ku tewra bi bloka navnîşana /24 re jî meriv dikare torgilokek radestkirina naverokê ava bike. Hin pêşkêşkerên serverê dihêlin ku hûn ji bo karanîna li hemî herêmên ku ji wan re peyda dibin reklamê bikin.
Heke hûn ne xwedan bextewar bloka navnîşanên IP-yê ne, wê hingê ji bo destpêkirina CDNek hêsan hûn ê hewce ne:
- navê domain an subdomain
- herî kêm du server li herêmên cûda. Server dikare an veqetandî an virtual be
- amûra geoDNS. Bi alîkariya wê, bikarhênerek ku digihîje domainek dê berbi servera herî nêzîk ve were rêve kirin
Domanek tomar bikin û pêşkêşkeran ferman bikin
Bi qeydkirina domainê re, her tişt hêsan e - em li her deverê bi her qeydkerek re qeyd dikin. Her weha hûn dikarin ji bo CDN-ê subdomainek bikar bînin, mînakî tiştek mîna cdn.domainname.com. Bi rastî, di mînaka xwe de em ê vê yekê bikin.
Ji bo fermankirina serveran, divê ew li herêm û welatên ku temaşevanên bikarhênerê we lê ne werin kirêkirin. Ger proje navparzemîn e, wê hingê hêsan e ku meriv pêşkêşkerên mêvandariyê hilbijêrin ku li çaraliyê cîhanê serveran pêşkêş dikin. Nimûne: , и - ji bo serverên taybetî, и - ji bo ewr virtual *.
Ji bo CDN-ya xweya taybet, em ê li parzemînên cihê 3 serverên virtual ferman bikin. U Vultr li ser server ji bo $ 5 / mehê em ê bistînin 25GB SSD cih û 1TB trafîkê. Di dema sazkirinê de, em ê Debian-a herî dawî hilbijêrin. Pêşkêşkerên me:
Frankfurt, ip: 199.247.18.199
Chicago, ip: 149.28.121.123
Senegal, ip: 157.230.240.216
* Vultr û DigitalOcean soz didin 100 $ kredî ji bikarhênerên ku bi karanîna girêdanên di vê gotarê de têne tomar kirin gava ku ew rêbazek dravdanê zêde bikin. Nivîskar ji vê yekê pesineke biçûk jî distîne, ku niha ji bo wî pir girîng e. Ji kerema xwe fêm bikin.
Sazkirina geoDNS
Ji bo ku gava bikarhêner bigihîje domainek CDN an subdomainek, ew berbi servera xwestî (nêzîkî) ve tê rêve kirin, em ê hewceyê serverek DNS-ê bi fonksiyona geoDNS-ê bikin.
Prensîb û pêvajoya xebitandinê ya geoDNS wiha ye:
- IP-ya muwekîlê ku daxwaza DNS-ê şandiye, an IP-ya servera DNS-ya vegerî ya ku dema ku daxwaznameya xerîdar tête bikar anîn destnîşan dike. Pêşkêşkerên weha vegerî bi gelemperî pêşkêşkerên DNS ne.
- IP-ya xerîdar welat an herêma wê nas dike. Ji bo vê yekê, databasên GeoIP-ê têne bikar anîn, ku îro gelek ji wan hene. Hinek baş hene .
- Bi cîhê xerîdar ve girêdayî, ew navnîşana IP-ya servera CDN ya herî nêzîk dide.
Pêşkêşkara DNS ya bi fonksiyona geoDNS dikare bibe , lê çêtir e ku meriv çareseriyên amade bi torgilokek serverên DNS-ê li çaraliyê cîhanê bikar bîne û ji qutikê:
- ji $ 9.95 / mehê, tarîfa GeoDNS, ji hêla xwerû ve yek DNS Failover heye
- ji $ 25 / mehê, DNS Failover çalak kirin
- ji $ 35 / mehê ji bo 50M jeo-pirsên paqij. DNS Failover cuda tê barkirin
- ji $ 125 / mehê, 10 DNS Failover hene
- , fonksiyona "Geo Steering" di tarîfên Enterprise de heye
Dema ku hûn geoDNS-ê ferman dikin, divê hûn bala xwe bidin hejmara daxwazên ku di tarîfê de hene û bihesibînin ku dibe ku hejmara rastîn a daxwazên domainê ji ya ku tê xwestin gelek caran zêdetir be. Bi mîlyonan spider, scanner, spammers û ruhên xirab ên din bêwestan dixebitin.
Hema hema hemî karûbarên DNS di bihayê de karûbarek domdar ji bo avakirina CDN - DNS Failover vedihewîne. Bi alîkariya wê, hûn dikarin çavdêriya xebitandina serverên xwe saz bikin û, heke nîşanên jiyanê nebin, bixweber navnîşana servera ne-xebatkar di bersivên DNS-ê de bi paşvekişandinê veguherînin.
Ji bo avakirina CDN-ya xwe em ê bikar bînin , tarîfa GeoDNS.
Werin em di hesabê weya kesane de herêmek nû ya DNS-ê zêde bikin, ku domaina we destnîşan dike. Ger em CDN-yek li ser subdomainek ava dikin, û domaina sereke jixwe tê bikar anîn, wê hingê tavilê piştî lê zêdekirina deverê, ji bîr nekin ku tomarên DNS-ya xebatê yên heyî lê zêde bikin. Pêngava paşîn ev e ku meriv ji bo domaina CDN/subdomainê gelek tomar A-yê biafirîne, ku her yek ji wan ji bo herêma ku me diyar kiriye were bikar anîn. Hûn dikarin parzemînan an welatan wekî herêm destnîşan bikin; jêrherêman ji bo DY û Kanada peyda dibin.
Di doza me de, CDN dê li ser subdomainek were rakirin cdn.sayt.in. Bi zêdekirina herêmekê sayt.in, Ka em ji bo subdomain-ê yekem qeyda A-yê biafirînin û hemî Amerîkaya Bakur berbi servera li Chicago-yê vekin:

Ka em çalakiyê ji bo herêmên din dubare bikin, ji bîr nekin ku ji bo herêmên xwerû yek têketinê biafirînin. Li vir tiştê ku hûn di dawiyê de digirin ev e:

Daxuyaniya paşîn a xwerû ya di dîmenderê de tê vê wateyê ku hemî herêmên ne diyar (û ev Ewropa, Afrîka, bikarhênerên Internetnternetê yên satelîtê ne, hwd.) dê ji servera Frankfurt re bêne şandin.
Ev sazkirina bingehîn a DNS-ê temam dike. Tiştê ku dimîne ev e ku hûn biçin malpera tomara domainê û NS-yên domaina heyî bi yên ku ji hêla ClouDNS ve hatine derxistin veguherînin. Û dema ku NS-ê têne nûve kirin, em ê pêşkêşkeran amade bikin.
Sazkirina sertîfîkayên SSL
CDN-ya me dê li ser HTTPS-ê bixebite, ji ber vê yekê heke we jixwe sertîfîkayên SSL-ê ji bo domainek an subdomainê hebin, wan li hemî pêşkêşkeran bar bikin, mînakî li pelrêça. /etc/ssl/yourdomain/
Ger sertîfîkayên we tunebin, hûn dikarin ji Let's Encrypt yek belaş bistînin. Ji bo vê yekê bêkêmasî . Xerîdar hêsan e û hêsan e ku meriv mîheng bike, û ya herî girîng, ew dihêle hûn bi karanîna DNS-ê bi navgîniya API-ya ji ClouDNS ve domainek / subdomain rast bikin.
Em ê acme.sh tenê li ser yek ji pêşkêşkeran saz bikin - Ewropî 199.247.18.199, ku sertîfîkayên wê ji hemî yên din re bêne kopî kirin. Ji bo sazkirinê, bikin:
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrcDi dema sazkirina skrîptê de, ji bo nûvekirina bêtir sertîfîkayan bêyî beşdariya me dê peywirek CRON were afirandin.
Verastkirina domainê dema ku sertîfîkayek derdixe dê bi riya DNS-ê bi karanîna API-ê ve were kirin, ji ber vê yekê di hesabê weya kesane ya ClouDNS de di menuya Reseller API de hûn hewce ne ku bikarhênerek API-ya nû biafirînin û jê re şîfreyek destnîşan bikin. Em ê erê-id-a encam bi şîfre di pelê de binivîsin ~/.acme.sh/dnsapi/dns_cloudns.sh (Bi pelê re neyê tevlihev kirin dns_clouddns.sh). Li vir rêzikên ku hewce ne bê şîrovekirin û sererast kirin hene:
CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<пароль>"
Naha em ji bo sertîfîkayek SSL daxwaz bikin cdn.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"Di pîvanan de, ji bo pêşerojê, me fermanek destnîşan kir ku piştî her nûvekirina derbasdariya sertîfîkayê di pêşerojê de bixweber veavakirina servera malperê ji nû ve bar bike.
Tevahiya pêvajoya wergirtina sertîfîkayê dibe ku heya 2 hûrdeman bidome, wê qut nekin. Ger xeletiyek pejirandina domainê çêbibe, emrê dîsa biceribînin. Di dawiyê de em ê bibînin ku sertîfîka li ku hatine daxistin:

Ka em van rêçikan bi bîr bînin; dema ku sertîfîkayê li ser serverên din, û hem jî di mîhengên servera webê de kopî bikin, pêdivî ye ku ew bêne destnîşan kirin. Em guh nadin xeletiya ji nû ve barkirina mîhengên Nginx - li ser serverek bi tevahî mîhengkirî, ew ê dema nûvekirina sertîfîkayan xuya neke.
Tiştê ku ji me re bi SSL re dimîne ev e ku em sertîfîkaya wergirtî li du serverên din kopî bikin, riya pelan biparêzin. Ka em li ser her yek ji wan heman pelrêçan biafirînin û kopiyek çêbikin:
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/
Ji bo nûvekirina sertîfîkayan bi rêkûpêk, em ê bi fermanê li ser her du serveran peywirek CRON-a rojane biafirînin:
scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
Di vê rewşê de, pêdivî ye ku gihîştina servera çavkaniya dûr were mîheng kirin , yanî bêyî ku şîfreyek têkevin. Ji bîr nekin ku vê yekê bikin.
Sazkirin û mîhengkirina Nginx
Ji bo xizmetkirina naveroka statîk, em ê Nginx-ê ku wekî serverek proxy caching hatî mîheng kirin bikar bînin. Ka em navnîşên pakêtê nûve bikin û li ser her sê serveran saz bikin:
root@cdn:~# apt update
root@cdn:~# apt install nginxLi şûna xwerû, em veavakirina ji spoilera jêrîn bikar tînin:
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;
}
}
}Di mîhengê de em sererast dikin:
- max_size - Mezinahiya cache ji cîhê dîskê ya berdest derbas nabe
- bêkar - dema hilanînê ji bo daneyên cache yên ku nehatine gihîştin
- ssl_certificate и ssl_certificate_key - rêyên sertîfîkaya SSL û pelên sereke
- proxy_cache_valid - dema hilanîna daneyên cache
- proxy_pass - Navnîşana servera orîjînal a ku CDN dê pelan ji bo cachkirinê jê bixwaze. Di mînaka me de ev e sayt.in
Wekî ku hûn dikarin bibînin, her tişt hêsan e. Ji ber wekheviya rêwerzan dibe ku di danîna dema cachkirinê de tenê dijwariyek derkeve holê bêkar и proxy_cache_valid. Werin em bi mînaka xwe li wan binêrin. Dema ku diqewime ev e neçalak=7d и proxy_cache_valid 90d:
- heke daxwaz di nav 7 rojan de neyê dubare kirin, dê piştî vê heyamê dane ji cache were jêbirin
- heke daxwaz bi kêmanî her 7 rojan carekê were dubare kirin, wê hingê dê daneyên di cacheyê de piştî 90 rojan ji mêj ve were hesibandin û bi daxwaziya din re Nginx wê nûve bike, wê ji servera orîjînal bigire.
Weşandin qedandin nginx.conf, veavakirinê ji nû ve bar bike:
root@cdn:~# service nginx reloadCDN me bi tevahî amade ye. Ji bo $ 15 / mehê. me xalên hebûnê li sê parzemînan û 3 TB trafîkê standin: Li her deverê 1 TB.
Kontrolkirina operasyona CDN
Ka em li pingên CDN-ya xwe ji deverên cihêreng ên erdnîgarî binêrin. Her karûbarên ping ji bo vê yekê guncan in.
Xala destpêkê
Mazûban
IP
Dema navîn, ms
Almanya Berlîn
cdn.sayt.in
199.247.18.199
9.6
Hollanda, Amsterdam
cdn.sayt.in
199.247.18.199
10.1
Fransa Parîs
cdn.sayt.in
199.247.18.199
16.3
Keyaniya Yekbûyî, London
cdn.sayt.in
199.247.18.199
14.9
Kanada, Toronto
cdn.sayt.in
149.28.121.123
16.2
DYA, San Francisco
cdn.sayt.in
149.28.121.123
52.7
DYA, Dallas
cdn.sayt.in
149.28.121.123
23.1
DYA, Chicago
cdn.sayt.in
149.28.121.123
2.6
DYA, New York
cdn.sayt.in
149.28.121.123
19.8
Senegal
cdn.sayt.in
157.230.240.216
1.7
Japonya Tokyo
cdn.sayt.in
157.230.240.216
74.8
Awistralya, Sydney
cdn.sayt.in
157.230.240.216
95.9
Encam baş in. Naha em ê wêneyek ceribandinê di koka malpera sereke de bicîh bikin test.jpg û leza dakêşana wê bi rêya CDN-ê kontrol bikin. tê gotin - . Naverok zû tê radest kirin.
Ka em skrîptek piçûk binivîsin heke em dixwazin kaşê li xala CDN paqij bikin.
paqijkirin.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
Ji bo ku hûn hemî cache jêbirin, tenê wê bimeşînin; hûn dikarin pelek veqetandî bi vî rengî paqij bikin:
root@cdn:~# ./purge.sh /test.jpgDi şûna encam de
Di dawiyê de, ez dixwazim hin serişteyên bikêr bidim da ku tavilê li ser rakêşiya ku carekê serêşiyek ji min re hiştibû biçim:
- Ji bo zêdekirina tolerasyona xeletiya CDN, tê pêşniyar kirin ku hûn DNS Failover-ê mîheng bikin, ku di bûyera têkçûna serverê de dibe alîkar ku meriv zû tomar A biguhezîne. Ev di panela kontrolê ya tomarên DNS yên domainê de tête kirin
- Malperên xwedan gihîştina erdnîgarî ya berfireh dê bê guman hewceyê hejmareke mezin ji xalên CDN-ê bikin, lê bila em fanatîk nebin. Bi îhtimaleke mezin, ger hûn serveran li 6-7 cihan bi cih bikin, bikarhêner dê cûdahiyek girîng li gorî CDN-ya drav nebînin: Ewropa, Amerîkaya Bakur (rojhilat), Amerîkaya Bakur (rojava), Sîngapur, Avusturalya, Hong Kong an Japonya.
- Carinan mêvandar destûr nadin ku serverên kirêkirî ji bo armancên CDN bikar bînin. Ji ber vê yekê, heke we ji nişka ve biryar da ku hûn torgilokek radestkirina naverokê wekî karûbar bicîh bikin, ji bîr nekin ku hûn qaîdeyên pêşkêşvanê mêvandariya xweya taybetî di pêş de bixwînin.
- Lêkolîn bifikirin ka parzemîn çawa bi hev ve girêdayî ne û dema ku torgilokek radestkirina naverokê ava dikin vê yekê li ber çavan bigirin
- Biceribînin kontrol bikin ji serverên xwe re. Bi vî rengî hûn dikarin herêmên herî nêzê xalên CDN-ê bibînin û GeoDNS rasttir mîheng bikin
- Bi peywiran ve girêdayî, dê kêrhatî be ku hûn Nginx ji bo hewcedariyên taybetî yên caching-ê xweş bikin û barkirina li ser serverê hesab bikin. Gotarên di derbarê cache Nginx de ji min re pir alîkariya min kir - û lezkirina xebatê di bin barên giran de: и
Source: www.habr.com
