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 Fastly

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.

Cette couche 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 pour la redirection vers Fastly.

Les étapes suivantes expliquent comment placer des redirections sur Fastly au lieu de Nginx.

  1. Créez un dictionnaire Edge.

    Tout d’abord, vous pouvez utiliser des VCL fragments de code dans Adobe Commerce pour définir un dictionnaire Edge. Elle contient les redirections.

    Voici quelques mises en garde :

    • Fastly ne peut pas faire regex sur les entrées du dictionnaire. Ce n'est qu'une correspondance exacte. Pour plus d’informations sur ces limites, consultez la documentation de Fastly sur les limites du dictionnaire Edge.

    • Fastly est limitée à 1 000 entrées dans un seul dictionnaire. Fastly peut étendre cette limite, mais cela conduit à la troisième mise en garde.

    • Chaque fois que vous mettez à jour les entrées et déployez qui a mis à jour VCL 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 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 la fonction VCL).

      Cela n’a aucune incidence sur le temps nécessaire au traitement d’une requête par Fastly ; cela a un impact sur le temps nécessaire à Fastly pour pousser 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 sachez que toute mise à jour que vous apportez à votre VCL prendra plusieurs minutes pour être renseignée dans Fastly.

  2. Comparez le URL au(x) dictionnaire(s).

    Lorsque la recherche URL se produit, la comparaison est effectuée pour appliquer le code d’erreur personnalisé si une correspondance est trouvée.

    Utilisez un autre extrait de code VCL pour ajouter à vcl_recv un élément du type :

    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 le URL existe dans l’entrée de la table. Si c'est le cas, nous allons appeler une erreur interne Fastly et transmettre à cette erreur la redirection URL depuis la table.

  3. 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

WARNING
Si vous souhaitez essayer toutes ces étapes, il est vivement recommandé de configurer un environnement d’évaluation Adobe Commerce. Ainsi, vous pouvez exécuter des tests sur le service Fastly pour vous assurer que tout se comporte comme prévu.

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 intermédiaire directement sur Fastly.

Lecture connexe

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a