Nglumpukake lan nyetel CDN sampeyan

Jaringan pangiriman konten (CDN) digunakake dening situs web lan aplikasi utamane kanggo nyepetake muatan unsur statis. Iki kedadeyan kanthi cache file ing server CDN sing ana ing wilayah geografis sing beda. Kanthi njaluk data liwat CDN, pangguna nampa saka server sing paling cedhak.

Prinsip operasi lan fungsi kabeh jaringan pangiriman konten kira-kira padha. Sawise nampa panjalukan kanggo ngundhuh file, server CDN njupuk siji-wektu saka server asli lan menehi menyang pangguna, ing wektu sing padha cache kanggo wektu tartamtu. Kabeh panjalukan sakteruse dijawab saka cache. Kabeh CDN duwe opsi kanggo preloading file, ngresiki cache, nyetel kadaluwarsa cache, lan liya-liyane.

Mengkono yen siji alesan utawa liyane perlu kanggo ngatur jaringan pangiriman konten sampeyan dhewe, banjur - muga-muga pandhuan kanggo ngumpulake sepeda sabanjure bisa mbantu kita.

Nglumpukake lan nyetel CDN sampeyan
Source: Vektor infografis digawe pikisuperstar β€” www.freepik.com

Nalika sampeyan butuh CDN dhewe?

Ayo goleki kasus sing mbukak CDN sampeyan dhewe:

  • nalika sampeyan pengin nyimpen dhuwit, lan mlaku biaya malah nalika nggunakake CDNs inexpensive kaya BunnyCDN jumlahe sawetara atus dolar saben sasi
  • yen kita pengin njaluk cache permanen utawa cache tanpa tanggi ing server lan saluran
  • Layanan CDN ora duwe titik ngarsane ing wilayah sing sampeyan butuhake
  • Sembarang setelan pangiriman konten khusus dibutuhake
  • kita pengin nyepetake pangiriman konten dinamis kanthi nempatake server produksi luwih cedhak karo pangguna
  • ana kuwatir yen layanan CDN pihak katelu bisa ngumpulake utawa nggunakake informasi kanthi ora bener babagan prilaku pangguna (halo kanggo layanan sing ora cocog karo GDPR) utawa melu aktivitas ilegal liyane

Ing kasus liyane, luwih cocok nggunakake solusi sing wis ana.

Apa sampeyan kudu miwiti

Apik banget yen sampeyan duwe sistem otonomi dhewe (AS). Karo sampeyan bisa nemtokake IP padha kanggo sawetara server lan miturut pandhuan iki ing tingkat jaringan, pangguna langsung menyang sing paling cedhak. Iku worth ngomong sing malah karo blok alamat /24 bisa kanggo mbangun jaringan pangiriman isi. Sawetara panyedhiya server ngidini sampeyan ngiklanake supaya bisa digunakake ing kabeh wilayah sing kasedhiya.

Yen sampeyan dudu pemilik blok alamat IP sing beruntung, mula kanggo miwiti CDN sing gampang sampeyan butuh:

  • jeneng domain utawa subdomain
  • paling ora loro server ing wilayah beda. Server bisa dadi darmabakti utawa virtual
  • alat geoDNS. Kanthi bantuan, pangguna sing ngakses domain bakal diarahake menyang server sing paling cedhak

Ndhaptar domain lan pesen server

Kanthi registrasi domain, kabeh gampang - kita ndhaptar ing zona apa wae karo registrar apa wae. Sampeyan uga bisa nggunakake subdomain kanggo CDN, contone kaya cdn.domainname.com. Nyatane, ing conto kita bakal nindakake iki.

Minangka kanggo pesenan server, kudu disewakake ing wilayah lan negara ing ngendi pamirsa pangguna sampeyan. Yen proyek kasebut intercontinental, mula luwih gampang milih panyedhiya hosting sing nawakake server ing saindenging jagad. Tuladha: OVH, Leaseweb ΠΈ 100Tb - kanggo server darmabakti, Vultr ΠΈ DigitalOcean β€” kanggo maya virtual*.

Kanggo CDN pribadi kita, kita bakal pesen 3 server virtual ing bawana beda. U Vultr ing server kanggo $5/wulan kita bakal entuk 25GB SSD panggonan lan lalu lintas 1TB. Sajrone instalasi, kita bakal milih Debian paling anyar. Server kita:

Nglumpukake lan nyetel CDN sampeyan Frankfurt, IP: 199.247.18.199

Nglumpukake lan nyetel CDN sampeyan Chicago, IP: 149.28.121.123

Nglumpukake lan nyetel CDN sampeyan Π‘ΠΈΠ½Π³Π°ΠΏΡƒΡ€, IP: 157.230.240.216

*Vultr lan DigitalOcean njanjeni kridit $100 kanggo pangguna sing ndhaptar nggunakake tautan ing artikel iki sawise nambahake cara pembayaran. Penulis uga nampa pujian cilik saka iki, sing penting banget kanggo dheweke saiki. Mangga pangertosan.

Nyetel geoDNS

Kanggo mesthekake yen pangguna ngakses domain utawa subdomain CDN, dheweke diarahake menyang server sing dikarepake (paling cedhak), kita butuh server DNS kanthi fungsi geoDNS.

Prinsip lan prosedur operasi geoDNS kaya ing ngisor iki:

  1. Nemtokake IP klien sing ngirim panjalukan DNS, utawa IP saka server DNS rekursif sing digunakake nalika ngolah panyuwunan klien. Server rekursif kuwi biasane panyedhiya DNS.
  2. IP klien ngenali negara utawa wilayah. Kanggo iki, database GeoIP digunakake, sing saiki akeh banget. Ana sawetara sing apik opsi free.
  3. Gumantung ing lokasi klien, menehi alamat IP server CDN sing paling cedhak.

Server DNS kanthi fungsi geoDNS bisa ngrakit dhewe, nanging luwih becik nggunakake solusi sing wis siap karo jaringan server DNS ing saindenging jagad lan Anycast saka kothak:

  • CloudDNS saka $9.95/wulan, Tarif GeoDNS, kanthi standar ana siji DNS Failover
  • Zilore saka $25/wulan, DNS Failover diaktifake
  • Rute Amazon 53 saka $35/wulan kanggo murni 50M geo-pitakon. DNS Failover dikenani biaya kanthi kapisah
  • DNS Digawe Gampang saka $125/wulan, ana 10 DNS Failovers
  • cloudflare, fungsi "Geo Steering" kasedhiya ing tariff Enterprise

Nalika ngurutake geoDNS, sampeyan kudu menehi perhatian marang jumlah panjaluk sing kalebu ing tarif lan nimbang manawa jumlah panjaluk sing nyata menyang domain kasebut bisa uga kaping pirang-pirang luwih dhuwur tinimbang sing dikarepake. Mayuta-yuta laba-laba, scanner, spammer lan roh-roh jahat liyane ora kesel.

Meh kabeh layanan DNS kalebu ing rega layanan indispensable kanggo mbangun CDN - DNS Failover. Kanthi bantuan, sampeyan bisa nyiyapake ngawasi operasi server lan, yen ora ana tandha-tandha urip, kanthi otomatis ngganti alamat server sing ora bisa digunakake ing tanggapan DNS kanthi serep.

Kanggo mbangun CDN kita bakal nggunakake CloudDNS, Tarif GeoDNS.

Ayo nambah zona DNS anyar ing akun pribadhi, nuduhake domain sampeyan. Yen kita mbangun CDN ing subdomain, lan domain utama wis digunakake, banjur sawise nambah zona, aja lali nambah cathetan DNS sing wis ana. Langkah sabanjure yaiku nggawe sawetara rekaman A kanggo domain/subdomain CDN, saben-saben bakal digunakake kanggo wilayah sing wis ditemtokake. Sampeyan bisa nemtokake bawana utawa negara minangka wilayah; subwilayah kasedhiya kanggo AS lan Kanada.

Ing kasus kita, CDN bakal diunggahake ing subdomain cdn.sayt.in. Kanthi nambah zona sayt.in, ayo nggawe rekaman A pisanan kanggo subdomain lan ngarahake kabeh Amerika Utara menyang server ing Chicago:

Nglumpukake lan nyetel CDN sampeyan
Ayo baleni tumindak kanggo wilayah liyane, ora lali nggawe siji entri kanggo wilayah standar. Mangkene apa sing sampeyan entuk ing pungkasan:

Nglumpukake lan nyetel CDN sampeyan

Entri standar pungkasan ing gambar kasebut tegese kabeh wilayah sing ora ditemtokake (lan iki yaiku Eropa, Afrika, pangguna Internet satelit, lan sapiturute) bakal dikirim menyang server ing Frankfurt.

Iki ngrampungake persiyapan DNS dhasar. Kabeh sing isih ana yaiku pindhah menyang situs web registrar domain lan ngganti NS domain saiki karo sing diterbitake dening ClouDNS. Lan nalika NS dianyari, kita bakal nyiapake server.

Nginstal sertifikat SSL

CDN kita bakal bisa digunakake liwat HTTPS, dadi yen sampeyan wis duwe sertifikat SSL kanggo domain utawa subdomain, upload menyang kabeh server, contone menyang direktori /etc/ssl/yourdomain/

Yen sampeyan ora duwe sertifikat, sampeyan bisa entuk sertifikat gratis saka Ayo Encrypt. Sampurna kanggo iki skrip Shell ACME. Klien trep lan gampang diatur, lan sing paling penting, ngidini sampeyan validasi domain / subdomain nggunakake DNS liwat API saka CloudDNS.

Kita bakal nginstal acme.sh mung ing salah sawijining server - Eropa 199.247.18.199, saka ngendi sertifikat bakal disalin menyang kabeh liyane. Kanggo nginstal, tindakake:

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

Sajrone instalasi skrip, tugas CRON bakal digawe kanggo nganyari sertifikat luwih lanjut tanpa partisipasi kita.

Verifikasi domain nalika nerbitake sertifikat bakal dileksanakake liwat DNS nggunakake API, supaya ing akun pribadi ClouDNS ing menu Reseller API sampeyan kudu nggawe pangguna API anyar lan nyetel sandhi kanggo. Kita bakal nulis asil auth-id nganggo sandhi ing file ~/.acme.sh/dnsapi/dns_cloudns.sh (ora bakal bingung karo file dns_clouddns.sh). Ing ngisor iki baris sing kudu ora diomentari lan diowahi:

CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<ΠΏΠ°Ρ€ΠΎΠ»ΡŒ>"

Saiki ayo njaluk sertifikat SSL kanggo cdn.sayt.in

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

Ing paramèter, kanggo mbesuk, kita nemtokake prentah kanggo ngunggah ulang konfigurasi server web kanthi otomatis sawise saben nganyari validitas sertifikat ing mangsa ngarep.

Proses kabeh entuk sertifikat bisa nganti 2 menit, aja ngganggu. Yen ana kesalahan validasi domain, coba jalanake printah maneh. Ing pungkasan kita bakal weruh ing ngendi sertifikat diundhuh:

Nglumpukake lan nyetel CDN sampeyan

Ayo elinga dalan kasebut; kudu ditemtokake nalika nyalin sertifikat menyang server liyane, uga ing setelan server web. Kita ora nggatekake kesalahan ngunggah ulang konfigurasi Nginx - ing server sing wis dikonfigurasi kanthi lengkap, ora bakal katon nalika nganyari sertifikat.

Kabeh sing isih ana kanggo kita nganggo SSL yaiku nyalin sertifikat sing ditampa menyang rong server liyane, njaga dalan menyang file kasebut. Ayo nggawe direktori sing padha ing saben wong lan nggawe 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/

Kanggo nganyari sertifikat kanthi rutin, kita bakal nggawe tugas CRON saben dina ing loro server kanthi prentah:

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

Ing kasus iki, akses menyang server sumber remot kudu dikonfigurasi dening kunci, i.e. tanpa ngetik sandhi. Aja lali nindakake iki.

Nginstal lan konfigurasi Nginx

Kanggo nglayani konten statis, kita bakal nggunakake Nginx sing dikonfigurasi minangka server proxy caching. Ayo nganyari dhaptar paket lan nginstal ing kabeh telung server:

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

Tinimbang standar, kita nggunakake konfigurasi saka spoiler ing ngisor iki:
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;
    }
  }
}

Ing konfigurasi kita nyunting:

  • ukuran_maks - ukuran cache ora ngluwihi ruang disk sing kasedhiya
  • ora aktif - wektu panyimpenan kanggo data cache sing durung diakses
  • ssl_sertifikat ΠΈ ssl_certificate_key - path menyang sertifikat SSL lan file kunci
  • proxy_cache_valid - wektu panyimpenan data cache
  • proxy_pass β€” alamat server asli saka ngendi CDN bakal njaluk file kanggo caching. Ing conto kita iki sayt.in

Nalika sampeyan bisa ndeleng, kabeh iku prasaja. Mung kangelan bisa njedhul ing nyetel wektu caching amarga podho saka arahan ora aktif ΠΈ proxy_cache_valid. Ayo ndeleng wong-wong mau nggunakake conto kita. Iki kedadeyan nalika ora aktif=7d ΠΈ proxy_cache_valid 90d:

  • yen panjalukan ora diulang ing 7 dina, data bakal dibusak saka cache sawise periode iki
  • yen panjaluk kasebut diulang paling ora sapisan saben 7 dina, mula data ing cache bakal dianggep kedaluwarsa sawise 90 dina lan kanthi panjaluk sabanjure Nginx bakal nganyari, njupuk saka server asli.

Wis rampung nyunting nginx.conf, muat ulang konfigurasi:

root@cdn:~# service nginx reload

CDN kita wis siyap. Kanggo $ 15 / sasi. kita nampa titik ngarsane ing telung bawana lan 3 TB lalu lintas: 1 TB ing saben lokasi.

Priksa operasi CDN

Ayo goleki ping menyang CDN saka macem-macem lokasi geografis. Sembarang layanan ping cocok kanggo iki.

Titik wiwitan
Host
IP
Wektu rata-rata, ms

Jerman Berlin
cdn.sayt.in
199.247.18.199
9.6

Walanda, Amsterdam
cdn.sayt.in
199.247.18.199
10.1

Prancis Paris
cdn.sayt.in
199.247.18.199
16.3

Inggris Raya, London
cdn.sayt.in
199.247.18.199
14.9

Kanada, Toronto
cdn.sayt.in
149.28.121.123
16.2

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

Jepang Tokyo
cdn.sayt.in
157.230.240.216
74.8

Australia, Sydney
cdn.sayt.in
157.230.240.216
95.9

Hasile apik. Saiki ayo nyelehake gambar tes ing oyod situs utama test.jpg lan mriksa kacepetan download liwat CDN. Punika ngandika- digawe. Isi dikirim kanthi cepet.

Ayo nulis skrip cilik yen kita pengin mbusak cache ing 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

Kanggo mbusak kabeh cache, mung mbukak; sampeyan bisa mbusak file sing kapisah kaya iki:

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

Nanging kesimpulan

Pungkasan, aku pengin menehi sawetara tips sing migunani supaya bisa langsung ngubengi garu sing nate ngelu:

  • Kanggo nambah toleransi fault CDN, dianjurake kanggo ngatur DNS Failover, sing mbantu cepet ngganti rekaman A nalika gagal server. Iki ditindakake ing panel kontrol rekaman DNS domain
  • Situs kanthi jangkauan geografis sing wiyar mesthi mbutuhake titik CDN sing akeh, nanging aja dadi fanatik. Paling kamungkinan, pangguna ora bakal ngelingi prabΓ©dan sing signifikan dibandhingake karo CDN sing dibayar yen sampeyan nyelehake server ing 6-7 panggonan: Eropa, Amerika Utara (wΓ©tan), Amerika Utara (kulon), Singapura, Australia, Hong Kong utawa Jepang
  • Kadhangkala hoster ora ngidini nggunakake server sing disewakake kanggo tujuan CDN. Mulane, yen sampeyan dumadakan arep masang jaringan pangiriman konten minangka layanan, aja lali maca aturan panyedhiya hosting khusus sampeyan luwih dhisik.
  • Jelajahi peta komunikasi ing jero banyukanggo mbayangno carane bawana disambungake lan njupuk iki menyang akun nalika mbangun jaringan pangiriman isi
  • Coba priksa ping saka macem-macem panggonan menyang server sampeyan. Kanthi cara iki sampeyan bisa ndeleng wilayah sing paling cedhak karo titik CDN lan ngatur GeoDNS kanthi luwih bener
  • Gumantung ing tugas, bakal migunani kanggo ngatur Nginx kanggo syarat caching tartamtu lan njupuk beban ing server. Artikel babagan cache Nginx mbantu aku akeh babagan iki - kene lan akselerasi karya ing beban abot: kene ΠΈ kene

Source: www.habr.com