Décharger les redirections non regex vers Fastly au lieu de Nginx (itinéraires)
Cette rubrique suggère une solution à un problème de performances de redirection classique que vous pouvez rencontrer lorsque vous déchargez des redirections non regex vers Fastly au lieu de Nginx dans Adobe Commerce sur l’infrastructure cloud.
Produits et versions concernés
- Adobe Commerce sur l’infrastructure cloud (toutes versions)
Master/Production/Staging
environnements exploitant rapidement
Problème
Dans Adobe Commerce sur l’infrastructure cloud, un grand nombre de redirections/réécritures non regex ne peuvent pas être effectuées sur la couche Nginx, ce qui peut entraîner des problèmes de performances.
Cause
Le fichier routes.yaml
du répertoire .magento/routes.yaml
définit les itinéraires de votre Adobe Commerce sur l’infrastructure cloud.
Si la taille de votre fichier routes.yaml
est supérieure ou égale à 32 Ko, vous devez décharger vos redirections/réécritures non regex vers Fastly.
Ce calque Nginx ne peut pas gérer un grand nombre de redirections/réécritures non regex, sinon des problèmes de performances se produiront.
Solution
La solution consiste à décharger ces redirections non regex vers Fastly à la place. Créez un chemin d’erreur générique vers lequel rediriger rapidement.
Les étapes suivantes expliquent comment placer des redirections à la place de Nginx.
-
Créez un dictionnaire Edge.
Tout d’abord, vous pouvez utiliser les fragments de code VCL dans Adobe Commerce pour définir un dictionnaire Edge. Elle contient les redirections.
Voici quelques mises en garde :
-
Fastly ne peut pas effectuer d'expression régulière sur les entrées du dictionnaire. Ce n'est qu'une correspondance exacte. Pour plus d’informations sur ces limites, consultez la documentation Fastly's on edge dictionary limitations.
-
Fastly est limitée à 1000 entrées dans un seul dictionnaire. Rapidement, cette limite peut être étendue, mais cela conduit à la troisième mise en garde.
-
Chaque fois que vous mettez à jour les entrées et déployez ce VCL mis à jour sur tous les noeuds, il y a une augmentation du temps de chargement géométrique avec l’extension des dictionnaires, ce qui signifie qu’un dictionnaire d’entrée de 2 000 chargera 3 x 4 x plus lentement qu’un dictionnaire d’entrée de 1 000. Mais ce n’est un problème que lorsque vous déployez VCL (mise à jour du dictionnaire ou modification du code de fonction VCL).
Cela n’a aucune incidence sur le temps nécessaire au traitement rapide d’une demande ; cela a un impact sur le temps nécessaire à la publication rapide d’une nouvelle configuration.
En règle générale, les modifications de configuration prennent quelques secondes en moyenne, généralement pas plus de 5 à 10 secondes. Par conséquent, une augmentation de 2 fois des éléments du dictionnaire prend jusqu’à 30 secondes pour que votre configuration soit déployée. Une augmentation de 4 fois prendrait près de 2 minutes. Cela nous amène à la quatrième mise en garde.
-
Il y a une limite assez stricte de 10 000 entrées dans un dictionnaire de périphérie.
Il est vivement recommandé de consolider votre liste de redirections. Vous pouvez utiliser plusieurs dictionnaires, mais n’oubliez pas que toute mise à jour que vous apportez à votre VCL prendra plusieurs minutes pour être renseignée de manière très rapide.
-
-
Comparez l’URL au(x) dictionnaire(s).
Lorsque la recherche d’URL se produit, la comparaison permet d’appliquer le code d’erreur personnalisé en cas de correspondance.
Utilisez un autre fragment de code VCL pour ajouter quelque chose comme ceci à
vcl_recv
:code language-none declare local var.redir-path STRING; set var.redir-path = table.lookup(redirects, std.tolower(req.url), ""); if (var.redir-path != "") { error 912 var.redir-path; }
Ici, nous vérifions si l'URL existe dans l'entrée du tableau. Si c’est le cas, nous appelons une erreur interne Fastly et nous transmettons à cette erreur l’URL de redirection à partir de la table.
-
Gérez la redirection.
Lorsqu’une correspondance est trouvée, l’action est effectuée qui est définie pour cet
obj.status
, dans ce cas une redirection de déplacement permanente 301.Utilisez un fragment de code final dans
vcl_error
pour renvoyer les codes d’erreur 301 au client :code language-none if (obj.status == 912) { set obj.http.location = obj.response; set obj.status = 301; set obj.response = "Moved Permanently"; return(deliver); }
Avec ce bloc, nous vérifions si le code d’erreur transmis à partir de
vcl_recv
correspond. Si c’est le cas, nous définirons l’emplacement sur le message d’erreur transmis, puis changerons le code d’état à 301 et le message à "Déplacé définitivement". À ce stade, la réponse doit être prête à revenir au client.
Service d’évaluation
Si vous ne souhaitez pas exécuter un environnement d’évaluation Adobe Commerce, mais que vous souhaitez voir à quoi ressembleraient ces redirections, vous pouvez configurer un compte d’évaluation directement sur Fastly.
Lecture connexe
- Référence VCL Fastly
- Configurez les itinéraires dans notre documentation destinée aux développeurs.
- Configurez Fastly dans notre documentation destinée aux développeurs.
- Aide-mémoire de l’expression régulière VCL dans notre documentation destinée aux développeurs.