Ngawangun sareng ngonpigurasikeun CDN anjeun

Jaringan Pangiriman Kandungan (CDN) dianggo dina situs wéb sareng aplikasi utamina pikeun nyepetkeun muatan unsur statik. Ieu lumangsung alatan cache file dina server CDN lokasina di wewengkon géografis béda. Ku requesting data via CDN, pamaké narima eta ti server pangcaketna.

Prinsip operasi sareng fungsionalitas sadaya jaringan pangiriman eusi kirang langkung sami. Saatos nampi pamenta pikeun ngaunduh file, server CDN nyandak éta sakali-waktos ti pangladén asli sareng masihan ka pangguna, dina waktos anu sami cache pikeun waktos anu ditangtukeun. Kabéh requests saterusna diwaler ti cache nu. Sadaya CDN gaduh pilihan pikeun ngamuat file, mupus cache, nyetél tanggal béakna, sareng seueur deui.

Éta kajadian éta, pikeun hiji alesan atawa sejen, Anjeun kudu ngatur jaringan pangiriman eusi Anjeun sorangan, lajeng - hayu parentah pikeun assembling sapédah salajengna jadi mantuan kami.

Ngawangun sareng ngonpigurasikeun CDN anjeun
sumber: Vektor infographic dijieun ku pikisuperstar - www.freepik.com

Nalika anjeun peryogi CDN anjeun nyalira

Pertimbangkeun kasus dimana ngajalankeun CDN anjeun nyalira:

  • lamun aya kahayang pikeun nyimpen duit, sarta ngajalankeun waragad sanajan ngagunakeun CDNs murah kawas BunnyCDN jumlahna sababaraha ratus dollar sabulan
  • upami urang hoyong kéngingkeun cache permanén atanapi cache tanpa server sareng saluran tatangga
  • jasa CDN teu boga titik ayana di wewengkon nu peryogi
  • sagala setélan pangiriman eusi husus diperlukeun
  • urang hoyong nyepetkeun pangiriman eusi dinamis ku cara nempatkeun server produksi ngadeukeutan ka pamaké
  • aya kahariwang yén ladenan CDN pihak katilu tiasa ngumpulkeun sacara ilegal atanapi nganggo inpormasi ngeunaan paripolah pangguna (halo jasa anu henteu patuh GDPR) atanapi kalibet dina kagiatan ilegal anu sanés.

Dina kalolobaan kasus anu sanés, langkung pas ngagunakeun solusi anu tos aya.

Naon anu anjeun peryogikeun pikeun ngamimitian

Éta éndah upami anjeun gaduh Sistem Otonom anjeun (AS). Kalayan éta, anjeun tiasa napelkeun IP anu sami ka sababaraha server sareng nurutkeun parentah ieu di tingkat jaringan, langsung pamaké ka nu pangdeukeutna. Eta sia nyebutkeun yen sanajan kalawan blok alamat /24, kasebut nyaéta dimungkinkeun pikeun ngawangun jaringan pangiriman eusi. Sababaraha panyadia server ngidinan Anjeun pikeun nyieun hiji pengumuman pikeun pamakéan di sakabeh wewengkon sadia pikeun aranjeunna.

Upami anjeun sanés pamilik blok alamat IP, teras pikeun ngajalankeun CDN saderhana anjeun peryogi:

  • ngaran domain atawa subdomain
  • sahenteuna dua server di wewengkon béda. Server tiasa janten dedicated atanapi virtual
  • alat geoDNS. Kalayan éta, pangguna, saatos alamat domain, bakal diarahkeun ka server anu pangcaketna

Ngadaptarkeun domain sareng pesenan server

Kalayan pendaptaran domain, sadayana saderhana - urang ngadaptar dina zona naon waé kalayan pendaptaran naon waé. Anjeun oge bisa make subdomain pikeun CDN, contona hal kawas cdn.domainname.com. Sabenerna, dina conto urang, urang bakal ngalakukeun ngan éta.

Sedengkeun pikeun mesen server, aranjeunna kedah disewa di daérah sareng nagara dimana pamiarsa pangguna anjeun aya. Upami proyék éta antar benua, maka éta cocog pikeun milih panyadia hosting anu nawiskeun server di sakumna dunya sakaligus. conto: OVH, ngajakan web и 100Tb - pikeun server dedicated, Vultr и DigitalOcean — pikeun awan maya*.

Pikeun CDN swasta kami, kami bakal mesen 3 server virtual di benua béda. Di Vultr dina server pikeun $5/bln urang bakal meunang 25GB SSD tempat jeung 1TB lalulintas. Nalika masang, pilih Debian panganyarna. Server kami:

Ngawangun sareng ngonpigurasikeun CDN anjeun Frankfurt, IP: 199.247.18.199

Ngawangun sareng ngonpigurasikeun CDN anjeun Chicago, IP: 149.28.121.123

Ngawangun sareng ngonpigurasikeun CDN anjeun Сингапур, IP: 157.230.240.216

* Vultr sareng DigitalOcean ngajanjikeun kiridit $100 ka pangguna anu ngadaptarkeun tautan dina tulisan langsung saatos nambihan metode pamayaran. Panulis ogé nampi pujian leutik tina ieu, anu penting pisan pikeun anjeunna ayeuna. Mangga kahartos.

Nyetél geoDNS

Supados pangguna diarahkeun ka server anu dipikahoyong (pangdeukeutna) nalika ngaksés domain atanapi subdomain CDN, urang peryogi server DNS kalayan fungsi geoDNS.

Prinsip sareng operasi geoDNS nyaéta kieu:

  1. Nangtukeun IP tina klien nu ngirim pamundut DNS, atawa IP tina server DNS recursive nu dipaké nalika ngolah pamundut klien. Server recursive sapertos biasana DNS-s tina panyadia.
  2. IP klien ngakuan nagara atanapi wilayahna. Kanggo ieu, basis data GeoIP dianggo, anu seueur pisan ayeuna. Aya alus bebas pilihan.
  3. Gumantung kana lokasi klien, masihan anjeunna alamat IP tina server CDN pangcaketna.

DNS server kalawan fungsi geoDNS tiasa ngumpul sorangan, tapi langkung saé ngagunakeun solusi anu siap-siap sareng jaringan server DNS di sakumna dunya sareng Naon waé tina kotak:

  • CloudDNS от $9.95/bln, Tarif GeoDNS, sacara standar aya hiji DNS Failover
  • Zilore от $25/bln, DNS Failover diaktipkeun
  • Amazon Rute 53 от $35/bln pikeun net 50M geo-pamundut. DNS Failover ditagih nyalira
  • DNS Didamel Gampang от $125/bln, aya 10 DNS Failovers
  • Cloudflare, Fitur "Geo Steering" sayogi dina rencana Perusahaan

Nalika mesen geoDNS, anjeun kedah nengetan jumlah pamenta anu kalebet dina tarif sareng émut yén jumlah saleresna pamundut ka domain tiasa ngaleuwihan ekspektasi sababaraha kali. Jutaan lancah, scanner, spammer sareng roh-roh jahat anu sanés damel tanpa kesel.

Ampir sadaya jasa DNS kalebet jasa anu penting pikeun ngawangun CDN - DNS Failover. Kalayan bantosanana, anjeun tiasa nyetél ngawaskeun operasi pangladén anjeun sareng, upami henteu aya tanda-tanda kahirupan, sacara otomatis ngagentos alamat pangladén anu henteu tiasa dianggo sareng cadangan dina réspon DNS.

Pikeun ngawangun CDN kami, kami bakal ngagunakeun CloudDNS, Tarif GeoDNS.

Hayu urang tambahkeun zona DNS anyar dina akun pribadi anjeun, nangtukeun domain anjeun. Upami urang ngawangun CDN dina subdomain, sareng domain utama parantos dianggo, teras saatos nambihan zona, tong hilap nambihan rékaman DNS anu aya. Lengkah saterusna nyaéta nyieun sababaraha A-rékam pikeun CDN domain / subdomain, nu masing-masing bakal dilarapkeun ka wewengkon urang dieusian. Anjeun tiasa netepkeun buana atanapi nagara salaku daérah, sub-wilayah sayogi pikeun AS sareng Kanada.

Dina hal urang, CDN bakal diangkat dina subdomain a cdn.sayt.in. Ku nambahkeun zone a sayt.in, Jieun A-catetan munggaran pikeun subdomain jeung nunjuk sakabéh Amérika Kalér ka server di Chicago:

Ngawangun sareng ngonpigurasikeun CDN anjeun
Hayu urang malikan deui tindakan pikeun daérah sanés, émut pikeun nyiptakeun hiji éntri pikeun daérah standar. Ieu naon anu kajantenan tungtungna:

Ngawangun sareng ngonpigurasikeun CDN anjeun

Éntri standar anu terakhir dina layar ngandung harti yén sadaya daérah anu henteu ditangtukeun (sareng ieu nyaéta Éropa, Afrika, pangguna Internet satelit, jsb.) bakal dikirim ka server di Frankfurt.

Ieu ngalengkepan setelan DNS dasar. Éta tetep angkat ka halaman wéb pendaptaran domain sareng ngagentos NS domain ayeuna sareng anu dikaluarkeun ku ClouDNS. Sarta bari NSs bakal diropéa, urang bakal nyiapkeun server.

Pamasangan sertipikat SSL

CDN kami bakal dianggo dina HTTPS, janten upami anjeun parantos gaduh sertipikat SSL pikeun domain atanapi subdomain, unggah ka sadaya server, contona, kana diréktori. /etc/ssl/yourdomain/

Upami teu aya sertipikat, anjeun tiasa kéngingkeun sertipikat gratis tina Let's Encrypt. Sampurna pikeun ieu ACME Shellscript. Klién éta merenah sareng gampang disetél, sareng anu paling penting, éta ngamungkinkeun anjeun pikeun ngesahkeun domain / subdomain ku DNS via API CloudDNS.

Urang bakal install acme.sh on ngan salah sahiji server - Éropa 199.247.18.199, ti mana sertipikat bakal disalin ka sadaya lianna. Pikeun masang, jalankeun:

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

Salila pamasangan naskah, pakasaban CRON bakal dijieun pikeun pembaharuan salajengna sertipikat tanpa partisipasi urang.

Nalika ngaluarkeun sertipikat, domain bakal dipariksa nganggo DNS nganggo API, janten dina akun pribadi ClouDNS dina menu Reseller API, anjeun kedah nyiptakeun API pangguna énggal sareng nyetél kecap konci pikeun éta. Hasil auth-id sareng kecap akses bakal diserat dina file ~/.acme.sh/dnsapi/dns_cloudns.sh (teu matak bingung sareng file dns_clouddns.sh). Ieu mangrupikeun garis anu kedah dikoméntar sareng diédit:

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

Ayeuna kami bakal menta sertipikat SSL pikeun cdn.sayt.in

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

Dina pilihan, pikeun mangsa nu bakal datang, kami geus dieusian paréntah pikeun otomatis ngamuat konfigurasi web server sanggeus unggal pembaharuan periode validitas sertipikat dina mangsa nu bakal datang.

Sakabeh proses pikeun meunangkeun sertipikat tiasa nyandak nepi ka 2 menit, ulah ngaganggu eta. Upami aya kasalahan validasi domain, cobian ngajalankeun paréntah deui. Dina tungtungna urang bakal ningali dimana sertipikat parantos diunggah:

Ngawangun sareng ngonpigurasikeun CDN anjeun

Émut jalur ieu, aranjeunna kedah ditetepkeun nalika nyalin sertipikat ka server sanés, ogé dina setélan pangladén wéb. Kami henteu nengetan kasalahan ngamuat ulang konfigurasi Nginx - éta moal aya dina server anu dikonpigurasi pinuh nalika ngamutahirkeun sertipikat.

Sadaya anu kami tinggalkeun pikeun SSL nyaéta nyalin sertipikat anu ditampi ka dua server sanés bari ngajaga jalur kana file. Hayu urang ngadamel diréktori anu sami dina masing-masing sareng ngadamel salinan:

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/

Pikeun ngapdet sertipikat sacara rutin, jieun padamelan CRON sadinten dina dua server kalayan paréntah:

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

Dina hal ieu, aksés ka server sumber jauh kudu ngonpigurasi ku konci, i.e. tanpa ngasupkeun sandi. Tong hilap laksanakeun.

Masang sareng ngonpigurasikeun Nginx

Pikeun ngalayanan eusi statik, urang bakal nganggo Nginx dikonpigurasi salaku server proxy cache. Apdet daptar pakét sareng pasang dina sadaya tilu server:

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

Gantina standar, kami nganggo konfigurasi tina spoiler di handap ieu:
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;
    }
  }
}

Édit dina konfigurasi:

  • max_size - ukuran cache, teu ngaleuwihan spasi disk sadia
  • teu aktip - waktos neundeun data sindangan anu teu aya anu diaksés
  • ssl_sertipikat и ssl_certificate_key - jalur ka sertipikat SSL sareng file konci
  • proxy_cache_valid - waktos neundeun data sindangan
  • proxy_pass — alamat server aslina ti mana CDN bakal menta file pikeun cache. Dina conto urang, ieu sayt.in

Sakumaha anjeun tiasa tingali, sagalana geus basajan. Kasesahan ngan tiasa timbul dina netepkeun waktos caching kusabab kamiripan diréktif teu aktip и proxy_cache_valid. Hayu urang analisa aranjeunna kalayan conto urang. Ieu naon anu lumangsung nalika teu aktif=7d и proxy_cache_valid 90d:

  • upami pamundutna henteu diulang dina 7 dinten, maka datana bakal dipupus tina cache saatos periode ieu
  • Upami pamundutna diulang sahenteuna sakali unggal 7 dinten, maka data dina cache bakal dianggap leungit saatos 90 dinten sareng Nginx bakal ngapdet deui kalayan pamundut salajengna, nyandak tina server asli.

Réngsé ngédit nginx.conf, muat ulang konfigurasi:

root@cdn:~# service nginx reload

CDN kami parantos siap. Pikeun $ 15 / bln. kami nampi titik ayana dina tilu buana jeung 3 TB lalulintas: 1 TB di unggal lokasi.

Mariksa karya CDN

Hayu urang tingali ping ka CDN urang ti lokasi geografis anu béda. Sakur jasa ping tiasa dianggo pikeun ieu.

Titik peluncuran
Host
IP
Rata-rata waktos, ms

Jérman Berlin
cdn.sayt.in
199.247.18.199
9.6

Walanda, Amsterdam
cdn.sayt.in
199.247.18.199
10.1

Perancis Paris
cdn.sayt.in
199.247.18.199
16.3

Britania Ageung, London
cdn.sayt.in
199.247.18.199
14.9

Kanada, Toronto
cdn.sayt.in
149.28.121.123
16.2

AS, San Fransisco
cdn.sayt.in
149.28.121.123
52.7

Amérika Sarikat, Dallas
cdn.sayt.in
149.28.121.123
23.1

AS, Chicago
cdn.sayt.in
149.28.121.123
2.6

AS, New York
cdn.sayt.in
149.28.121.123
19.8

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

Jepang Tokyo
cdn.sayt.in
157.230.240.216
74.8

Australia, Sydney
cdn.sayt.in
157.230.240.216
95.9

Hasilna alus. Ayeuna urang bakal nempatkeun gambar uji dina akar situs utama test.jpg jeung pariksa speed download na via CDN. Konon - didamel. Eusi dikirimkeun gancang.

Hayu urang nyerat skrip leutik upami urang hoyong mupus cache dina titik CDN.
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

Pikeun mupus sakabéh cache, ngan ngajalankeun eta, file misah bisa cleaned kawas kieu:

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

Daripada kasimpulan

Tungtungna, abdi hoyong masihan sababaraha tips mangpaat ambéh maranéhanana langsung ngaléngkah ngaliwatan rake nu nyieun sirah kuring nyeri dina waktu éta:

  • Pikeun ningkatkeun kasabaran kasalahan tina CDN, disarankeun pikeun ngonpigurasikeun DNS Failover, anu ngabantosan gancang ngarobih catetan A upami aya gangguan server. Hal ieu dilakukeun dina rékaman DNS panel kontrol domain.
  • Situs-situs anu gaduh cakupan geografis anu lega henteu ragu-ragu ngabutuhkeun sajumlah CDN anu ageung, tapi hayu urang henteu fanatik. Paling dipikaresep pamaké moal aya bewara béda anu signifikan dibandingkeun jeung CDN mayar lamun nempatkeun server di 6-7 lokasi: Éropa, Amérika Kalér (wétan), Amérika Kalér (kulon), Singapura, Australia, Hong Kong atawa Jepang.
  • Kadang hosters henteu ngijinkeun panggunaan server anu disewa pikeun tujuan CDN. Kukituna, upami anjeun ujug-ujug mutuskeun nyebarkeun jaringan pangiriman kontén salaku jasa, tong hilap maca aturan panyadia hosting khusus sateuacanna.
  • Ngajalajah peta komunikasi jero caipikeun ngagambarkeun kumaha buana disambungkeun tur tumut kana akun nalika ngawangun jaringan pangiriman eusi
  • Coba pariksa pings ti tempat béda ka server Anjeun. Ku cara ieu anjeun tiasa ningali daérah anu paling caket kana titik CDN sareng ngonpigurasikeun GeoDNS langkung leres
  • Gumantung kana tugas, éta bakal mangpaat pikeun ngepaskeun Nginx pikeun syarat caching khusus sareng nganggap beban dina server. Tulisan ngeunaan cache Nginx ngabantosan kuring dina ieu - di dieu jeung akselerasi gawé dina beban beurat: di dieu и di dieu

sumber: www.habr.com