Изградња и конфигурисање вашег ЦДН-а

Мреже за испоруку садржаја (ЦДН) користе веб-сајтови и апликације првенствено да убрзају учитавање статичких елемената. Ово се дешава кеширањем датотека на ЦДН серверима који се налазе у различитим географским регионима. Захтевајући податке преко ЦДН-а, корисник их добија од најближег сервера.

Принцип рада и функционалност свих мрежа за испоруку садржаја је приближно исти. Након што је добио захтев за преузимање датотеке, ЦДН сервер је узима једнократно са оригиналног сервера и даје кориснику, истовремено је кешује у одређеном временском периоду. На све наредне захтеве се одговара из кеша. Сви ЦДН-ови имају опције за претходно учитавање датотека, брисање кеша, подешавање истека кеша и још много тога.

Дешава се да је из ових или оних разлога потребно организовати сопствену мрежу за испоруку садржаја, а онда – нека нам од помоћи буду упутства за склапање следећег бицикла.

Изградња и конфигурисање вашег ЦДН-а
Извор: Инфографички вектор креиран од пикисуперстар — ввв.фреепик.цом

Када вам је потребан сопствени ЦДН?

Хајде да погледамо случајеве у којима покретање сопственог ЦДН-а има смисла:

  • када желите да уштедите новац и текуће трошкове чак и када користите јефтине ЦДН-ове као што су БунниЦДН износе неколико стотина долара месечно
  • ако желимо да добијемо трајни кеш или кеш без суседа на серверу и каналу
  • ЦДН сервиси немају тачке присуства у региону који вам је потребан
  • Потребна су посебна подешавања испоруке садржаја
  • желимо да убрзамо испоруку динамичког садржаја постављањем производних сервера ближе корисницима
  • постоји забринутост да ЦДН услуга треће стране може непрописно прикупљати или користити информације о понашању корисника (поздрав услугама које нису усклађене са ГДПР-ом) или се бавити другим незаконитим активностима

У већини других случајева прикладније је користити постојећа готова решења.

Шта треба да почнете

Дивно је ако имате свој аутономни систем (АС). Помоћу њега можете доделити исту ИП адресу неколико сервера и према овом упутству на нивоу мреже, усмерите кориснике на најближи. Вреди рећи да је чак и са адресним блоком /24 могуће изградити мрежу за испоруку садржаја. Неки провајдери сервера вам дозвољавају да се оглашавате за коришћење у свим регионима који су им доступни.

Ако нисте срећни власник блока ИП адреса, за покретање једноставног ЦДН-а требаће вам:

  • име домена или поддомена
  • најмање два сервера у различитим регионима. Сервер може бити наменски или виртуелни
  • геоДНС алат. Уз његову помоћ, корисник који приступа домену биће усмерен на најближи сервер

Региструјте домен и наручите сервере

Са регистрацијом домена, све је једноставно - региструјемо се у било којој зони код било ког регистратора. Такође можете користити поддомен за ЦДН, на пример нешто попут цдн.домаиннаме.цом. У ствари, у нашем примеру ћемо урадити управо то.

Што се тиче наручивања сервера, они би требало да се изнајмљују у регионима и земљама у којима се налази ваша корисничка публика. Ако је пројекат интерконтинентални, онда је згодно изабрати хостинг провајдере који нуде сервере широм света. Примери: ОВХ, Леасевеб и КСНУМКСТб - за наменске сервере, Вултр и ДигиталОцеан — за виртуелни облак*.

За наш приватни ЦДН наручићемо 3 виртуелна сервера на различитим континентима. У Вултр на серверу за 5 долара месечно добићемо КСНУМКСГБ ССД места и 1ТБ саобраћаја. Током инсталације, изабраћемо најновији Дебиан. Наши сервери:

Изградња и конфигурисање вашег ЦДН-а Франкфурт, ип: 199.247.18.199

Изградња и конфигурисање вашег ЦДН-а Чикаго, ип: 149.28.121.123

Изградња и конфигурисање вашег ЦДН-а Сингапур, ип: 157.230.240.216

*Вултр и ДигиталОцеан обећавају 100 УСД кредита корисницима који се региструју користећи везе у овом чланку када додају начин плаћања. Аутор од овога добија и мали комплимент, који је за њега сада веома значајан. Молимо за разумевање.

Подешавање геоДНС-а

Да бисмо били сигурни да када корисник приступи ЦДН домену или поддомену, буде усмерен на жељени (најближи) сервер, биће нам потребан ДНС сервер са геоДНС функцијом.

Принцип и радна процедура геоДНС-а је следећа:

  1. Дефинише ИП клијента који је послао ДНС захтев или ИП рекурзивног ДНС сервера који се користи приликом обраде клијентског захтева. Такви рекурзивни сервери су обично ДНС провајдери.
  2. ИП клијента идентификује његову земљу или регион. За то се користе ГеоИП базе података којих данас има много. Има добрих бесплатне опције.
  3. У зависности од локације клијента, даје му ИП адресу најближег ЦДН сервера.

ДНС сервер са геоДНС функцијом може бити сами саставите, али је боље користити готова решења са мрежом ДНС сервера широм света и Аницаст из кутије:

  • ЦлоудДНС из 9.95 долара месечно, ГеоДНС тарифа, подразумевано постоји један ДНС Фаиловер
  • Зилоре из 25 долара месечно, ДНС Фаиловер је омогућен
  • Амазон Роуте 53 из 35 долара месечно за чистих 50М гео-упита. ДНС Фаиловер се наплаћује посебно
  • ДНС је постао лак из 125 долара месечно, постоји 10 ДНС грешака
  • цлоудфларе, функција „Гео управљање“ је доступна у Ентерприсе тарифама

Приликом наручивања геоДНС-а треба обратити пажњу на број захтева укључених у тарифу и узети у обзир да стварни број захтева на домен може бити вишеструко већи од очекиваног. Милиони паукова, скенера, спамера и других злих духова неуморно раде.

Скоро све ДНС услуге укључују у цену неизоставну услугу за изградњу ЦДН-а - ДНС Фаиловер. Уз његову помоћ можете подесити праћење рада својих сервера и, ако нема знакова живота, аутоматски заменити адресу нерадног сервера у ДНС одговорима резервном.

За изградњу нашег ЦДН-а користићемо ЦлоуДНС, ГеоДНС тарифа.

Хајде да додамо нову ДНС зону у ваш лични налог, указујући на ваш домен. Ако градимо ЦДН на поддомену, а главни домен је већ у употреби, онда одмах након додавања зоне не заборавите да додате постојеће радне ДНС записе. Следећи корак је креирање неколико А-записа за ЦДН домен/поддомен, од којих ће сваки бити коришћен за регион који смо навели. Можете навести континенте или земље као регионе; подрегиони су доступни за САД и Канаду.

У нашем случају, ЦДН ће бити подигнут на поддомену цдн.саит.ин. Додавањем зоне саит.ин, хајде да направимо први А-запис за поддомен и усмеримо целу Северну Америку на сервер у Чикагу:

Изградња и конфигурисање вашег ЦДН-а
Поновимо радњу за друге регионе, не заборављајући да креирамо један унос за подразумеване регионе. Ево шта добијате на крају:

Изградња и конфигурисање вашег ЦДН-а

Последњи подразумевани унос на снимку екрана значи да ће сви неодређени региони (а то су Европа, Африка, корисници сателитског Интернета, итд.) бити послати на сервер у Франкфурту.

Ово завршава основно подешавање ДНС-а. Остаје само да одете на веб локацију регистратора домена и замените тренутне НС-ове домена онима које је издао ЦлоуДНС. И док се НС ажурирају, ми ћемо припремити сервере.

Инсталирање ССЛ сертификата

Наш ЦДН ће радити преко ХТТПС-а, па ако већ имате ССЛ сертификате за домен или поддомен, отпремите их на све сервере, на пример у директоријум /етц/ссл/иоурдомаин/

Ако немате сертификате, можете добити бесплатан од Лет'с Енцрипт. Савршено за ово АЦМЕ Схелл скрипта. Клијент је згодан и лак за конфигурисање, и што је најважније, омогућава вам да потврдите домен/поддомен користећи ДНС преко АПИ-ја из ЦлоуДНС-а.

Инсталираћемо ацме.сх само на један од сервера - европски 199.247.18.199, са којег ће сертификати бити копирани на све остале. Да бисте инсталирали, урадите:

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

Током инсталације скрипте, креираће се ЦРОН задатак за даље ажурирање сертификата без нашег учешћа.

Верификација домена приликом издавања сертификата ће се вршити преко ДНС-а помоћу АПИ-ја, тако да у свом ЦлоуДНС личном налогу у Реселлер АПИ менију треба да креирате новог АПИ корисника и поставите лозинку за њега. Добијени аутх-ид са лозинком ћемо записати у датотеку ~/.ацме.сх/днсапи/днс_цлоуднс.сх (не треба мешати са датотеком днс_цлоуdднс.сх). Ево редова које треба опозвати коментарисање и изменити:

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

Сада тражимо ССЛ сертификат за цдн.саит.ин

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

У параметрима смо за будућност навели команду за аутоматско поновно учитавање конфигурације веб сервера након сваког будућег ажурирања валидности сертификата.

Цео процес добијања сертификата може трајати до 2 минута, немојте га прекидати. Ако дође до грешке при валидацији домена, покушајте поново да покренете команду. На крају ћемо видети где су сертификати преузети:

Изградња и конфигурисање вашег ЦДН-а

Подсетимо се ових путања, потребно их је навести приликом копирања сертификата на друге сервере, као иу подешавањима веб сервера. Не обраћамо пажњу на грешку поновног учитавања Нгинк конфигурација - на потпуно конфигурисаном серверу неће се појавити приликом ажурирања сертификата.

Све што нам преостаје са ССЛ-ом је да копирамо примљени сертификат на два друга сервера, чувајући путању до датотека. Хајде да направимо исте директоријуме на сваком од њих и направимо копију:

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/

Да бисмо редовно ажурирали сертификате, креираћемо дневни ЦРОН задатак на оба сервера са командом:

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

У овом случају, приступ удаљеном изворном серверу мора бити конфигурисан по кључу, тј. без уношења лозинке. Не заборавите да урадите ово.

Инсталирање и конфигурисање Нгинк-а

За послуживање статичког садржаја користићемо Нгинк конфигурисан као прокси сервер за кеширање. Хајде да ажурирамо листе пакета и инсталирамо их на сва три сервера:

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

Уместо подразумеване, користимо конфигурацију из спојлера испод:
нгинк.цонф

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;
    }
  }
}

У конфигурацији уређујемо:

  • мак_сизе — величина кеша која не прелази расположиви простор на диску
  • неактиван — време складиштења за кеширане податке којима се није приступило
  • ссл_цертифицате и ссл_цертифицате_кеи — путање до ССЛ сертификата и датотека кључева
  • проки_цацхе_валид — време складиштења кешираних података
  • проки_пасс — адреса оригиналног сервера са којег ће ЦДН захтевати датотеке за кеширање. У нашем примеру ово је саит.ин

Као што видите, све је једноставно. Једина потешкоћа може настати у подешавању времена кеширања због сличности директива неактиван и проки_цацхе_валид. Погледајмо их користећи наш пример. Ово се дешава када неактиван=7д и проки_цацхе_валид 90д:

  • ако се захтев не понови у року од 7 дана, подаци ће бити избрисани из кеша након овог периода
  • ако се захтев понови најмање једном сваких 7 дана, онда ће се подаци у кешу сматрати застарелим након 90 дана и са следећим захтевом Нгинк ће их ажурирати, узимајући их са оригиналног сервера

По завршетку уређивања нгинк.цонф, поново учитајте конфигурацију:

root@cdn:~# service nginx reload

Наш ЦДН је потпуно спреман. За 15 долара месечно. добили смо тачке присуства на три континента и 3 ТБ саобраћаја: 1 ТБ на свакој локацији.

Провера рада ЦДН-а

Хајде да погледамо пингове до нашег ЦДН-а са различитих географских локација. Било који пинг сервис је погодан за ово.

Почетна тачка
Домаћин
IP
Просечно време, мс

Немачка Берлин
цдн.саит.ин
199.247.18.199
9.6

Холандија, Амстердам
цдн.саит.ин
199.247.18.199
10.1

Француска Париз
цдн.саит.ин
199.247.18.199
16.3

Велика Британија, Лондон
цдн.саит.ин
199.247.18.199
14.9

Канада, Торонто
цдн.саит.ин
149.28.121.123
16.2

САД, Сан Франциско
цдн.саит.ин
149.28.121.123
52.7

САД, Далас
цдн.саит.ин
149.28.121.123
23.1

САД, Чикаго
цдн.саит.ин
149.28.121.123
2.6

САД, Њујорк
цдн.саит.ин
149.28.121.123
19.8

Сингапур
цдн.саит.ин
157.230.240.216
1.7

Јапан Токио
цдн.саит.ин
157.230.240.216
74.8

Аустралија, Сиднеј
цдн.саит.ин
157.230.240.216
95.9

Резултати су добри. Сада поставимо пробну слику у корен главног сајта тест.јпг и проверите његову брзину преузимања преко ЦДН-а. Речено је - направљен. Садржај се испоручује брзо.

Хајде да напишемо малу скрипту у случају да желимо да обришемо кеш на ЦДН тачки.
пурге.сх

#!/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

Да бисте избрисали цео кеш, само га покрените; можете да обришете засебну датотеку овако:

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

Уместо закључака

На крају желим да дам неколико корисних савета како бих одмах прешао преко грабљи од којих ме је некада заболела глава:

  • Да бисте повећали толеранцију на грешке ЦДН-а, препоручује се да конфигуришете ДНС Фаиловер, што помаже да се А запис брзо промени у случају квара сервера. Ово се ради на контролној табли доменских ДНС записа
  • Сајтови са широким географским дометом ће несумњиво захтевати велики број ЦДН поена, али немојмо бити фанатични. Највероватније, корисник неће приметити значајну разлику у поређењу са плаћеним ЦДН-ом ако поставите сервере на 6-7 места: Европа, Северна Америка (исток), Северна Америка (запад), Сингапур, Аустралија, Хонг Конг или Јапан
  • Понекад хостери не дозвољавају коришћење изнајмљених сервера у ЦДН сврхе. Стога, ако изненада одлучите да поставите мрежу за испоруку садржаја као услугу, не заборавите да унапред прочитате правила вашег одређеног хостинг провајдера
  • Истражите карта подводних комуникацијазамислити како су континенти повезани и узети то у обзир приликом изградње мреже за испоруку садржаја
  • Покушајте да проверите пингови са различитих места на своје сервере. На овај начин можете видети регионе најближе ЦДН тачкама и исправније конфигурисати ГеоДНС
  • У зависности од задатака, било би корисно прилагодити Нгинк специфичним захтевима за кеширање и узимајући у обзир оптерећење на серверу. Чланци о Нгинк кешу су ми много помогли у овоме - овде и убрзање рада под великим оптерећењима: овде и овде

Извор: ввв.хабр.цом