Pagtukod ug pag-configure sa imong CDN

Ang Content Delivery Networks (CDNs) gigamit sa mga website ug mga aplikasyon sa panguna aron mapadali ang pagkarga sa mga static nga elemento. Nahitabo kini tungod sa pag-cache sa mga file sa mga server sa CDN nga nahimutang sa lainlaing mga rehiyon sa heyograpiya. Pinaagi sa paghangyo sa datos pinaagi sa CDN, ang user makadawat niini gikan sa labing duol nga server.

Ang prinsipyo sa operasyon ug pagpaandar sa tanan nga mga network sa paghatud sa sulud halos parehas. Kay nakadawat ug hangyo sa pag-download sa usa ka file, ang CDN server mokuha niini usa ka higayon gikan sa orihinal nga server ug ihatag kini sa user, dungan sa pag-cache niini sulod sa gitakdang yugto sa panahon. Ang tanan nga nagsunod nga mga hangyo gitubag gikan sa cache. Ang tanan nga mga CDN adunay mga kapilian sa pag-preload sa mga file, paghawan sa cache, pagtakda sa expiration date, ug uban pa.

Kini mahitabo nga, alang sa usa ka rason o sa lain, kamo kinahanglan nga-organisar sa imong kaugalingon nga sulod delivery network, ug unya - himoa nga ang mga instruksyon sa pag-assemble sa sunod nga bike makatabang kanamo.

Pagtukod ug pag-configure sa imong CDN
Source: Infographic vector nga gihimo ni pikisuperstar - www.freepik.com

Kung kinahanglan nimo ang imong kaugalingon nga CDN

Hunahunaa ang mga kaso diin ang pagpadagan sa imong kaugalingon nga CDN makatarunganon:

  • sa diha nga adunay usa ka tinguha sa pagluwas sa salapi, ug pagpadagan sa gasto bisan pa sa paggamit sa barato nga CDNs sama BunnyCDN kantidad ngadto sa pipila ka gatus ka dolyares sa usa ka bulan
  • kung gusto namon makakuha usa ka permanente nga cache o cache nga wala’y server ug mga silingan sa channel
  • Ang mga serbisyo sa CDN walay mga punto sa presensya sa rehiyon nga imong gikinahanglan
  • bisan unsang espesyal nga mga setting sa pagpadala sa sulud gikinahanglan
  • gusto namon nga mapadali ang paghatud sa dinamikong sulud pinaagi sa pagbutang sa server sa produksiyon nga mas duol sa mga tiggamit
  • adunay kabalaka nga ang usa ka third-party nga serbisyo sa CDN mahimong iligal nga mangolekta o mogamit sa kasayuran bahin sa pamatasan sa gumagamit (hello non-GDPR-compliant nga mga serbisyo) o moapil sa ubang mga ilegal nga kalihokan

Sa kadaghanan sa ubang mga kaso, mas angay nga gamiton ang naa na nga andam nga mga solusyon.

Unsa ang imong kinahanglan nga magsugod

Nindot kaayo kung naa kay kaugalingon nga Autonomous System (AS). Uban niini, mahimo nimong i-assign ang parehas nga IP sa daghang mga server ug sumala niini nga panudlo sa lebel sa network, idirekta ang mga tiggamit sa labing duol. Angayan nga isulti nga bisan sa block sa /24 address, posible nga magtukod usa ka network sa paghatud sa sulud. Ang ubang mga server providers nagtugot kanimo sa paghimo og usa ka pahibalo alang sa paggamit sa tanan nga mga rehiyon nga anaa kanila.

Kung dili ka malipayon nga tag-iya sa usa ka bloke sa mga adres sa IP, nan aron makadagan ang usa ka yano nga CDN kinahanglan nimo:

  • ngalan sa domain o subdomain
  • labing menos duha ka server sa lain-laing mga rehiyon. Ang server mahimong dedikado o virtual
  • geoDNS nga himan. Uban niini, ang tiggamit, nga nakatubag sa domain, idirekta sa labing duol nga server

Pagrehistro sa usa ka domain ug pag-order sa mga server

Sa pagrehistro sa domain, ang tanan yano ra - nagparehistro kami sa bisan unsang sona sa bisan unsang tigrehistro. Mahimo usab nimo gamiton ang usa ka subdomain alang sa usa ka CDN, pananglitan usa ka butang sama cdn.domainname.com. Sa tinuud, sa among panig-ingnan, buhaton namon kana.

Sama sa pag-order sa mga server, kinahanglan nga abangan sila sa mga rehiyon ug mga nasud diin nahimutang ang imong mamiminaw sa tiggamit. Kung ang proyekto mao ang intercontinental, nan kini sayon ​​​​sa pagpili sa hosting providers nga nagtanyag sa mga server sa tibuok kalibutan sa usa ka higayon. Mga pananglitan: OVH, pag-abang sa web и 100Tb - alang sa gipahinungod nga mga server, Vultr и DigitalOcean — para sa virtual nga panganod*.

Para sa among pribadong CDN, mag-order kami ug 3 ka virtual server sa lain-laing mga kontinente. Sa Vultr sa server alang sa $5/bulan atong makuha 25GB SSD mga lugar ug 1TB sa trapiko. Sa pag-instalar, pilia ang pinakabag-o nga Debian. Ang among mga server:

Pagtukod ug pag-configure sa imong CDN Frankfurt, ip: 199.247.18.199

Pagtukod ug pag-configure sa imong CDN Chicago, ip: 149.28.121.123

Pagtukod ug pag-configure sa imong CDN Сингапур, ip: 157.230.240.216

*Ang Vultr ug DigitalOcean nagsaad ug $100 nga kredito sa mga tiggamit nga nagparehistro pinaagi sa mga link sa artikulo pagkahuman dayon pagdugang usa ka paagi sa pagbayad. Ang tagsulat nakadawat usab usa ka gamay nga pagdayeg gikan niini, nga hinungdanon kaayo alang kaniya karon. Palihug pagsabot.

Pag-set up sa geoDNS

Aron ang user madirekta sa gitinguha (labing duol) nga server kung mag-access sa usa ka domain o CDN subdomain, kinahanglan namon ang DNS server nga adunay function sa geoDNS.

Ang prinsipyo ug operasyon sa geoDNS mao ang mosunod:

  1. Gipiho ang IP sa kliyente nga nagpadala sa hangyo sa DNS, o ang IP sa recursive DNS server nga gigamit sa pagproseso sa hangyo sa kliyente. Ang ingon nga mga recursive server kasagaran DNS-s sa mga provider.
  2. Ang IP sa kliyente makaila sa iyang nasud o rehiyon. Alang niini, gigamit ang mga database sa GeoIP, diin daghan kaayo karon. Adunay mga maayo libre nga mga kapilian.
  3. Depende sa lokasyon sa kliyente, ihatag kaniya ang IP address sa labing duol nga CDN server.

DNS server nga adunay geoDNS function mahimong pagtigom sa imong kaugalingon, apan mas maayo nga gamiton ang andam nga mga solusyon nga adunay network sa mga DNS server sa tibuok kalibutan ug Bisan unsa ngacast gikan sa kahon:

  • CloudDNS gikan sa $9.95/bulan, GeoDNS taripa, sa default adunay usa ka DNS Failover
  • Zilore gikan sa $25/bulan, DNS Failover gipalihok
  • Amazon nga Ruta 53 gikan sa $35/bulan para sa net 50M geo-requests. Ang DNS Failover gilain nga gisingil
  • Sayon ang DNS gikan sa $125/bulan, adunay 10 ka DNS Failovers
  • Cloudflare, Ang feature nga "Geo Steering" anaa sa mga plano sa Enterprise

Kung nag-order sa geoDNS, kinahanglan nimo nga hatagan pagtagad ang gidaghanon sa mga hangyo nga gilakip sa taripa ug hinumdomi nga ang tinuud nga gidaghanon sa mga hangyo sa domain mahimong molapas sa mga gilauman sa daghang mga higayon. Minilyon nga mga kaka, scanner, spammer ug uban pang mga daotang espiritu nagtrabaho nga walay kakapoy.

Hapit tanan nga mga serbisyo sa DNS naglakip sa usa ka kinahanglanon nga serbisyo alang sa pagtukod sa usa ka CDN - DNS Failover. Sa tabang niini, mahimo nimong i-set up ang pag-monitor sa operasyon sa imong mga server ug, kung wala’y mga timailhan sa kinabuhi, awtomatiko nga ilisan ang adres sa usa ka dili nagtrabaho nga server nga adunay usa ka backup sa mga tubag sa DNS.

Aron matukod ang among CDN, among gamiton Mga ClouDNS, taripa sa GeoDNS.

Magdugang ta ug bag-ong DNS zone sa imong personal nga account, nga nagpiho sa imong domain. Kung nagtukod kami usa ka CDN sa usa ka subdomain, ug ang panguna nga domain gigamit na, dayon pagkahuman sa pagdugang sa sona, ayaw kalimti nga idugang ang naglungtad nga nagtrabaho nga mga rekord sa DNS. Ang sunod nga lakang mao ang paghimo og daghang A-record para sa CDN domain/subdomain, nga ang matag usa iaplikar sa rehiyon nga among gipiho. Mahimo nimong ipiho ang mga kontinente o mga nasud ingon mga rehiyon, ang mga sub-rehiyon magamit alang sa USA ug Canada.

Sa among kaso, ang CDN ipataas sa usa ka subdomain cdn.sayt.in. Pinaagi sa pagdugang sa usa ka zone sayt.in, paghimo sa unang A-record para sa subdomain ug itudlo ang tibuok North America ngadto sa server sa Chicago:

Pagtukod ug pag-configure sa imong CDN
Atong sublion ang aksyon alang sa ubang mga rehiyon, hinumdoman nga maghimo usa ka entry alang sa default nga mga rehiyon. Ania ang mahitabo sa katapusan:

Pagtukod ug pag-configure sa imong CDN

Ang katapusang default entry sa screenshot nagpasabot nga ang tanang wala matino nga mga rehiyon (ug kini mao ang Europe, Africa, satellite Internet users, etc.) ipadala ngadto sa server sa Frankfurt.

Nakompleto niini ang batakang pag-setup sa DNS. Nagpabilin nga moadto sa website sa tigrehistro sa domain ug pulihan ang kasamtangan nga domain NSs sa mga gi-isyu sa ClouDNS. Ug samtang ang mga NS ma-update, among andamon ang mga server.

Pag-instalar sa mga sertipiko sa SSL

Ang among CDN molihok sa HTTPS, busa kung naa ka na mga sertipiko sa SSL alang sa usa ka domain o subdomain, i-upload kini sa tanan nga mga server, pananglitan, sa direktoryo /etc/ssl/yourdomain/

Kung walay mga sertipiko, mahimo kang makakuha og libre gikan sa Let's Encrypt. Hingpit alang niini ACME Shellscript. Ang kliyente sayon ​​​​ug sayon ​​​​nga i-set up, ug labaw sa tanan, kini nagtugot kanimo sa pag-validate sa usa ka domain/subdomain pinaagi sa DNS pinaagi sa ClouDNS API.

Among i-install ang acme.sh sa usa lamang sa mga server - European 199.247.18.199, diin ang mga sertipiko makopya sa tanan nga uban pa. Aron ma-install, pagdagan:

root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc

Atol sa pag-instalar sa script, usa ka trabaho sa CRON ang pagahimoon alang sa dugang nga pagbag-o sa mga sertipiko nga wala ang among pag-apil.

Kung mag-isyu og sertipiko, ang domain susihon gamit ang DNS gamit ang API, mao nga sa ClouDNS personal nga account sa Reseller API menu, kinahanglan ka nga maghimo usa ka bag-ong user API ug magbutang usa ka password alang niini. Ang resulta nga auth-id nga adunay password isulat sa file ~/.acme.sh/dnsapi/dns_cloudns.sh (dili malibog sa file dns_clouddns.sh). Ania ang mga linya nga kinahanglan nga wala’y komento ug i-edit:

CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<пароль>"

Karon mangayo kami usa ka sertipiko sa SSL alang sa cdn.sayt.in

root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"

Sa mga kapilian, alang sa umaabot, gipiho namon ang usa ka mando nga awtomatiko nga i-reload ang configuration sa web server pagkahuman sa matag pagbag-o sa panahon sa validity sa sertipiko sa umaabot.

Ang tibuuk nga proseso sa pagkuha sa usa ka sertipiko mahimo’g molungtad hangtod sa 2 minuto, ayaw paghunong niini. Kung mahitabo ang sayup sa pag-validate sa domain, sulayi pag-usab ang mando. Sa katapusan atong makita kung diin ang mga sertipiko gi-upload:

Pagtukod ug pag-configure sa imong CDN

Hinumdumi kini nga mga agianan, kinahanglan nila nga ipiho kung gikopya ang sertipiko sa ubang mga server, ingon man sa mga setting sa web server. Wala kami magtagad sa sayup sa pag-reload sa Nginx configs - dili kini sa usa ka hingpit nga na-configure nga server kung mag-update sa mga sertipiko.

Ang nahabilin namong nahabilin alang sa SSL mao ang pagkopya sa nadawat nga sertipiko sa duha pa nga mga server samtang gipadayon ang agianan sa mga file. Maghimo kita og parehas nga mga direktoryo sa matag usa niini ug maghimo usa ka kopya:

root@cdn:~# mkdir -p /root/.acme.sh/cdn.sayt.in/
root@cdn:~# scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/

Aron kanunay nga ma-update ang mga sertipiko, paghimo usa ka adlaw-adlaw nga trabaho sa CRON sa duha nga mga server nga adunay mando:

scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload

Sa kini nga kaso, ang pag-access sa hilit nga gigikanan nga server kinahanglan nga ma-configure pinaagi sa yawe, i.e. nga walay pagsulod sa password. Ayaw kalimot sa pagbuhat niini.

Pag-instalar ug pag-configure sa Nginx

Sa pag-alagad sa static nga sulod, atong gamiton ang Nginx nga gi-configure isip usa ka caching proxy server. I-update ang mga lista sa package ug i-install kini sa tanang tulo ka server:

root@cdn:~# apt update
root@cdn:~# apt install nginx

Imbis nga default, gigamit namon ang config gikan sa spoiler sa ubos:
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-edit sa config:

  • max_size — ang gidak-on sa cache, dili molapas sa magamit nga espasyo sa disk
  • dili aktibo - oras sa pagtipig sa mga naka-cache nga datos nga wala’y naka-access
  • ssl_certificate и ssl_certificate_key — mga agianan sa SSL certificate ug yawe nga mga file
  • proxy_cache_valid - oras sa pagtipig sa naka-cache nga datos
  • proxy_pass — adres sa orihinal nga server diin ang CDN mangayo ug mga file para sa caching. Sa atong pananglitan, kini sayt.in

Sama sa imong nakita, ang tanan yano ra. Ang kalisud mahimong motumaw lamang sa pagtakda sa oras sa pag-cache tungod sa pagkaparehas sa mga direktiba dili aktibo и proxy_cache_valid. Atong analisahon sila uban sa atong ehemplo. Ania kung unsa ang mahitabo kung dili aktibo=7d и proxy_cache_valid 90d:

  • kung ang hangyo dili gisubli sa sulod sa 7 ka adlaw, nan ang datos mapapas gikan sa cache pagkahuman niini nga panahon
  • kung ang hangyo gisubli labing menos kausa sa matag 7 nga mga adlaw, nan ang datos sa cache maisip nga dili na magamit pagkahuman sa 90 nga mga adlaw ug ang Nginx mag-update niini sa sunod nga hangyo, kuhaon kini gikan sa orihinal nga server

Nahuman sa pag-edit nginx.conf, i-reload ang configuration:

root@cdn:~# service nginx reload

Andam na ang atong CDN. Para sa $15/bulan. nakadawat kami og mga punto sa presensya sa tulo ka kontinente ug 3 TB sa trapiko: 1 TB sa matag lokasyon.

Pagsusi sa trabaho sa CDN

Atong tan-awon ang mga ping sa atong CDN gikan sa lain-laing geographic nga mga lokasyon. Ang bisan unsang serbisyo sa ping magamit alang niini.

Punto sa paglusad
Pag-host
IP
Avg nga oras, ms

Alemanya Berlin
cdn.sayt.in
199.247.18.199
9.6

Netherlands, Amsterdam
cdn.sayt.in
199.247.18.199
10.1

Pransiya Paris
cdn.sayt.in
199.247.18.199
16.3

Great Britain, London
cdn.sayt.in
199.247.18.199
14.9

Canada, 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

Сингапур
cdn.sayt.in
157.230.240.216
1.7

Hapon Tokyo
cdn.sayt.in
157.230.240.216
74.8

Australia, Sydney
cdn.sayt.in
157.230.240.216
95.9

Maayo ang resulta. Karon magbutang kami usa ka pagsulay nga imahe sa gamut sa panguna nga site pagsulay.jpg ug susiha ang gikusgon sa pag-download niini pinaagi sa CDN. Giingong- gihimo. Ang sulud dali nga gihatag.

Magsulat kita og gamay nga script kung gusto natong hawanan ang cache sa CDN point.
paglimpyo.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

Aron mapapas ang tibuok cache, pagdagan lang kini, ang usa ka bulag nga file mahimong limpyohan sama niini:

root@cdn:~# ./purge.sh /test.jpg

Inay mga konklusyon

Sa katapusan, gusto nako maghatag pipila ka mapuslanon nga mga tip aron matunob dayon ang rake nga nakapasakit sa akong ulo kaniadtong panahona:

  • Aron madugangan ang pagtugot sa sayup sa CDN, girekomenda nga i-configure ang DNS Failover, nga makatabang sa dali nga pagbag-o sa A record kung adunay pagkaguba sa server. Gihimo kini sa control panel nga mga rekord sa DNS sa domain.
  • Ang mga site nga adunay lapad nga geographic nga sakup sa walay duhaduha nanginahanglan daghang mga CDN, apan dili kita mahimong panatiko. Lagmit dili makamatikod ang user og dakong kalainan kon itandi sa usa ka bayad nga CDN kon imong ibutang ang mga server sa 6-7 ka lokasyon: Europe, North America (east), North America (west), Singapore, Australia, Hong Kong o Japan
  • Usahay ang mga tigdumala dili motugot sa paggamit sa giabangan nga mga server alang sa mga katuyoan sa CDN. Busa, kung kalit ka nga magdesisyon nga mag-deploy sa usa ka network sa paghatud sa sulud ingon usa ka serbisyo, ayaw kalimti nga basahon ang mga lagda sa usa ka partikular nga taghatag sa host.
  • Susihon mapa sa komunikasyon sa ilawom sa tubigsa pagrepresentar sa kon sa unsang paagi ang mga kontinente konektado ug tagdon kini sa diha nga ang pagtukod sa usa ka sulod delivery network
  • Sulayi pagsusi pings gikan sa lain-laing mga dapit sa imong mga server. Niining paagiha makita nimo ang mga rehiyon nga labing duol sa mga punto sa CDN ug mas tukma ang pag-configure sa GeoDNS
  • Depende sa mga buluhaton, kini mapuslanon sa pag-ayo sa Nginx alang sa piho nga mga kinahanglanon sa caching ug pagkonsiderar sa load sa server. Ang mga artikulo bahin sa Nginx cache nakatabang kaayo kanako niini - dinhi ug pagpadali sa trabaho ubos sa bug-at nga mga karga: dinhi и dinhi

Source: www.habr.com