Les rĂ©seaux de distribution de contenu (CDN) sont utilisĂ©s sur les sites et dans les applications principalement pour accĂ©lĂ©rer le chargement des Ă©lĂ©ments statiques. Cela se produit en raison de la mise en cache des fichiers sur les serveurs CDN situĂ©s dans diffĂ©rentes rĂ©gions gĂ©ographiques. AprĂšs avoir demandĂ© des donnĂ©es via CDN, l'utilisateur les reçoit du serveur le plus proche.Le principe de fonctionnement et de fonctionnalitĂ© de tous les rĂ©seaux de diffusion de contenu est Ă peu prĂšs le mĂȘme. Ayant reçu une demande de tĂ©lĂ©chargement d'un fichier, le serveur CDN le prend une fois du serveur d'origine et le remet Ă l'utilisateur, en mĂȘme temps la mise en cache pendant une durĂ©e donnĂ©e. Toutes les demandes suivantes reçoivent une rĂ©ponse du cache. Tous les CDN ont des options pour le prĂ©chargement de fichiers, l'effacement du cache, la dĂ©finition de sa pĂ©riode de rĂ©tention, et bien plus encore.Il arrive que pour une raison ou une autre, il soit nĂ©cessaire d'organiser notre propre rĂ©seau de diffusion de contenu, puis - laissez-nous vous aider Ă construire un autre vĂ©lo.
Source: vecteur infographique créé par pikisuperstar - www.freepik.comLorsque vous avez besoin de votre propre CDN
Tenez compte des cas lors du dĂ©marrage de votre propre CDN:- lorsque vous voulez Ă©conomiser de l'argent et que les coĂ»ts de fonctionnement mĂȘme en utilisant des CDN peu coĂ»teux comme BunnyCDN sont de plusieurs centaines de dollars par mois
- si nous voulons obtenir un cache permanent ou un cache sans voisins sur le serveur et le canal
- dans la région dont vous avez besoin, les services CDN n'ont pas de points de présence
- tout paramÚtre de diffusion de contenu spécial requis
- nous voulons accélérer la livraison de contenu dynamique en nous rapprochant des utilisateurs du serveur de production
- il existe une crainte qu'un service CDN tiers puisse collecter ou utiliser illégalement des informations sur le comportement des utilisateurs (accÚs aux services sans GDPR) ou se livrer à d'autres actions illégales
Dans la plupart des autres cas, il est prĂ©fĂ©rable d'utiliser des solutions prĂȘtes Ă l'emploi existantes.Ce dont vous avez besoin pour courir
C'est merveilleux si vous avez votre propre systĂšme autonome (AS). Avec lui, vous pouvez attribuer la mĂȘme IP Ă plusieurs serveurs et suivre cette instruction au niveau du rĂ©seau pour diriger les utilisateurs vers le plus proche. Il faut dire que mĂȘme avec le bloc d'adresses / 24, il est possible de construire un rĂ©seau de diffusion de contenu. Certains fournisseurs de serveurs vous permettent de faire une annonce Ă utiliser dans toutes les rĂ©gions Ă leur disposition.Si vous n'ĂȘtes pas un heureux propriĂ©taire d'un bloc d'adresses IP, alors pour exĂ©cuter un simple CDN, vous aurez besoin de:Avec l'enregistrement de domaine, tout est simple - inscrivez-vous dans n'importe quelle zone avec n'importe quel registraire. Vous pouvez Ă©galement utiliser un sous-domaine pour un CDN, tel que quelque chose comme cdn.namedomain.com . En fait, dans notre exemple, nous le ferons.Quant aux serveurs de commande, ils doivent ĂȘtre louĂ©s dans les rĂ©gions et pays oĂč se trouve votre audience d'utilisateurs. Si le projet est intercontinental, il est pratique de choisir immĂ©diatement des hĂ©bergeurs qui proposent des serveurs partout dans le monde. Exemples: OVH , Leaseweb et 100 To pour les serveurs dĂ©diĂ©s, Vultr et DigitalOcean pour le cloud virtuel *.Pour notre CDN privĂ©, nous commandons 3 serveurs virtuels sur diffĂ©rents continents. Ă vultrsur le serveur pour 5 $ / mois, nous obtenons 25 Go d' espace SSD et 1 To de trafic . Lors de l'installation, sĂ©lectionnez la derniĂšre Debian. Nos serveurs:
Francfort , ip: 199.247.18.199
Chicago , ip: 149.28.121.123
Singapour , ip: 157.230.240.216* Vultr et DigitalOcean promettent un prĂȘt de 100 $ aux utilisateurs enregistrĂ©s en utilisant les liens dans l'article immĂ©diatement aprĂšs l'ajout d'un mode de paiement. L'auteur en reçoit Ă©galement un petit compliment, ce qui est trĂšs important pour lui maintenant. Soyez comprĂ©hensif.Configurer geoDNS
Pour qu'un utilisateur accÚde à un domaine ou sous-domaine CDN, il soit dirigé vers le serveur souhaité (le plus proche de lui), nous avons besoin d'un serveur DNS avec fonction geoDNS.Le principe et la procédure de geoDNS sont les suivants:- Définit l'IP du client qui a envoyé la demande DNS ou l'IP du serveur DNS récursif utilisé pour traiter la demande client. Ces serveurs récursifs sont généralement des fournisseurs DNS.
- Par IP, le client connaßt son pays ou sa région. Pour cela, des bases GeoIP sont utilisées, dont il existe aujourd'hui un grand nombre. Il existe de bonnes options gratuites .
- En fonction de l'emplacement du client, il lui donne l'adresse IP du serveur CDN le plus proche.
Vous pouvez crĂ©er vous-mĂȘme un serveur DNS avec la fonction geoDNS , mais il est prĂ©fĂ©rable d'utiliser des solutions prĂȘtes Ă l'emploi avec un rĂ©seau de serveurs DNS dans le monde entier et Anycast prĂȘt Ă l'emploi :- louDNS Ă partir de 9,95 $ / mois , tarif GeoDNS, par dĂ©faut il y a un basculement DNS
- Zilore à partir de 25 $ / mois , basculement DNS activé
- Amazon Route 53 Ă partir de 35 $ / mois pour 50 millions de requĂȘtes gĂ©ographiques nettes. Le basculement DNS est facturĂ© sĂ©parĂ©ment
- DNS Made Easy Ă partir de 125 $ / mois , il y a 10 basculements DNS
- Cloudflare , fonction de pilotage géographique disponible dans les tarifs d'entreprise
Lors de la commande de geoDNS, vous devez faire attention au nombre de demandes incluses dans le tarif et tenir compte du fait que le nombre rĂ©el d'appels vers le domaine peut dĂ©passer plusieurs fois les attentes. Des millions d'araignĂ©es, de scanners, de spammeurs et d'autres mauvais esprits travaillent sans relĂąche.Presque tous les services DNS incluent un indispensable pour la crĂ©ation d'un service CDN - le basculement DNS. En l'utilisant, vous pouvez configurer la surveillance de vos serveurs et, en l'absence de signes de vie, remplacer automatiquement l'adresse du serveur qui ne fonctionne pas par un serveur de sauvegarde dans les rĂ©ponses DNS.Pour construire notre CDN, nous utiliserons ClouDNS , le tarif GeoDNS.Ajoutez une nouvelle zone DNS dans votre compte, en indiquant votre domaine. Si nous allons crĂ©er le CDN sur un sous-domaine et que le domaine principal est dĂ©jĂ utilisĂ©, alors immĂ©diatement aprĂšs l'ajout de la zone, n'oubliez pas d'ajouter les enregistrements DNS existants. L'Ă©tape suivante consiste Ă crĂ©er pour le domaine / sous-domaine CDN plusieurs enregistrements A, dont chacun sera appliquĂ© Ă la rĂ©gion que nous avons dĂ©finie. Vous pouvez spĂ©cifier des continents ou des pays comme rĂ©gions; des sous-rĂ©gions sont disponibles pour les Ătats-Unis et le Canada.Dans notre cas, le CDN sera portĂ© sur la cdn.sayt.in sous - domaine . En ajoutant la zone sayt.in , crĂ©ez le premier enregistrement A pour le sous-domaine et dirigez toute l'AmĂ©rique du Nord vers le serveur de Chicago:RĂ©pĂ©tez l'opĂ©ration pour les autres rĂ©gions, en vous rappelant de crĂ©er une entrĂ©e pour les rĂ©gions par dĂ©faut. Voici le rĂ©sultat:Le dernier enregistrement par dĂ©faut dans la capture d'Ă©cran signifie que toutes les rĂ©gions tacites (c'est-Ă -dire l'Europe, l'Afrique, les utilisateurs d'Internet par satellite, etc.) seront envoyĂ©es Ă un serveur Ă Francfort.Ceci termine la configuration DNS de base. Reste Ă aller sur le site du registraire de domaine et Ă remplacer les NS de domaine actuels par ceux Ă©mis par ClouDNS. Et tandis que les NS seront mis Ă jour, nous prĂ©parerons le serveur.Installer des certificats SSL
Notre CDN fonctionnera sur HTTPS, donc si vous avez déjà des certificats SSL pour un domaine ou un sous-domaine, téléchargez-les sur tous les serveurs, par exemple, dans le répertoire / etc / ssl / yourdomain /S'il n'y a pas de certificats, vous pouvez en obtenir un gratuitement auprÚs de Let's Encrypt. Le script ACME Shell est parfait pour cela . Le client est pratique et facile à configurer, et surtout - vous permet de valider le domaine / sous-domaine pour DNS via l'API de ClouDNS.Nous n'installerons acme.sh que sur l'un des serveurs - European 199.247.18.199, à partir duquel les certificats seront copiés sur tous les autres. Pour installer, faites:root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc
Pendant l'installation du script, une tùche CRON sera créée pour le renouvellement ultérieur des certificats sans notre participation.La vérification du domaine lors de la délivrance d'un certificat sera effectuée à l'aide de DNS à l'aide de l'API.Par conséquent, dans le compte personnel ClouDNS du menu API du revendeur, vous devez créer une nouvelle API utilisateur et définir un mot de passe pour celle-ci. L'auth-id résultant avec le mot de passe est écrit dans le fichier ~ / .acme.sh / dnsapi / dns_cloudns.sh (à ne pas confondre avec le fichier dns_clou d dns.sh ). Voici les lignes pour décommenter et modifier:CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<>"
Maintenant, nous demandons un certificat SSL pour cdn.sayt.inroot@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"
Dans les paramĂštres pour l'avenir, nous avons spĂ©cifiĂ© une commande pour recharger automatiquement la configuration du serveur Web aprĂšs chaque renouvellement de la pĂ©riode de validitĂ© du certificat Ă l'avenir.L'ensemble du processus d'obtention d'un certificat peut prendre jusqu'Ă 2 minutes, ne l'interrompez pas. Si une erreur de validation de domaine se produit, essayez Ă nouveau d'exĂ©cuter la commande. Ă la fin, nous verrons oĂč les certificats ont Ă©tĂ© tĂ©lĂ©chargĂ©s:
rappelez - vous ces chemins, ils devront ĂȘtre spĂ©cifiĂ©s lors de la copie du certificat sur d'autres serveurs, ainsi que dans les paramĂštres du serveur Web. Nous ne prĂȘtons pas attention Ă l'erreur de rechargement des fichiers de configuration Nginx - sur un serveur entiĂšrement configurĂ©, il ne sera pas prĂ©sent lors du renouvellement des certificats.Il ne nous reste plus que SSL Ă copier le certificat reçu sur deux autres serveurs en enregistrant le chemin d'accĂšs aux fichiers. CrĂ©ez les mĂȘmes rĂ©pertoires sur chacun d'eux et faites une copie: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/
Pour que le renouvellement du certificat soit régulier, nous allons créer une tùche CRON quotidienne sur les deux serveurs avec la commande:scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
Dans ce cas, l'accĂšs au serveur source distant doit ĂȘtre configurĂ© par clĂ© , c'est-Ă -dire sans saisir de mot de passe. N'oubliez pas de le faire.Installer et configurer Nginx
Pour renvoyer du contenu statique, nous utiliserons Nginx, configuré comme serveur proxy de mise en cache. Mettez à jour la liste des packages et installez-la sur les trois serveurs:root@cdn:~# apt update
root@cdn:~# apt install nginx
Au lieu de la valeur par défaut, utilisez la configuration du spoiler ci-dessous:nginx.confuser 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;
}
}
}
Dans la config, éditez:- max_size - la taille du cache ne dépasse pas l'espace disque disponible
- inactif - durée de stockage des données en cache auxquelles personne n'a accédé
- ssl_certificate et ssl_certificate_key - chemins d'accÚs aux certificats SSL et aux fichiers de clés
- proxy_cache_valid - durée de stockage des données mises en cache
- proxy_pass - l'adresse du serveur d'origine Ă partir de laquelle le CDN demandera des fichiers pour la mise en cache. Dans notre exemple, c'est sayt.in
Comme vous pouvez le voir, tout est simple. La complexité ne peut survenir que dans la définition du temps de cache en raison de la similitude des directives inactive et proxy_cache_valid . Nous les analyserons dans notre exemple. Voici ce qui se passe avec inactive = 7d et proxy_cache_valid 90d :- si la demande n'est pas répétée dans les 7 jours, les données seront supprimées du cache aprÚs cette période
- si la demande est répétée au moins une fois tous les 7 jours, les données du cache seront considérées comme obsolÚtes aprÚs 90 jours et à la prochaine demande, Nginx la mettra à jour en la récupérant du serveur d'origine
AprÚs avoir édité nginx.conf , rechargez la configuration:root@cdn:~# service nginx reload
Notre CDN est complĂštement prĂȘt. Pour 15 $ / mois nous avons des points de prĂ©sence sur trois continents et 3 To de trafic: 1 To Ă chaque endroit.VĂ©rification du fonctionnement de CDN
Regardons les pings vers notre CDN Ă partir de diffĂ©rents emplacements gĂ©ographiques. Pour cela, tous les services de ping conviennent.Les rĂ©sultats sont bons. Nous allons maintenant placer l'image test test.jpg Ă la racine du site principal et vĂ©rifier la vitesse de son tĂ©lĂ©chargement via CDN. AussitĂŽt dit, aussitĂŽt fait . Le contenu est livrĂ© rapidement.Nous allons Ă©crire un petit script au cas oĂč nous voudrions vider le cache sur le point 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
Pour supprimer l'intĂ©gralitĂ© du cache, il suffit de l'exĂ©cuter, un fichier sĂ©parĂ© peut ĂȘtre nettoyĂ© comme ceci:root@cdn:~# ./purge.sh /test.jpg
Au lieu de conclusions
Enfin, je veux donner quelques conseils utiles afin de franchir immĂ©diatement le rĂąteau, ce qui m'a un jour fait mal Ă la tĂȘte:- Pour augmenter la tolĂ©rance aux pannes CDN, il est recommandĂ© de configurer le basculement DNS, ce qui permet de modifier rapidement un enregistrement A en cas de dĂ©faillance du serveur. Cela se fait dans le panneau de contrĂŽle des enregistrements DNS du domaine
- CDN, . CDN, 6-7 : , (), (), , ,
- CDN. , , -
- , ,
- Essayez de vérifier les pings de différents endroits vers vos serveurs. Ainsi, vous pouvez voir les régions les plus proches des points CDN et configurer correctement GeoDNS
- Selon les tùches, il n'est pas déplacé de configurer Nginx pour des exigences de mise en cache spécifiques et en tenant compte de la charge sur le serveur. Les articles sur le cache Nginx - ici et l'accélération du travail sous de lourdes charges: ici et ici m'ont beaucoup aidé.